After several years of work with Kubernetes, few days ago I passed successfully the Certified Kubernetes Application Developer (CKAD) certification exam.
Several people asked me to write an article about that, so here a quick article about what is the CKAD and some tips & tricks about the CKAD exam.
CKAD
First of all, what is CKAD?
CKAD it's the abreviation of Certified Kubernetes Application Developer, a certification about Kubernetes, for developers, by the Linux Foundation.
The aim of this certification exam is to "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."
Like others certifications, if you want to pass it, you need to pay 300$ (or less if you have discount code ;-) ).
Note that the certification have a validity duration of 3 years (36 months).
Exam content
Of course, the content of the Kubernetes certification follow the last Kubernetes version, so at the time I write this article, the current version is the 1.18.
According to the CNCF open-sourced curriculum of the exam, for Kubernetes 1.18 version, the content of the exam is described as bellow:
- 13% - Core concepts
- 18% - Configuration
- 10% - Multi-Container Pods
- 18% - Observability
- 20% - Pod Design
- 13% - Services & Networking
- 8% - State Persistence
Concretely, you need to answer 19 questions in 2 hours maximum.
Every question is independant of each others and every question have a width / a size, so you can focus on questions with the bigger size first.
During the exam you can flag a question when you want. Thanks to this useful feature you can skip the current question and go back to it lately.
Useful informations
/!\ Warning: If your Chrome browser freeze & you need to close it and open it again, don't panic, all your work will be saved BUT your flagged questions can be disapears (this happened to me...).
Before the exam you can log you 15 minutes before the scheduled date&time.
An examinator need to see yourself and your desktop all the time so follow everything he ask in the Chat and don't forget to prepare your Passport/ID card.
You need to be in a closed room, alone (cats are allowed :-D).
If, unfortunately, you failed, you have a free retake.
You are allowed to only have in your Chrome browser two tabs:
- one for the exam
- another one for the official Kubernetes docs
So you can close others apps and others tabs before the exam.
You are not allowed to speak out loud (even in order to think), hide your mouth & wear a smartwatch ^^.
You can request for a break during the exam, but the timer will not stop...
In the environment you have the possibility to display a notepad, it can be useful to take some notes.
Practice, practice, practice!
The most important advice in order to succesfully pass this exam is to practice a lot the kubectl CLI!
This exam is not a theorical exam, you need to answer questions concretely with kubectl commands in Kubernetes clusters and namespaces.
You need to be "fluent" and fast with the command line and YAML manifests.
And you need to know the Kubernetes official documentation (the only other Chrome tab allowing to open).
My personal advices:
Be prepared!
Even if you use Kubernetes in your job, take several days to train yourself.Read the entire question statement carefully, before going straight to writing your kubectl commands.
Don't forget to copy paste the command in order to go to the good cluster/context. You can copy paste the command wrote in the question.
Practice, at least a day before the exam, to not using
kubectx
andkubens
commands but you need to know the commands allowing you to switch namespaces by heart.
Switch to a cluster/context:
$ kubectl config use-context my-cluster
Display the actual/current cluster:
$ kubectl config current-context
Switch to a namespace:
$ kubectl config set-context --current --namespace=my-ns
Personally, during the exam, I prefered to add -n my-ns
for each command so I was sure what I was doing, and where I was executing my commands.
You certainly have aliases on your personal computer/VM/environment. You will not have them in real conditions. So practice typing the entire kubectl commands, without your
k get po
orkgpo
aliases.Know and use the short resources names:
$ kubectl get/create po (instead of pod or pods)
$ kubectl get/create cj (instead of cronjob)
$ kubectl get/create deploy (instead of deployment)
$ kubectl get/create rs (instead of replicaset)
$ kubectl get/create svc (instead of service)
$ kubectl get/create cm (instead of configmap)
$ kubectl get/create hpa (instead of horizontalpodautoscaler)
$ kubectl get/create sa (instead of serviceaccount)
$ kubectl get/create pv (instead of persistentvolume)
$ kubectl get/create pvc (instead of persistentvolumeclaim)
...
- If you need to add or remove a label, don't edit a Pod or a deployment, instead use the
kubectl label
command.
Examples:
Add a label my-label with the value my-value in my-pod Pod:
$ kubectl label pod my-pod my-label=my-value
In my-pod Pod delete a-label label:
$ kubectl label pod my-pod a-label-
But ... how I know the labels of a pod?
$ kubectl get po --show-labels
- With kube 1.18 you can't create a deployment with 3 replicas with a Pod with memory limits and requests in only one command line, so the tips is to:
- First, create your deployment and export it in a YAML manifest file with
--dry-run -o yaml
command. - Then, do the same things for the Pod creation and export it in another file or in the stdout.
- Finally, copy paste containers specs in the deployment manifest file ;-).
Note: --dry-run
is deprecated in Kubernetes 1.18 BUT you can still use it, you'll just receive a "deprecated information message". In 1.18 it's recommended to use instead --dry-run=client
option.
- Use
kubectl explain
command which display specs informations:
$ kubectl explain job.spec
$ kubectl explain pod.spec.containers.readinessProbe
- If you know the begining of a command but have a doubt of the rest, use the
-h
option.
Example:
I know how to create a cronjob with bash image but I have a doubt how to define the schedule:
$ kubectl create cj bash --image=bash -h
Create a cronjob with the specified name.
Aliases:
cronjob, cj
Examples:
# Create a cronjob
kubectl create cronjob my-job --image=busybox
# Create a cronjob with command
kubectl create cronjob my-job --image=busybox -- date
# Create a cronjob with schedule
kubectl create cronjob test-job --image=busybox --schedule="*/1 * * * *"
...
Oh cool, thanks to the help/manual I know it's --schedule="xxx"
format ... ;-)
Know the official Kubernetes documentation and train yourelf to search.
In the exam environement you can't use your lovely IDE so practice VI (vi cheat sheet) if you don't know it.
You need to practice the commands in a cluster with the same version of the exam (1.18 for example).
Resources
In order to practice before the exam, severals resources exists and I listed them in this article (I focus on free resources first ^^):
Kubernetes CKAD Example Exam Questions Practical Challenge Series:
https://codeburst.io/kubernetes-ckad-weekly-challenges-overview-and-tips-7282b36a2681CKAD-Practice-Questions:
https://github.com/bbachi/CKAD-Practice-Questions/blob/master/core-concepts.mdBe fast with Kubectl 1.18 CKAD/CKA:
https://medium.com/faun/be-fast-with-kubectl-1-18-ckad-cka-31be00acc443Killer.sh:
If you want to pay (30$), you have killer.sh. It's a CKA & CKAD simulator with an environment, similar to the exam, with 20 questions/scenarios to solve in 2 hours.
Personally I didn't use "killer.sh". I didn't want to pay for a mocked exam, but I know people who used it and love the possibility to pass a test exam before the real one.
Conclusion
Like others exams, be prepared. Even if you think you know Kubernetes and use it in your daily work. It's not a theorical exam so you need to be fast.
Kubernetes is evolving, so be aware of new features when a new version is released and update your clusters.
If you have your own personal tricks to success this exam, don't hesitate to share them in comments ;-).