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 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-node
- View the Deployment:
kubectl get deployments
Output:NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-node 1 1 1 1 1m
- View the Pod:
kubectl get pods
Output:NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
- View cluster events:
kubectl get events
- View the
kubectl
configuration: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 expose
command:kubectl expose deployment hello-node --type=LoadBalancer --port=8080
The--type=LoadBalancer
flag indicates that you want to expose your Service outside of the cluster. - View the Service you just created:
kubectl get services
Output: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 23m
On cloud providers that support load balancers, an external IP address would be provisioned to access the Service. On Minikube, theLoadBalancer
type makes the Service accessible through theminikube service
command. - 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 to8080
in 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 list
Output: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 heapster
Output:heapster was successfully enabled
- View the Pod and Service you just created:
kubectl get pod,svc -n kube-system
Output: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 heapster
Output: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