Tips about Certified Kubernetes Application Developers (CKAD) exam

Aurélie Vache - Aug 25 '20 - - Dev Community

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?

Alt Text

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 and kubens 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 or kgpo 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:
  1. First, create your deployment and export it in a YAML manifest file with --dry-run -o yaml command.
  2. Then, do the same things for the Pod creation and export it in another file or in the stdout.
  3. 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 * * * *"
...
Enter fullscreen mode Exit fullscreen mode

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 ^^):

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 ;-).

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .