This tutorial shows you how to run a simple Hello World Node.js app on Kubernetes using Minikube and Katacoda. Katacoda provides a free, in-browser Kubernetes environment.
Note: You can also follow this tutorial if you’ve installed Minikube locally.
This tutorial provides a container image built from the following files:
| minikube/server.js | 
|---|
|  | 
| minikube/Dockerfile | 
|---|
|  | 
For more information on the docker build command, read the Docker documentation.
Click Launch Terminal
Note: If you installed Minikube locally, runminikube start.
Open the Kubernetes dashboard in a browser:
minikube dashboardKatacoda environment only: At the top of the terminal pane, click the plus sign, and then click Select port to view on Host 1.
Katacoda environment only: Type 30000, and then click Display Port.
A Kubernetes Pod is a group of one or more Containers, tied together for the purposes of administration and networking. The Pod in this tutorial has only one Container. A Kubernetes Deployment checks on the health of your Pod and restarts the Pod’s Container if it terminates. Deployments are the recommended way to manage the creation and scaling of Pods.
Use the kubectl create command to create a Deployment that manages a Pod. The
Pod runs a Container based on the provided Docker image.
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-nodeView the Deployment:
kubectl get deploymentsOutput:
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-node   1         1         1            1           1mView the Pod:
kubectl get podsOutput:
NAME                          READY     STATUS    RESTARTS   AGE
hello-node-5f76cf6ccf-br9b5   1/1       Running   0          1mView cluster events:
kubectl get eventsView the kubectl configuration:
kubectl config viewNote: For more information aboutkubectlcommands, see the kubectl overview.
By default, the Pod is only accessible by its internal IP address within the
Kubernetes cluster. To make the hello-node Container accessible from outside the
Kubernetes virtual network, you have to expose the Pod as a
Kubernetes Service.
Expose the Pod to the public internet using the kubectl expose command:
kubectl expose deployment hello-node --type=LoadBalancer --port=8080The --type=LoadBalancer flag indicates that you want to expose your Service
outside of the cluster.
View the Service you just created:
kubectl get servicesOutput:
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.108.144.78   <pending>     8080:30369/TCP   21s
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          23mOn cloud providers that support load balancers,
an external IP address would be provisioned to access the Service. On Minikube,
the LoadBalancer type makes the Service accessible through the minikube service
command.
Run the following command:
minikube service hello-nodeKatacoda environment only: Click the plus sign, and then click Select port to view on Host 1.
Katacoda environment only: Type 30369 (see port opposite to 8080 in services output), and then click
This opens up a browser window that serves your app and shows the “Hello World” message.
Minikube has a set of built-in addons that can be enabled, disabled and opened in the local Kubernetes environment.
List the currently supported addons:
minikube addons listOutput:
addon-manager: enabled
coredns: disabled
dashboard: enabled
default-storageclass: enabled
efk: disabled
freshpod: disabled
heapster: disabled
ingress: disabled
kube-dns: enabled
metrics-server: disabled
nvidia-driver-installer: disabled
nvidia-gpu-device-plugin: disabled
registry: disabled
registry-creds: disabled
storage-provisioner: enabledEnable an addon, for example, heapster:
minikube addons enable heapsterOutput:
heapster was successfully enabledView the Pod and Service you just created:
kubectl get pod,svc -n kube-systemOutput:
NAME                                        READY     STATUS    RESTARTS   AGE
pod/heapster-9jttx                          1/1       Running   0          26s
pod/influxdb-grafana-b29w8                  2/2       Running   0          26s
pod/kube-addon-manager-minikube             1/1       Running   0          34m
pod/kube-dns-6dcb57bcc8-gv7mw               3/3       Running   0          34m
pod/kubernetes-dashboard-5498ccf677-cgspw   1/1       Running   0          34m
pod/storage-provisioner                     1/1       Running   0          34m
NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/heapster               ClusterIP   10.96.241.45    <none>        80/TCP              26s
service/kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP       34m
service/kubernetes-dashboard   NodePort    10.109.29.1     <none>        80:30000/TCP        34m
service/monitoring-grafana     NodePort    10.99.24.54     <none>        80:30002/TCP        26s
service/monitoring-influxdb    ClusterIP   10.111.169.94   <none>        8083/TCP,8086/TCP   26sDisable heapster:
minikube addons disable heapsterOutput:
heapster was successfully disabledNow you can clean up the resources you created in your cluster:
kubectl delete service hello-node
kubectl delete deployment hello-nodeOptionally, stop the Minikube virtual machine (VM):
minikube stopOptionally, delete the Minikube VM:
minikube deleteWas this page helpful?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.