Tips for CKAD Exam

In the last post I talked about How to prepare for CKAD exam. In this post we will talk about tips and tricks for passing the CKAD exam.

Setup your Kubernetes environment

Before starting the exam, spend few mins to setup the environment whi…

In the last post I talked about How to prepare for CKAD exam. In this post we will talk about tips and tricks for passing the CKAD exam.



Setup your Kubernetes environment

Before starting the exam, spend few mins to setup the environment which will help you save time later.



Setup autocompletion

Ref – https://kubernetes.io/docs/reference/kubectl/cheatsheet/

Run following statements on the shell to setup autocompletion for kubectl commands,

source <(kubectl completion bash) 

# Only if you want to add this to your bashrc profile
echo "source <(kubectl completion bash)" >> ~/.bashrc

alias k=kubectl
complete -F __start_kubectl k

Now you can execute commands on shell using alias k instead of kubectl e.g.

k get pods

Also you can now press tab after writing first 2-3 letters of your sub commands to complete the command. This will save you sometime in the exam, remember the time is limited and saving time typing each command will add up to a significant saving in time.



Setup alias for frequently used commands

Setup alias or environment variables for frequently used commands, I personally used following alias’s and environment variables.

alias kg='k get po -o wide --show-labels'

Environment variables

dr='--dry-run=client -o yaml'
fd='--force --grace-period=0'

The first command can be used with k run command to generate yaml definition like,

k run nginx --image=nginx $dr > nginx.yaml

The second command can be used with k delete po to delete pod’s quickly. As part of the exams, there will be lot of questions which will require to create/delete pods. To delete pod quickly you can use the second environment variable like,

k delete po nginx $fd 



Use imperative commands

It’s difficult to create the YAML definition files required for deploying resources like PODs, Deployments, ReplicaSets etc. by creating YAML definition files manually. Copying the files manually from the Kubernetes documentation is one way, but its time consuming and exam time is limited.

There is a better way for creating these complex YAML definition files using kubectl imperative commands. I am listing down few commands for creating resources like POD, Deployments, Service etc.



Create POD

Ref – https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#run
Use the below command to generate the Pod definition file,

k run <pod-name> --image=<image-name> --dry-run=client -o yaml > <file-name>.yaml

#or if you setup the environment variable simply run

k run <pod-name> --image=<image-name> $dr > <file-name>.yaml

Following command demonstrates how you can use different option to quickly create a Pod or YAML definition file without creating the YAML file at all,

k run nginx --image=nginx --labels tier=webserver --env="key=value" --port=8080 --requests="cpu=200m,memory=256Mi" --limits="cpu=250m,memory=512Mi" --command -- echo "test" 

# If you want to save the definition to a file then use
k run nginx --image=nginx --dry-run=client -o yaml --labels tier=webserver --env="key=value" --port=8080 --requests="cpu=200m,memory=256Mi" --limits="cpu=250m,memory=512Mi" --command -- echo "test" > nginx.yaml

k apply -f nginx.yaml

Make sure to use ‘–dry-run=client -o yaml’ before command, also you can use the environment variable $dr with this command. Also if you want to expose the pod as a service you can suffix –expose to expose the Pod as a service.



Create Deployment

To create deployment definition or deployment run command below,

k create deploy <deployment-name> --image=<image> --replicas=4  $dr > <filename>.yaml

# Nginx deployment sample
k create deploy nginx --image=nginx --replicas=4 $dr > nginx.yaml

k apply -f nginx.yaml



Exposing Service

To expose the deployment as a service run below command,

k expose deployment nginx --image=nginx --replicas=4 --port=8080 --target-port=8080 --name=nginx-service --type=ClusterIP $dr > service.yaml

# for pod
k expose pod nginx --image=nginx --replicas=4 --port=8080 --target-port=8080 --name=nginx-service --type=ClusterIP $dr > service.yaml

To create a NodePort service however you will have to run the above command and add nodePort in the YAML file.



Small but significant things



Testing your deployments

Always make sure to test the deployments, to be sure to not miss on any requirements. To test the deployments you can run temporary pods by running below command,

k run temp --image=nginx:alpine --restart=Never --rm -i -- curl -m 5 nginx-service:8080

If the service is in a different namespace you can specify namespace like,

k run temp --image=nginx:alpine --restart=Never --rm -i -- curl -m 5 nginx-service:8080 -n 
<namespace>

Or specify the name as . like,

k run temp --image=nginx:alpine --restart=Never --rm -i -- curl -m 5 nginx-service.<namespace>:8080



Get CPU/Memory usage for node/pod

To get the CPU/Memory usage by node/pod run,

k top node

#for pods run
k top pod



Using Init Containers

Init containers run un before the app containers are started. You can learn more about Init Containers here



Multi-Container Pod or Sidecar

Multi-container POD is simply a mode with more than one containers. Following YAML shows example of a multi-container POD also called as Sidecar,
Ref – https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:

  restartPolicy: Never

  volumes:
  - name: shared-data
    emptyDir: {}

  containers:

  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]



Reading logs from Pod

To read logs from POD run,

k logs <pod_name>

To see running logs run,

k logs -f <pod_name>

To read logs from multi-container Pod,

k logs -f <pod_name> -c <container_name>



Making changes to the existing deployments

You can make changes to the existing deployments by simply editing them like,

k edit pod <pod_name>

This will open the Pod definition (YAML) in Vim editor. Some changes can be done without recreating the pod but changes like changing the image name for example, requires you to delete and recreate the Pod. The trick to make such changes are to edit the Pod and try to save the changes, this will prompt you to create a new temporary file, just hit ‘:wq’ to save the changes to the file. You can then delete the old pod and use this temporary file to apply the changes. The trick here is to save as much time as possible to cover all the questions.

So thats it for this post, I will keep updating this post with more information. Till then, happy practicing!


Print Share Comment Cite Upload Translate
APA
Aditya Kanekar | Sciencx (2024-03-28T10:18:58+00:00) » Tips for CKAD Exam. Retrieved from https://www.scien.cx/2021/08/15/tips-for-ckad-exam/.
MLA
" » Tips for CKAD Exam." Aditya Kanekar | Sciencx - Sunday August 15, 2021, https://www.scien.cx/2021/08/15/tips-for-ckad-exam/
HARVARD
Aditya Kanekar | Sciencx Sunday August 15, 2021 » Tips for CKAD Exam., viewed 2024-03-28T10:18:58+00:00,<https://www.scien.cx/2021/08/15/tips-for-ckad-exam/>
VANCOUVER
Aditya Kanekar | Sciencx - » Tips for CKAD Exam. [Internet]. [Accessed 2024-03-28T10:18:58+00:00]. Available from: https://www.scien.cx/2021/08/15/tips-for-ckad-exam/
CHICAGO
" » Tips for CKAD Exam." Aditya Kanekar | Sciencx - Accessed 2024-03-28T10:18:58+00:00. https://www.scien.cx/2021/08/15/tips-for-ckad-exam/
IEEE
" » Tips for CKAD Exam." Aditya Kanekar | Sciencx [Online]. Available: https://www.scien.cx/2021/08/15/tips-for-ckad-exam/. [Accessed: 2024-03-28T10:18:58+00:00]
rf:citation
» Tips for CKAD Exam | Aditya Kanekar | Sciencx | https://www.scien.cx/2021/08/15/tips-for-ckad-exam/ | 2024-03-28T10:18:58+00:00
https://github.com/addpipe/simple-recorderjs-demo