Pass CKAD (Certified Kubernetes Application Developer) with a Score of 97!
By: Joshua Yeung
Tags: Ckad, Software Development, Kubernetes, Cloud Native

Pass CKAD (Certified Kubernetes Application Developer) with a Score of 97!

Study Guide and Tips

Photo by Razvan Chisu on Unsplash

Earlier this month I’ve passed the CKAD (Certified Kubernetes Application Developer)Exam. It is an exam that certifies the attendees’ ability to design, build, configure, and expose cloud-native applications for Kubernetes. What you need to do is to score a passing grade (66%) on a 2-hour online, proctored performance-based exam. The exam consists of a set of performance-based items (problems) to be solved in a command line, running Kubernetes. You take the test online with a proctor watching you (You cannot see the proctor’s face, you just communicate with the proctor using the chat box provided). So make sure your webcam is working before the exam by running the exam environment testing tool (I will tell you my miserable experience later).

Photo by Author on Linux Foundation Portal

Curriculum Overview

Let’s jump into the curriculum and talk about how to prepare for the exam. The curriculum is posted on GitHub and you should check it before the exam.

13% — Core Concepts

You need to know how to deploy your app using kubectl. Follow the below link and start the interactive tutorial. The question will ask you to deploy an app using the image mentioned and expose the service with port XXX. If you are familiar with the basic concept of deployment, pod, and node, you will have no problem with this section.

18% — Configuration

This section tests how to create ConfigMaps or Secrets and configure Pods using data stored in ConfigMaps or Secrets. Make sure you understand the material of the related documentation and follow the steps stated at least once. You will do similar things in the exam.

10% — Multi-Container Pods

In my opinion, this is the easiest question. All you need to do is to follow the instruction (the question will tell you which image to use, and all sort of condition needed), copy and modify the yaml file in the documentation. In this question, you create a Pod that runs two Containers. The two containers share a Volume that they can use to communicate. Check out this link or bookmark it.

18% — Observability

Definitely, there will be a question testing you how to configure LivenessProbes and ReadinessProbes. Learn the difference between initialDelaySeconds and periodSeconds before the exam and familiar yourself with the syntax of the probe of httpGet and exec command. All material you can refer to this link.

20% — Pod Design

For the deployment rollout and rollback, you will be asked to create a deployment and update the deployment. If you are asked to change the image tag of the deployment, you can just use the imperative command to perform rolling updates.

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1

After that, you will be asked to rollback. Again you can use the imperative command to perform a rollback.

kubectl rollout undo deployment.v1.apps/nginx-deployment

Also, you can scale a Deployment by using the following command:

kubectl scale deployment.v1.apps/nginx-deployment --replicas=10

The best way to study is to read the official documentation directly. It covers many typical use cases for Deployments. Although not all the use cases will be tested, it is good for you to know various use cases as you may be facing a similar situation in your job.

One question will be related to running an example job/cronjob, writing a job/cronjob spec. The important concepts of a job or a cronjob are: backoffLimit, activeDeadlineSeconds, completions, parallelism.

Don’t try to write your own job specification from scratch. Always copy the example specification from the documentation and modify it.

13% — Services & Networking

All you need to know in this section is Services and Network Policies. Learn the difference between ClusterIP, NodePort, and LoadBalancer. Remember to state the pod selector in the definition file. For Network Policies, read carefully which pod does the network policy apply to and modify the podSelector in the specification. You also need to make sure whether the ingress or egress policy is going to enforce. All the information is stated in the question and what you need to do is to figure it out carefully and not to make mistake on it.

8% — State Persistence

In order to pass the exam, you must learn how to configure a pod to use a PersistentVolume for storage. There is certainly one question associated with PV and PVC concept. I advise you to repeat the below exercise until you are familiar with the configuration flow vastly. Basically, you first create a PersistentVolume and then create a PersistentVolumeClaim that binds to the PV you just created. Finally, you create a Pod to mount your volume with your PVC.

Course Recommended

I bought this course and the exam in a bundle on Linux Foundation with USD200 in a discount period. If you are new to Kubernetes, this course is informative and useful for you to grasp the concept of Kubernetes. The material is more than enough to pass the exam but those are valuable if you need to use Kubernetes in your job.

If you already have some experience or familiar with Kubernetes and just want to pass the exam, there is a cheaper choice to learn concepts and practice. The course provided by Mumshad Mannambeth has many hands-on labs right in your browser. You don’t even need to provision your own cluster, just use your browser to access the environment and do the practice. The question is similar to the actual exam so you can have a taste of what you will be encountered in the real exam.

You can also buy his course on Kode Kloud. There are many other DevOps related courses.

Practice

Practice all the exercises in this GitHub repo using the Kubernetes Playground provided by Katacoda if you don’t have your own cluster.

Tips

1. Use imperative commands to save time and use — dry-run=client to generate YAML files for you to edit easily. You will find the below command very useful.

kubectl create deployment nginx --image=nginx --dry-run=client -o yaml

2. Make sure you are working on the correct context. You will be given the context information at the top of each question.

kubectl config use-context my-cluster-name

3. Make sure you are working on the correct namespace.

4. Make sure your webcam is working!

The Miserable Experience

The proctor needs to be able to watch your face and your screen all the time during the exam, if they cannot see you, they will not proceed with the exam. I have actually scheduled the exam twice. The first time, although I passed all the environment test before the exam and my webcam worked properly, the proctor said he cannot see my webcam video after several minutes during the pre-checking period of the exam (The exam was not started yet, just perform the procedure of identity and environment checking). Every time when I reconnect, the proctor said he can see me now but after a period of time, he cannot see me again. This happened and wasted us for more than 4 hours (even longer than the exam itself!). I also phoned the technical support of the exam platform and the support staff didn’t find any problem at all. She can see me very well but only the proctor cannot see me! Finally, we can just cancel this exam and schedule the exam again.

I wrote an email to the Linux Foundation talking about this thing and they offer me a pre-flight exam (go through all the pre-exam procedures but no actual exam is taken). It’s very weird that I use the same notebook within the same network, this time the proctor can see me very well without disconnect. So until today, I don’t even know what was happening in my first scheduled exam. Luckily I was able to finally attend the exam without any problem

Final Tip

Practice, practice, and practice! Good luck with your exam!