Sunday, 21 July 2019

How to use Kubernetes Minikube

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.

Objective of this Post

  1. Deploy a hello world application to Minikube.
  2. Run the app.
  3. 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

  1. Click Launch Terminal
    Note: If you installed Minikube locally, run minikube start.
  2. Open the Kubernetes dashboard in a browser:
    minikube dashboard
  3. Katacoda environment only: At the top of the terminal pane, click the plus sign, and then click Select port to view on Host 1.
  4. 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.
  1. 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
  2. View the Deployment:
    kubectl get deployments
    Output:
    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    hello-node   1         1         1            1           1m
  3. View the Pod:
    kubectl get pods
    Output:
    NAME                          READY     STATUS    RESTARTS   AGE
    hello-node-5f76cf6ccf-br9b5   1/1       Running   0          1m
  4. View cluster events:
    kubectl get events
  5. 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.
  1. 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.
  2. 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, the LoadBalancer type makes the Service accessible through the minikube service command.
  3. Run the following command:
    minikube service hello-node
  4. Katacoda environment only: Click the plus sign, and then click Select port to view on Host 1.
  5. 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.

Enable Addons

Minikube has a set of built-in addons that can be enabled, disabled and opened in the local Kubernetes environment.
  1. 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
  2. Enable an addon, for example, heapster:
    minikube addons enable heapster
    Output:
    heapster was successfully enabled
  3. 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
  4. 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

Source :- Kubernetes

2 comments:


  1. Too good article,keep sharing more posts with us.Thank you....
    DevOps Training
    DevOps Online Training

    ReplyDelete
    Replies
    1. Thanks Rajani for reading it. Please go through my articles at http://aditya-knowledge-center.co.in/

      Delete

Exploring Amazon Web Services (AWS)

  Compute Services Database Services Storage Services Networking Services Analytics Services Security, Identity, and Compliance Services Ama...