MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

  • kubernetes

kubernetes

Contents

  1. kubernetes
    1. cluster details and health status
    2. get cluster nodes
    3. Deploy containers
    4. dashboard
    5. Init master
    6. Deploy cni weaveworks - deploy a pod network to the cluster
    7. Join cluster
    8. Deploy container in cluster
    9. Apply dashboard in cluster
    10. List services
    11. Start containers using Kubectl
    12. Certified kubernetes application developer
    13. Shows mapping between services and pods
    14. Show events ordered by last timestamp ascending
  • https://www.katacoda.com/courses/kubernetes

  • deploy docker images in containers. Cluster has nodes. Nodes has pods/containers. Each cluster might correspond to a service.
  • Ingress, An API object that manages external access to the services in a cluster, typically HTTP. Ideas like reverse-proxy and load balancer.
  • minikube version # check version 1.2.0
  • minikube start

   1 minikube version
   2 # minikube version: v1.2.0
   3 minikube start
   4 # * minikube v1.2.0 on linux (amd64)
   5 # * Creating none VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
   6 # * Configuring environment for Kubernetes v1.15.0 on Docker 18.09.5
   7 #   - kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
   8 # * Pulling images ...
   9 # * Launching Kubernetes ...
  10 # 
  11 # * Configuring local host environment ...
  12 # * Verifying: apiserver proxy etcd scheduler controller dns
  13 # * Done! kubectl is now configured to use "minikube"
  14 

cluster details and health status

   1 kubectl cluster-info
   2 # Kubernetes master is running at https://172.17.0.30:8443
   3 # KubeDNS is running at https://172.17.0.30:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
   4 # 
   5 # To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
   6 

get cluster nodes

   1 kubectl get nodes
   2 # NAME       STATUS   ROLES    AGE    VERSION
   3 # minikube   Ready    master   3m1s   v1.15.0
   4 

Deploy containers

   1 # deploy container
   2 kubectl create deployment first-deployment --image=katacoda/docker-http-server
   3 # deployment.apps/first-deployment created
   4 # deploy container in cluster
   5 # check pods
   6 kubectl get pods
   7 # NAME                               READY   STATUS    RESTARTS   AGE
   8 # first-deployment-8cbf74484-s2fkl   1/1     Running   0          25s
   9 # expose deployment
  10 kubectl expose deployment first-deployment --port=80 --type=NodePort
  11 # service/first-deployment exposed
  12 
  13 kubectl get svc first-deployment
  14 # NAME               TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
  15 # first-deployment   NodePort   10.98.246.87   <none>        80:31219/TCP   105s
  16 # do request to port 80 in cluster ip
  17 curl 10.98.246.87:80
  18 # <h1>This request was processed by host: first-deployment-8cbf74484-s2fkl</h1>
  19 # 
  20 curl host01:31219
  21 # <h1>This request was processed by host: first-deployment-8cbf74484-s2fkl</h1>
  22 

dashboard

   1 minikube addons enable dashboard 
   2 #The Kubernetes dashboard allows you to view your applications
   3 # in a UI.
   4 # * dashboard was successfully enabled
   5 kubectl apply -f /opt/kubernetes-dashboard.yaml 
   6 # only in katacoda
   7 # service/kubernetes-dashboard-katacoda created
   8 # check progress
   9 kubectl get pods -n kube-system -w  #check progress
  10 # NAME                                    READY   STATUS    RESTARTS   AGE
  11 # coredns-5c98db65d4-b2kxm                1/1     Running   0          17m
  12 # coredns-5c98db65d4-mm567                1/1     Running   1          17m
  13 # etcd-minikube                           1/1     Running   0          16m
  14 # kube-addon-manager-minikube             1/1     Running   0          16m
  15 # kube-apiserver-minikube                 1/1     Running   0          16m
  16 # kube-controller-manager-minikube        1/1     Running   0          16m
  17 # kube-proxy-pngm9                        1/1     Running   0          17m
  18 # kube-scheduler-minikube                 1/1     Running   0          16m
  19 # kubernetes-dashboard-7b8ddcb5d6-xt5nt   1/1     Running   0          76s
  20 # storage-provisioner                     1/1     Running   0          17m
  21 
  22 # dashboard url https://2886795294-30000-kitek05.environments.katacoda.com/
  23 # how to launch a Single Node Kubernetes cluster. 
  24 

Init master

   1 master $ kubeadm init --kubernetes-version $(kubeadm version -o short)
   2 [init] Using Kubernetes version: v1.14.0
   3 [preflight] Running pre-flight checks
   4 [preflight] Pulling images required for setting up a Kubernetes cluster
   5 [preflight] This might take a minute or two, depending on the speed of your internet connection
   6 [preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
   7 [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
   8 [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
   9 [kubelet-start] Activating the kubelet service
  10 [certs] Using certificateDir folder "/etc/kubernetes/pki"
  11 [certs] Generating "ca" certificate and key
  12 [certs] Generating "apiserver" certificate and key
  13 [certs] apiserver serving cert is signed for DNS names [master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 172.17.0.69]
  14 [certs] Generating "apiserver-kubelet-client" certificate and key
  15 [certs] Generating "front-proxy-ca" certificate and key
  16 [certs] Generating "front-proxy-client" certificate and key
  17 [certs] Generating "etcd/ca" certificate and key
  18 [certs] Generating "etcd/healthcheck-client" certificate and key
  19 [certs] Generating "apiserver-etcd-client" certificate and key
  20 [certs] Generating "etcd/server" certificate and key
  21 [certs] etcd/server serving cert is signed for DNS names [master localhost] and IPs [172.17.0.69 127.0.0.1 ::1]
  22 [certs] Generating "etcd/peer" certificate and key
  23 [certs] etcd/peer serving cert is signed for DNS names [master localhost] and IPs [172.17.0.69 127.0.0.1 ::1]
  24 [certs] Generating "sa" key and public key
  25 [kubeconfig] Using kubeconfig folder "/etc/kubernetes"
  26 [kubeconfig] Writing "admin.conf" kubeconfig file
  27 [kubeconfig] Writing "kubelet.conf" kubeconfig file
  28 [kubeconfig] Writing "controller-manager.conf" kubeconfig file
  29 [kubeconfig] Writing "scheduler.conf" kubeconfig file
  30 [control-plane] Using manifest folder "/etc/kubernetes/manifests"
  31 [control-plane] Creating static Pod manifest for "kube-apiserver"
  32 [control-plane] Creating static Pod manifest for "kube-controller-manager"
  33 [control-plane] Creating static Pod manifest for "kube-scheduler"
  34 [etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
  35 [wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
  36 [apiclient] All control plane components are healthy after 16.503433 seconds
  37 [upload-config] storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system"Namespace
  38 [kubelet] Creating a ConfigMap "kubelet-config-1.14" in namespace kube-system with the configuration for the kubelets in the cluster
  39 [upload-certs] Skipping phase. Please see --experimental-upload-certs
  40 [mark-control-plane] Marking the node master as control-plane by adding the label "node-role.kubernetes.io/master=''"
  41 [mark-control-plane] Marking the node master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
  42 [bootstrap-token] Using token: xfvno5.q2xfb2m3nw7grdjm
  43 [bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
  44 [bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
  45 [bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approveCSRs from a Node Bootstrap Token
  46 [bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
  47 [bootstrap-token] creating the "cluster-info" ConfigMap in the "kube-public" namespace
  48 [addons] Applied essential addon: CoreDNS
  49 [addons] Applied essential addon: kube-proxy
  50 
  51 Your Kubernetes control-plane has initialized successfully!
  52 
  53 To start using your cluster, you need to run the following as a regular user:
  54 
  55   mkdir -p $HOME/.kube
  56   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  57   sudo chown $(id -u):$(id -g) $HOME/.kube/config
  58 
  59 You should now deploy a pod network to the cluster.
  60 Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  61   https://kubernetes.io/docs/concepts/cluster-administration/addons/
  62 
  63 Then you can join any number of worker nodes by running the following on each as root:
  64 
  65 kubeadm join 172.17.0.69:6443 --token xfvno5.q2xfb2m3nw7grdjm \
  66     --discovery-token-ca-cert-hash sha256:26d11c038d236967630d401747f210af9e3679fb1638e8b599a2da4cb98ab159

   1 # In master 
   2 mkdir -p $HOME/.kube
   3 pwd
   4 # /root
   5 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   6 sudo chown $(id -u):$(id -g) $HOME/.kube/config
   7 export KUBECONFIG=$HOME/.kube/config
   8 echo $KUBECONFIG/root/.kube/config

Deploy cni weaveworks - deploy a pod network to the cluster

Container Network Interface (CNI) defines how the different nodes and their workloads should communicate. Weave Net provides a network to connect all pods together, implementing the Kubernetes model. Kubernetes uses the Container Network Interface (CNI) to join pods onto Weave Net.

   1 # In master
   2 kubectl apply -f /opt/weave-kube
   3 # serviceaccount/weave-net created
   4 # clusterrole.rbac.authorization.k8s.io/weave-net created
   5 # clusterrolebinding.rbac.authorization.k8s.io/weave-net created
   6 # role.rbac.authorization.k8s.io/weave-net created
   7 # rolebinding.rbac.authorization.k8s.io/weave-net created
   8 # daemonset.extensions/weave-net created
   9 kubectl get pod -n kube-system
  10 # NAME                             READY   STATUS    RESTARTS   AGE
  11 # coredns-fb8b8dccf-b9rd7          1/1     Running   0          11m
  12 # coredns-fb8b8dccf-sfgbn          1/1     Running   0          11m
  13 # etcd-master                      1/1     Running   0          10m
  14 # kube-apiserver-master            1/1     Running   0          10m
  15 # kube-controller-manager-master   1/1     Running   0          10m
  16 # kube-proxy-l42wp                 1/1     Running   0          11m
  17 # kube-scheduler-master            1/1     Running   1          10m
  18 # weave-net-mcxml                  2/2     Running   0          84s
  19 

Join cluster

   1 # In master
   2 kubeadm token list # check tokens
   3 # TOKEN                     TTL       EXPIRES                USAGES                   DESCRIPTION
   4 #                     EXTRA GROUPS
   5 # xfvno5.q2xfb2m3nw7grdjm   23h       2019-07-28T16:19:18Z   authentication,signing   The default bootstrap # token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
   6 

   1 # in node01
   2 # join cluster
   3 kubeadm join --discovery-token-unsafe-skip-ca-verification --token=xfvno5.q2xfb2m3nw7grdjm 172.17.0.69:6443
   4 # [preflight] Running pre-flight checks
   5 # [preflight] Reading configuration from the cluster...
   6 # [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
   7 # [kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.14" ConfigMap in the kube-system namespace
   8 # [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
   9 # [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
  10 # [kubelet-start] Activating the kubelet service
  11 # [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
  12 # 
  13 # This node has joined the cluster:
  14 # * Certificate signing request was sent to apiserver and a response was received.
  15 # * The Kubelet was informed of the new secure connection details.
  16 # 
  17 # Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
  18 # The --discovery-token-unsafe-skip-ca-verification tag is used to bypass the Discovery Token verification. 
  19 
  20 # in master
  21 kubectl get nodes
  22 # NAME     STATUS   ROLES    AGE    VERSION
  23 # master   Ready    master   17m    v1.14.0
  24 # node01   Ready    <none>   107s   v1.14.0                                                       
  25 # bootstrap token generated b
  26 
  27 # in node01
  28 kubectl get nodes 
  29 # The connection to the server localhost:8080 was refused - did you specify the right host or port
  30 

Deploy container in cluster

   1 # In master
   2 kubectl create deployment http --image=katacoda/docker-http-server:latest
   3 # deployment.apps/http created
   4 kubectl get pods
   5 # NAME                    READY   STATUS    RESTARTS   AGE
   6 # http-7f8cbdf584-74pd9   1/1     Running   0          11s
   7 docker ps | grep http-server
   8 
   9 # In node01
  10 docker ps | grep http-serveradb3cde7f861        
  11 # katacoda/docker-http-server   "/app"                   
  12 # About a minute ago
  13 # Up About a minute                       k8s_docker-http-server_http-7f8cbdf584-74pd9_default_04a
  14 # 17065-b08d-11e9-bff1-0242ac110045_0
  15 
  16 # expose deployment in master
  17 kubectl get pods
  18 # NAME                    READY   STATUS    RESTARTS   AGE
  19 # http-7f8cbdf584-74pd9   1/1     Running   0          17m                                        bootstrap # token generated b
  20 kubectl expose deployment http  --port=80 --type=NodePort
  21 # service/http exposed
  22 
  23 kubectl get service http
  24 # NAME   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
  25 # http   NodePort   10.101.65.149   <none>        80:30982/TCP   49s
  26 
  27 curl 10.101.65.149:80
  28 # <h1>This request was processed by host: http-7f8cbdf584-74pd9</h1>
  29 
  30 curl http://10.101.65.149
  31 # <h1>This request was processed by host: http-7f8cbdf584-74pd9</h1>
  32 

Apply dashboard in cluster

  • Dashboard General-purpose web UI for Kubernetes clusters Dashboard Version: v1.10.0

   1 #  In master 
   2 kubectl apply -f dashboard.yaml
   3 # secret/kubernetes-dashboard-certs created
   4 # serviceaccount/kubernetes-dashboard created
   5 # role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
   6 # rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
   7 # deployment.apps/kubernetes-dashboard created
   8 # service/kubernetes-dashboard created
   9 kubectl get pods -n kube-system
  10 # NAME                                    READY   STATUS              RESTARTS   AGEcoredns-fb8b8dccf-b9rd7                 # 1/1     Running             0          42mcoredns-fb8b8dccf-sfgbn                 1/1     Running             # 0          42m
  11 # etcd-master                             1/1     Running             0          41m
  12 # kube-apiserver-master                   1/1     Running             0          40m
  13 # kube-controller-manager-master          1/1     Running             0          40m
  14 # kube-proxy-gwrps                        1/1     Running             0          26m
  15 # kube-proxy-l42wp                        1/1     Running             0          42m
  16 # kube-scheduler-master                   1/1     Running             1          40m
  17 # kubernetes-dashboard-5f57845f9d-ls7q2   0/1     ContainerCreating   0          2s
  18 # weave-net-gww8b                         2/2     Running             0          26m
  19 # weave-net-mcxml                         2/2     Running             0          31m
  20 

Create service account for dashboard

   1 cat <<EOF | kubectl create -f - 
   2 apiVersion: v1
   3 kind: ServiceAccount
   4 metadata:
   5   name: admin-user
   6   namespace: kube-system
   7 ---
   8 apiVersion: rbac.authorization.k8s.io/v1beta1
   9 kind: ClusterRoleBinding
  10 metadata:
  11   name: admin-user
  12 roleRef:
  13   apiGroup: rbac.authorization.k8s.io
  14   kind: ClusterRole
  15   name: cluster-admin
  16 subjects:
  17 - kind: ServiceAccount
  18   name: admin-user
  19   namespace: kube-system
  20 EOF
  21 
  22 # Get login token
  23 kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
  24 
  25 When the dashboard was deployed, it used externalIPs to bind the service to port 8443. This makes the dashboard available to outside of the cluster and viewable at https://2886795335-8443-kitek05.environments.katacoda.com/
  26 
  27 # Use the admin-user token to access the dashboard.
  28 https://2886795335-8443-kitek05.environments.katacoda.com/#!/login
  29 # sign in using token
  30 eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXNzcTl4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2Y2RiNGZmMy1iMDkwLTExZTktYmZmMS0wMjQyYWMxMTAwNDUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.R2OtDYxXaR0Pgluzq1m8FMZflF2tdYtJdG5XhkVC28vf1WkJu-Zo51I5ONUiK2WdBEMPw-N2PW_R9l6lak1clvlxfUSn777nThYSxhmR5pfxi6GmDlFo928KJvWVPDen1jrzAaQOEUZ1maOzPcnjKGpR-CRTgmYDnxZY84rqi68y0vfdn16ER8HeW-wkJ-hfGyUAhryk_ob1CUBjjbs-vefpaLcHLdrWNaKaFi1j5fCc_eJi10FpSTmuBsb04xgN0I17hkTlSw2fyOAj7LtC3pBDrK0nOdHCJkBEtsg89rkvLufYph5AFeoWQVKdW9JZH8BYS91BFla7pZnTwdBVeA
  31 
  32 https://2886795335-8443-kitek05.environments.katacoda.com/#!/overview?namespace=default

List services

   1 # In master
   2 kubectl get service
   3 # NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
   4 # http         NodePort    10.101.65.149   <none>        80:30982/TCP   17m
   5 # kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        56m
   6 

Start containers using Kubectl

   1 minikube start # start kubernetes cluster and its components
   2 # * minikube v1.2.0 on linux (amd64)
   3 # * Creating none VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
   4 # * Configuring environment for Kubernetes v1.15.0 on Docker 18.09.5
   5 #   - kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
   6 # * Pulling images ...
   7 # * Launching Kubernetes ...
   8 # * Configuring local host environment ...
   9 # * Verifying: apiserver proxy etcd
  10 # 
  11 #  scheduler controller dns
  12 # * Done! kubectl is now configured to use "minikube"
  13 kubectl get nodes
  14 # NAME       STATUS   ROLES    AGE    VERSION
  15 # minikube   Ready    master   2m2s   v1.15.0
  16 
  17 kubectl get service
  18 # NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
  19 # kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   2m18s
  20 # This deployment is issued to the Kubernetes master which launches the Pods and containers required. Kubectl run_ is similar to docker run but at a cluster 
  21 level.
  22 #  launch a deployment called http which will start a container based on the Docker Image katacoda/docker-http-server:latest.
  23 kubectl run http --image=katacoda/docker-http-server:latest --replicas=1
  24 # kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version.Use kubectl run --generator=run-pod/v1 or kubectl create instead.
  25 # deployment.apps/http created
  26 kubectl get deployments
  27 # NAME   READY   UP-TO-DATE   AVAILABLE   AGE
  28 # http   1/1     1            1           6s
  29 
  30 # you can describe the deployment process.
  31 kubectl describe deployment http
  32 
  33 # expose the container port 80 on the host 8000 binding to the external-ip of the host.
  34 kubectl expose deployment http --external-ip="172.17.0.13" --port=8000 --target-port=80
  35 # service/http exposed
  36 
  37 curl http://172.17.0.13:8000
  38 # <h1>This request was processed by host: http-5fcf9dd9cb-zfkkz</h1>
  39 
  40 kubectl get pods
  41 # NAME                    READY   STATUS    RESTARTS   AGE
  42 # http-5fcf9dd9cb-zfkkz   1/1     Running   0          3m26s
  43 
  44 kubectl get service
  45 # NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
  46 # http         ClusterIP   10.100.157.159   172.17.0.13   8000/TCP   57s
  47 # kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP    7m41s
  48 
  49 curl http://10.100.157.159:8000
  50 # <h1>This request was processed by host: http-5fcf9dd9cb-zfkkz</h1>
  51 
  52 kubectl run httpexposed --image=katacoda/docker-http-server:latest --replicas=1 --port=80 --host
  53 port=8001
  54 # kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version.
  55 # Use kubectl run --generator=run-pod/v1 or kubectl create instead.
  56 # deployment.apps/httpexposed created
  57 curl http://172.17.0.13:8001
  58 # <h1>This request was processed by host: httpexposed-569df5d86-rzzhb</h1>
  59 kubectl get svc
  60 # NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
  61 # http         ClusterIP   10.100.157.159   172.17.0.13   8000/TCP   3m50s
  62 # kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP    10m
  63 
  64 kubectl get pods
  65 # NAME                          READY   STATUS    RESTARTS   AGE
  66 # http-5fcf9dd9cb-zfkkz         1/1     Running   0          7m9s
  67 # httpexposed-569df5d86-rzzhb   1/1     Running   0          36s
  68 
  69 # Scaling the deployment will request Kubernetes to launch additional Pods.
  70 kubectl scale --replicas=3 deployment http
  71 # deployment.extensions/http scaled
  72 
  73 kubectl get pods # amount of pods for service http increased to 3
  74 # NAME                          READY   STATUS    RESTARTS   AGE
  75 # http-5fcf9dd9cb-fhljh         1/1     Running   0          31s
  76 # http-5fcf9dd9cb-wb2dh         1/1     Running   0          31s
  77 # http-5fcf9dd9cb-zfkkz         1/1     Running   0          9m27s
  78 # httpexposed-569df5d86-rzzhb   1/1     Running   0          2m54s
  79 
  80 # Once each Pod starts it will be added to the load balancer service.
  81 kubectl get service
  82 # NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
  83 # http         ClusterIP   10.100.157.159   172.17.0.13   8000/TCP   7m28s
  84 # kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP    14m
  85 
  86 kubectl describe svc http
  87 # Name:              http
  88 # Namespace:         defaultLabels:            run=httpAnnotations:       <none>
  89 # Selector:          run=httpType:              ClusterIPIP:                10.100.157.159
  90 # External IPs:      172.17.0.13
  91 # Port:              <unset>  8000/TCP
  92 # TargetPort:        80/TCP
  93 # Endpoints:         172.18.0.4:80,172.18.0.6:80,172.18.0.7:80
  94 # Session Affinity:  None
  95 # Events:            <none>
  96 
  97 curl http://172.17.0.13:8000
  98 # <h1>This request was processed by host: http-5fcf9dd9cb-wb2dh</h1>
  99 curl http://172.17.0.13:8000
 100 # <h1>This request was processed by host: http-5fcf9dd9cb-fhljh</h1>
 101 curl http://172.17.0.13:8000
 102 # <h1>This request was processed by host: http-5fcf9dd9cb-zfkkz</h1>
 103 

Certified kubernetes application developer

  • https://www.katacoda.com/courses/kubernetes/first-steps-to-ckad-certification

   1 # In master 
   2 launch.sh
   3 # Waiting for Kubernetes to start...
   4 # Kubernetes started
   5 kubectl get nodes
   6 # NAME     STATUS   ROLES    AGE   VERSION
   7 # master   Ready    master   85m   v1.14.0
   8 # node01   Ready    <none>   85m   v1.14.0
   9 
  10 # deploy app
  11 kubectl create deployment examplehttpapp --image=katacoda/docker-http-server
  12 # deployment.apps/examplehttpapp created
  13 
  14 # view all deployments
  15 kubectl get deployments
  16 # NAME             READY   UP-TO-DATE   AVAILABLE   AGE
  17 # examplehttpapp   1/1     1            1           25s
  18 
  19 # A deployment will launch a set of Pods. A pod is a group of one or more containers deployed across the cluster. 
  20 kubectl get pods
  21 # NAME                            READY   STATUS    RESTARTS   AGE
  22 # examplehttpapp-58f66848-n7wn7   1/1     Running   0          71s
  23 
  24 # show pod ip and node where it is
  25 kubectl get pods -o wide
  26 # NAME                            READY   STATUS    RESTARTS   AGE    IP          NODE     NOMINATED NODE   # READINESS GATES
  27 # examplehttpapp-58f66848-n7wn7   1/1     Running   0          113s   10.44.0.2   node01   <none>           <none>
  28 
  29 # describe pod
  30 kubectl describe pod examplehttpapp-58f66848-n7wn7
  31 # Name:               examplehttpapp-58f66848-n7wn7
  32 # Namespace:          default
  33 # Priority:           0
  34 # PriorityClassName:  <none>
  35 # Node:               node01/172.17.0.24
  36 # Start Time:         Sat, 27 Jul 2019 17:59:35 +0000
  37 # Labels:             app=examplehttpapp
  38 #                     pod-template-hash=58f66848
  39 # Annotations:        <none>
  40 # Status:             Running
  41 # IP:                 10.44.0.2
  42 
  43 # List all namespaces with in the cluster with 
  44 kubectl get namespaces
  45 kubectl get ns
  46 
  47 # The namespaces can be used to filter queries to the available objects. 
  48 kubectl get pods -n kube-system
  49 
  50 kubectl create ns testns
  51 # namespace/testns created
  52 kubectl create deployment namespacedeg -n testns --image=katacoda/docker-http-server
  53 # deployment.apps/namespacedeg created
  54 kubectl get pods -n testns
  55 # NAME                            READY   STATUS    RESTARTS   AGE
  56 # namespacedeg-74dcc7dc64-wcxnj   1/1     Running   0          3s
  57 kubectl get pods -n testns -o wide
  58 # NAME                            READY   STATUS    RESTARTS   AGE   IP          NODE     NOMINATED NODE   READINESS GATES
  59 # namespacedeg-74dcc7dc64-wcxnj   1/1     Running   0          18s   10.44.0.3   node01   <none>           <none>
  60 
  61 # Kubectl can help scale the number of Pods running for a deployment, referred to as replicas.
  62 kubectl scale deployment examplehttpapp --replicas=5
  63 # deployment.extensions/examplehttpapp scaled
  64 kubectl get deployments -o wide
  65 # NAME             READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS           IMAGES                        SELECTOR
  66 # examplehttpapp   5/5     5            5           9m6s   docker-http-server   katacoda/docker-http-server   app=examplehttpapp
  67 kubectl get pods -o wide
  68 # NAME                            READY   STATUS    RESTARTS   AGE     IP          NODE     NOMINATED NODE   READINESS GATES
  69 # examplehttpapp-58f66848-cf6pl   1/1     Running   0          65s     10.44.0.6   node01   <none>           <none>
  70 # examplehttpapp-58f66848-lfrq4   1/1     Running   0          65s     10.44.0.5   node01   <none>           <none>
  71 # examplehttpapp-58f66848-n7wn7   1/1     Running   0          9m26s   10.44.0.2   node01   <none>           <none>
  72 # examplehttpapp-58f66848-snwl7   1/1     Running   0          65s     10.44.0.7   node01   <none>           <none>
  73 # examplehttpapp-58f66848-vd8db   1/1     Running   0          65s     10.44.0.4   node01   <none>           <none>
  74 
  75 # everything within Kubernetes is controllable as YAML.
  76 kubectl edit deployment examplehttpapp # opens vi/vim, changing the spec.replicas to 10 after saving the file increased the number of pods
  77 
  78 kubectl get nodes -o wide
  79 # NAME     STATUS   ROLES    AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
  80 # master   Ready    master   102m   v1.14.0   172.17.0.19   <none>        Ubuntu 16.04.6 LTS   4.4.0-150-generic   docker://18.9.5
  81 # node01   Ready    <none>   102m   v1.14.0   172.17.0.24   <none>        Ubuntu 16.04.6 LTS   4.4.0-150-generic   docker://18.9.5
  82 
  83 # Image can be changed using the set image command, rollout
  84 # apply new image to the pods/containers
  85 kubectl --record=true set image deployment examplehttpapp docker-http-server=katacoda/docker-http-server:v2
  86 # deployment.extensions/examplehttpapp image updated
  87 kubectl rollout status deployment examplehttpapp
  88 # Waiting for deployment "examplehttpapp" rollout to finish: 1 out of 3 new replicas have been updated...
  89 # Waiting for deployment "examplehttpapp" rollout to finish: 1 out of 3 new replicas have been updated...
  90 # Waiting for deployment "examplehttpapp" rollout to finish: 1 out of 3 new replicas have been updated...
  91 # Waiting for deployment "examplehttpapp" rollout to finish: 2 out of 3 new replicas have been updated...
  92 # Waiting for deployment "examplehttpapp" rollout to finish: 2 out of 3 new replicas have been updated...
  93 # Waiting for deployment "examplehttpapp" rollout to finish: 2 out of 3 new replicas have been updated...
  94 # Waiting for deployment "examplehttpapp" rollout to finish: 1 old replicas are pending termination...
  95 # Waiting for deployment "examplehttpapp" rollout to finish: 1 old replicas are pending termination...
  96 deployment "examplehttpapp" successfully rolled out
  97 
  98 # rollback deployment
  99 kubectl rollout undo deployment examplehttpapp
 100 # deployment.extensions/examplehttpapp rolled back
 101 
 102 # The expose command will create a new service for a deployment. The port specifies the port of the application we want to available
 103 kubectl expose deployment examplehttpapp --port 80
 104 # service/examplehttpapp exposed
 105 kubectl get svc -o wide
 106 # NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE    SELECTOR
 107 # examplehttpapp   ClusterIP   10.103.93.196   <none>        80/TCP    13s    app=examplehttpapp
 108 # kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP   105m   <none>
 109 kubectl describe svc examplehttpapp
 110 # Name:              examplehttpapp
 111 # Namespace:         default
 112 # Labels:            app=examplehttpapp
 113 # Annotations:       <none>
 114 # Selector:          app=examplehttpapp
 115 # Type:              ClusterIP
 116 # IP:                10.103.93.196
 117 # Port:              <unset>  80/TCP
 118 # TargetPort:        80/TCP
 119 # Endpoints:         10.44.0.2:80,10.44.0.4:80,10.44.0.5:80
 120 # Session Affinity:  None
 121 # Events:            <none>
 122 
 123 # But how does Kubernetes know where to send traffic? That is managed by Labels. 
 124 # Each Object within Kubernetes can have a label attached, allowing Kubernetes to discover and use the configuration. 
 125 
 126 kubectl get services -l app=examplehttpapp -o go-template='{{(index .items 0).spec.clusterIP}}'
 127 kubectl get services
 128 # NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
 129 # examplehttpapp   ClusterIP   10.103.93.196   <none>        80/TCP    2m32s
 130 # kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP   107m
 131 
 132 kubectl get services -o wide
 133 # NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE     SELECTOR
 134 # examplehttpapp   ClusterIP   10.103.93.196   <none>        80/TCP    2m36s   app=examplehttpapp
 135 # kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP   107m    <none>
 136 
 137 # kubectl logs to to view the logs for Pods
 138 kubectl logs $(kubectl get pods -l app=examplehttpapp -o go-template='{{(index .items 0).metadata.name}}')
 139 # Web Server started. Listening on 0.0.0.0:80
 140 
 141 # view the CPU or Memory usage of a node or Pod
 142 kubectl top node
 143 # NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
 144 # master   133m         3%     1012Mi          53%
 145 # node01   49m          1%     673Mi           17%
 146 kubectl top pod
 147 # NAME                            CPU(cores)   MEMORY(bytes)
 148 # examplehttpapp-58f66848-ctnml   0m           0Mi
 149 # examplehttpapp-58f66848-gljk9   1m           0Mi
 150 # examplehttpapp-58f66848-hfqts   1m           0Mi
 151 

Shows mapping between services and pods

   1 kubectl get endpoints 

Show events ordered by last timestamp ascending

   1 kubectl get events --sort-by='.lastTimestamp'
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01