How to be successful in Certified Kubernetes Application Developer (CKAD) exam 
Tags: kubernetes, ckad
Published: 2020-03-02 11:15:12

Do you wish to challenge yourself to learn Kubernetes in a structured way? Or do you want to be known as a Kubernetes developer? Or you just want to add a Kubernetes certificate to your achievements? If your answer to any of these question is yes, please keep reading :) 

#What is CKAD?
CKAD Developed by the Cloud Native Computing Foundation (CNCF), in collaboration with The Linux Foundation. The Cloud Native Computing Foundation (CNCF) is a Linux Foundation project that was founded in 2015 to help advance container technology and align the tech industry around its evolution. It was announced alongside Kubernetes 1.0 <a href="https://en.wikipedia.org/wiki/Cloud_Native_Computing_Foundation" target="_blank">[1]</a>. 

This is the official CKAD exam explanation on Cloud Native Computing Foundation website [[2]](https://www.cncf.io/certification/ckad/):

“The Certified Kubernetes Application Developer exam certifies that users can design, build, configure, and expose cloud-native applications for Kubernetes. A Certified Kubernetes Application Developer can define application resources and use core primitives to build, monitor, and troubleshoot scalable applications and tools in Kubernetes”.

According to CNCF website, CKAD's curriculum is:

<ul>
<li>13% – Core Concepts</li>
<li>18% – Configuration</li>
<li>10% – Multi-Container Pods</li>
<li>18% – Observability</li>
<li>20% – Pod Design</li>
<li>13% – Services & Networking</li>
<li>8% – State Persistence</li>
</ul>

The exam costs 300 USD at the moment which is not cheap but you may consider it as a very good investment for your future career progression. Apart from this, many companies are happy to reimburse the cost for their employees. 

#Booking the exam
After you've made your decision to book this exam and you paid for it, you need to schedule a day and time. A couple of hints when booking the exam:
<ul>
<li> <b>Book it for the most productive time of your day.</b> The exam takes 2 hours and you need to be very focused and efficient when taking it. Don't book the exam for a time that you won't be your best </li>
<li> <b>Don’t book your exam on a day that you have a busy schedule.</b> Ideally, you don't want to book the exam for a day that you are supposed to do many different tasks and will be tired before the exam. </li>
<li> <b>Allow extra time for technical challenges</b> I learnt this in a hard way! The first time that I took the exam I had to go out for another matter around 45 minutes after the exam. I thought I had enough time buffer reserved after the exam. However, when the proctor released the exam for me, it didn't work properly on my browser and we tried many things to fix it. Eventually, the exam loaded for me after an hour and 20 minutes on a different browser. So I was not able to attend the whole 2 hours and I failed the exam. You need to make sure your computer meets the exam requirements. After doing that, the exam website may work for you. I checked the system requirements beforehand but still faced different issues on the day. You also don't want to use a corporate laptop on a network that may be restricted.</li>
</ul>

#Exam Format 
The exam includes 19 questions with different weight out of 100%. You see the question weight on top of each question. The questions are not multiple choice and you actually need to Work on a Linux terminal to meet the questions objectives.

Each question has multiple objective and you need to meet the objectives as much as you can. I am not certain if you get points for questions which you have done partially, but I think this is the case. Otherwise, my grade would have been lower than what I actually received :D .

#Exam day
Because the exam is online, a proctor is going to monitor you all the time. You will be asked to have only two tabs open in Google Chrome, one for the exam and another one for Kubernetes docs. You are not allowed to open any other website or application. You also need to share all of your screens with the proctor.

You need to sit in a quiet room, all doors should be closed, and no one should enter the room. You need to show a 360 degrees view of the room to the proctor.
You can’t eat during the exam, you are only allowed to drink from a clear water bottle.

You should have a clean desk with no extra electronic devices or papers on. I was asked to remove the papers from the printer. I was also asked to take out my smartwatch.

Make sure you stand up and stretch your body before the exam because you need to sit down for 2 hours. During the exam, you can ask for breaks but the timer won't stop.

#Resources:
##Study the exam handbook first
You'll get whatever you need to know about the exam by studying the handbook.
##Read others’ story about how to prepare yourself
There are some blogs about how to be successful in CKAD exam (apart from this!). I found them very useful to get some tips for the exam. Here some of them:

[Tips for Successful Certified Kubernetes Application Developer (CKAD) Exam Preparation](https://medium.com/@ameenalam202/tips-for-successful-certified-kubernetes-application-developer-ckad-exam-preparation-efaed88500fe)
[How to beat Kubernetes CKAD certification](https://medium.com/@nassim.kebbani/how-to-beat-kubernetes-ckad-certification-c84bff8d61b1)
[Tips for The Certified Kubernetes Exams: CKA and CKAD in 2020](https://dev.to/scriptautomate/tips-for-the-certified-kubernetes-exams-cka-and-ckad-49mn)

##Read Kubernetes docs
Obviously the best place to read about Kubernetes is its own official website. However, it could be a little bit overwhelming if you don't have that much experience working with Kubernetes. Maybe going through a course would be a better start.

##Online courses
There are so many courses online about Kubernetes. I personally found Linux Academy very useful. The main reason is their labs. In each section of the course, there are labs that everything has been set up for you to be able to practice. I found their questions very similar to the actual exam (even a little bit harder). 

##Books
There are books available for Kubernetes if you want to learn it in deep. I am sure you can find a few by a simple search over the web. 

## Practice
In order to be successful in CKAD exam, you need to practice. You can find sample questions that you can use:

[CKAD Exercises](https://github.com/dgkanatsios/CKAD-exercises)
[Kubernetes CKAD Example Questions Practical Challenge Series](https://codeburst.io/kubernetes-ckad-weekly-challenges-overview-and-tips-7282b36a2681)
[Practice Exam for Certified Kubernetes Application Developer (CKAD) Certification](https://matthewpalmer.net/kubernetes-app-developer/articles/ckad-practice-exam.html)

#Exam tips:
<ul>
<li>Time is critical, you need to be fast, efficient and get yourself familiar with the shortcuts.</li>
<li>Don’t spend a huge amount of time for a question that has only 2% points.</li>
<li>If you think you are stuck on a question and you feel you spent more time than you should, skip it.</li>
<li>Use note to take note of questions which you skipped 
<li>Try to meet questions objectives. Even if you haven't answered the entire question.</li>
<li>The first hour is critical. I went through 70% of the questions in the first hour. Your efficiency may drop in the second hour.</li>
<li>You have one free retake, so it is okay if you fail in the first run, just try to reflect on your mistakes and practice on some areas that you can avoid.</li>
<li>Typing speed can be helpful, but if you are like me and not so fast in typing, you can rely on kubectl auto complete. Using autocomplete also helps you to validate your commands. </li>
<li>Make sure you practice against the version of Kubernetes that you are going to use on the exam day.</li>
<li>Make sure you are on the right cluster and namespace.</li>
<li>Don't bother testing everything if you are confident about your solution and the object was created successfully and is running (unless you have extra time).</li>
</ul>

#Use Kubernetes docs
You are allowed to open Kubernetes documents during the exam. This can be very useful, but you need to make sure you are using the docs efficiently. 
Try to make yourself familiar with different pages and how the search functionality works. For example, if you want to search how to use a configMap withing a pod, you may want to search for 'configMap' keyword, but you are probably going to look for a page in the search results which talks about volumes.

[Kubectl Cheat Sheet page](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) is your friend. There are many useful tips about using kubectl. Try to go through that page and read it through. I would suggest to open this page at the very start of your exam and copy and paste the commands to activate auto complete in kubectl (if you don't remember the commands). 

Try to use your browser history to navigate between the pages which you have already visited. Some people suggest bookmarking the important pages before the exam, but I was not sure if that'll be cheating or not. I didn't do it myself.

Having all said about Kubernetes docs, I should say you try to avoid opening any documentation and probably want to spend your time on the actual exam. Therefore you may want to restrict yourself to kubectl commands and helps.

#More important tips:
<ul>
<li>
Make yourself familiar with basic Linux terminal commands, things like how to log in as root, view, edit, and copy files. Don't forget to push the right key combinations to copy-paste in Linux :)
</li>
<li>
Make yourself familiar with basic commands in vim, how to open, edit, save, highlight, undo, etc. 
</li>
<li>
You can keep some useful command to create some key objects in the notepad. For example, the command to create a pod.
</li>
<li>
In order to save typing time you can use <b>'alias k=kubectl'</b> and use 'k' instead of 'kubectl' afterwards. If you want autocomplete works with 'k' you need to run this: <b>'complete -F __start_kubectl k'</b>
</li>
<li>
You can use <b>'kubectl create'</b> to create many Kubernetes primitives like configMap, secret, service, etc. You can tick some questions off easily by using <b>'kubectl create'</b>. For example, if you are asked to create a secret with key1=value1 you can easily do it by running this command:
<b>'kubectl create secret generic my-secret --from-literal=key1=value1'
</b>
You don't need to spend a lot of time to write the object description using YAML format. Even if there is something that you cannot do with the command line, you can still generate a basic YAML file and edit and run it. In order to do that, you can add <b>'--dry-run o yaml > myfile.yaml'</b> to the above command. This won't create the object and will write the object description in a YAML file. Then you can edit the file and run it using <b>'kubectl apply -f myfile.yaml'</b>.
</li>
<li>
<b>'kubectl run'</b> is another useful command. You can use it to create pods, deployments, jobs, cronjobs, etc. The good thing about this command is you can easily set container image, arguments, commands, environment variables and etc. If you run <b>'kubectl run'</b> you get some samples about how to use it. For example, in order to create a pod, you need to set --restart=Never flag, otherwise it'll create a deployment for you. Note that there would be some changes in this command in the near future and these options may not be available then. Again similar to <b>'kubectl create'</b> you can add <b>'--dry-run'</b> and <b>'-o yaml > pod.yaml'</b> to output the object definition in a YAML file, edit it and run it using <b>'kubectl apply -f pod.yaml'</b>
</li>
<li>
If you need to edit a YAML definition of an object but not sure about the syntax, you can use <b>'kubectl explain'</b>. For example, suppose you don't remember the structure for readinessProbe in pod but you remember it is under spec.container. In that case you can use <b>'kubectl explain pod.spec.containers'</b> to get more information about options which are available under 'containers'. You can also use '--recursive' to get a better view. Try <b>'kubectl explain pod.spec.containers.readinessProbe --recursive'</b> yourself to see what is available for readinessProbe.
</li>
<li>One last thing is about taking backup before wiping out an object. Because everything is prepared for you to work on, if you delete an object and need it, later on, you can't restore it. Make sure you save the specifications of the object before deleting it.</li>
</ul>

I hope this article can help you with your CKAD exam. If you have any question/feedback, please feel free to put a comment here or contact me directly.