Kubernetes Practices

Prerequisites

Install KVM or VirtualBox

Install Ubuntu / Debian on KVM or VirtualBox

Install Minikube

Check K8s version and config

kubectl version
kubectl config
kubectl cluster-info

Get / Describe command

kubectl get ndoes
kubectl get pods
kubectl get deployments
kubectl get services

kubectl describe pods

Deploy hello-world node demo app

  • Deploy a demo app

    kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
    
    # View deployments and pods
    kubectl get deployments
    kubectl get pods
    
  • Pods that are running inside Kubernetes are running on a private, isolated network. By default they are visible from other pods and services within the same kubernetes cluster, but not outside that network.

  • The kubectl command can create a proxy that will forward communications into the cluster-wide, private network.

    # Create a proxy from another terminal
    kubectl proxy
    
    # Test it from original termianl
    curl http://localhost:8001/version
    
  • Get pod name

    export POD_NAME=$(kubectl get pods -o go-template --template \
     '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
    echo Name of the Pod: $POD_NAME
    kubectl logs $POD_NAME
    
  • Execute command on containter

    kubectl exec $POD_NAME env
    kubectl exec $POD_NAME bash
    kubectl exec $POD_NAME curl localhost:8080
    
  • Scale demo app with replica

    # kubernetes-bootcamp   deployment is the same as above
    kubectl get pods -o wide
    kubectl describe deployments/kubernetes-bootcamp    
    kubectl scale deployments/kubernetes-bootcamp --replicas=2
    
    # Get NodePort
    export NODE_PORT=$(kubectl get services/kubernetes-bootcamp \
        -o go-template='{{(index .spec.ports 0).nodePort}}')
    echo NODE_PORT=$NODE_PORT
    
    # Test load balance
    curl $(minikube ip):$NODE_PORT