Completing the Certified Kubernetes Application Developer (CKAD) exam

I am really excited to have my Certified Kubernetes Application Developer (CKAD) exam completed. While I do not recommend anyone to have their internet connectivity dropping in an exam [sic], it worked out for me in the end and having this completed was a great experience. It’s a very thorough exam, which tackles your knowledge of the various topics

  • Core Concepts
  • Multi-Container Pods
  • Pod Design
  • Configuration
  • Oberservability
  • Services and Networking
  • State persistence

as well as your ability to work quickly with an eye to the detail.

Tips for the exam

I want to share a quick list of tips how I achieved this certification. Things might be different depending on your knowledge and ability to type quickly, but this is the list (in no particular order):

Time Management

You will be presented with 19 Questions of different weight to complete within 2 hours. This makes up for 5 Minutes per question with some Minutes to review at the end. Be sure to work through each one and don’t spend too much time on debugging if it doesn’t work. If you create a resource and there’s an error which you might easily fix, fix this issue and move on. If you cannot complete it, flag the question (they introduced a new flagging system, no notepad usage required) and come back later.

One thing that made this easier for me was to name yaml files with the question prefix such as 1-pod.yaml. This makes it easier, because you will create many resources and yaml files and don’t know which one belongs where when coming back.

Be sure to use the built in generators as often as possible with the --dry-run=client -o yaml > file.yaml option, as you won’t have the time for manually creating files. Only use the documentation if there’s no generator available or if it would exceed the work. If you do the latter, be sure to substitute the fields, to not end up with wrong values.

Aliases

Speaking of time management, I found several tips to set an alias for kubectl to k with

$ alias k=kubectl

While this improves the speed and you might be already used to it from working with K8s-clusters, the alias is not able to autocomplete (without more CLI-kung-fu, that you don’t have the time for) which is far superior IMHO.

When presented with the (slightly lagging input) cli, be sure to enable autocompletion:

$ source <(kubectl completion bash)

This will give access to autocompletion when using the kubectl command. I find it much easier to navigate with some --d <tab> for --dry-run or --f expanding to --from-<tab>-literal and it gives you a general hint of the options available if you cannot memorize these during the exam. Also be sure to list resources or describe them (kubectl describe d<tab> expands to kubectl describe deployment.apps and this will even list the deployments available.

Weight of questions

Questions are weighted differently and this does not align with the level of the question itself. You might be presented with an easy question with a percentage of > 10, so work through this and don’t spend too long on questions (be sure to flag them) if you are not sure how to solve them. This being said, you should try to work through every single one of them.

Check your answers

I started too late in the preparation to actually check my answers as I prepared with a course on Udemy where all my questions are checked, so I didn’t do it myself. Be sure to check your answers, if it is required to set e.g. an evironment variable run

$ kubectl exec -it <pod> -- env

to list those. Use the above command with a /bin/sh command to check contents of files etc.

Use the built in describe command to list the details of a resource, and check thoroughly. Sometimes you might miss out as you overlooked to name the container differently than the pod/deployment.

Practice

Work through your course or any material you got. I prepared with a popular course on Udemy and while this helped me to understand the relevant topics, only practice with the cli helped me. It might differ for you, but I faced the issue mentioned earlier of relying on some system to check my answers and by working manually through the examples given at the CKAD exercises, it greatly improved my ability of self checking and being confident of my given answers. Also, the exercises contain several hints and tricks of how to achive the same in different ways which might be more comfortable for you.

Documentation

Get used to use the Documentation as this will be the only other tab open in the exam. There’s no time to read the documentation itself, so get to know the bits and pieces and where to find them. There are many examples of resources which you cannot create with the cli, so use this to create the required resources.

There are pages that helped me a lot, as they tend to give all information in one place, such as the Persistent Volumes docs. This page allows for creation of a Persistent Volume, followed by the matching Claim and then even how to mount this in a Pod. Be sure to know these pages well.

Another example is to find the matching piece on another site, if you’re required to set activeDeadlineSeconds, you won’t find that on the CronJob page, but on the Job documentation.

Also, if not sure where one field might belong to, the explain command will help

$ kubectl explain pod.spec (optionally with a --recursive option)

Context switches

You will be facing different contexts, so be sure to run the appropriate command before doing any actual work on the relevant task.

Relax

This is huge, but often overlooked. Relax yourself, if it goes wrong you got a second attempt where you will know what awaits you. Also, try to book this exam for earlier in the day and start off with a fresh mind, rather than doing this after a full days work in the afternoon.

Good luck

You can do it, and while a lot of preparation for this or the CKA exam is required, it’s a rewarding exercise where you can proof your knowledge in a way I personally haven’t experienced as this is different from other tech-exams taken. I wish you all the best for your take on this.