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.
Source :- Kubernetes
Objective of this Post
- Deploy a hello world application to Minikube.
- Run the app.
- View application logs.
Create an Application and Image
- Create a directory called Minikube
- Inside the directory create two files , 1. server.js and 2. Dockerfile
- Content of server.js
var http = require('http');
var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
- Content of Dockerfile
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js
Start Minikube Cluster
- Click Launch TerminalNote: If you installed Minikube locally, run
minikube start. - Open the Kubernetes dashboard in a browser:
minikube dashboard - Katacoda 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.
Create Deployment
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 KubernetesDeployment 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 createcommand 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-node - View the Deployment:
kubectl get deploymentsOutput:NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-node 1 1 1 1 1m - View the Pod:
kubectl get podsOutput:NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m - View cluster events:
kubectl get events - View the
kubectlconfiguration:kubectl config view
Create Service
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 exposecommand:kubectl expose deployment hello-node --type=LoadBalancer --port=8080The--type=LoadBalancerflag 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, theLoadBalancertype makes the Service accessible through theminikube servicecommand. - Run the following command:
minikube service hello-node - Katacoda environment only: Click the plus sign, and then click Select port to view on Host 1.
- Katacoda environment only: Type
30369(see port opposite to8080in services output), and then clickThis opens up a browser window that serves your app and shows the “Hello World” message.
Enable Addons
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: enabled - Enable an addon, for example,
heapster:minikube addons enable heapsterOutput:heapster was successfully enabled - View 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 26s - Disable
heapster:minikube addons disable heapsterOutput:heapster was successfully disabled
Clean Up
Now you can clean up the resources you created in your cluster:
kubectl delete service hello-node
kubectl delete deployment hello-node
Optionally, stop the Minikube virtual machine (VM):
minikube stop
Optionally, delete the Minikube VM:
minikube delete
ReplyDeleteToo good article,keep sharing more posts with us.Thank you....
DevOps Training
DevOps Online Training
Thanks Rajani for reading it. Please go through my articles at http://aditya-knowledge-center.co.in/
Delete