CKAD Exam Guide

I recently completed the Certified Kubernetes Application Developer exam and received certification. Here is my personal guide to the exam—it’s an overview of what I studied, what surprised me, and what needs the most practice.

Please note that I can’t give out specific details because you have to sign confidentiality agreements with the CNCF before taking the exam. I’ll do my best to share my experience in a suitable way.

Also, feel free to email me at [email protected] with any questions you have. And especially email me if you take the exam and this guide does or does not help! I want to collect some data on whether this guide is useful, and how I can improve it.

Last updated 13 December, 2019. Contact me to report inaccuracies.


This is an excerpt from my book, Golden Guide to Kubernetes Application Development. It’s a complete Kubernetes guide that’s purpose-built for developers taking the CKAD exam.

The upgraded package features a 30 question practice test in the style of the real exam (with complete solutions!)

Background

The CKAD exam is a two hour practical exam that tests your knowledge, skill, and ability as a developer using Kubernetes. The exam is oriented towards testing this ability. Questions focus on using, debugging, monitoring, and accessing Kubernetes.

Exam style

The test involves interacting with a live Kubernetes cluster via the command line. This occurs in a web-based command-line environment where you need to execute kubectl commands, operate a Unix shell, and edit YAML files.

As you’d expect, the exam follows the syllabus and curriculum closely. There are roughly twenty topics in the curriculum, and roughly that many questions in the exam. The exam covers almost every topic in the syllabus—make sure you’re familiar with everything when preparing.

The questions are all practical—you will need to create Kubernetes objects, consume existing objects, debug existing (but failing) objects, and query the cluster.

Assumed skills

First of all, you will need to be comfortable navigating a Unix command line environment. The entire test takes place in a web application that simulates a Unix command line. You will need to be able to navigate a Unix shell, know a command-line text editor, and use Unix programs to complete questions.

One large annoyance for me was that I don’t usually edit my YAML files in Vim. This was a problem when I wanted to bulk-indent fifteen lines but couldn’t remember how to do it. I had to type space-space fifteen times—a huge time-sink for very little value. Make sure you’re fast at navigating Unix and editing YAML in a terminal text editor.

You will need to be able to create Kubernetes objects through both YAML and via kubectl commands!

Content

There were no content-related surprises to my exam—what’s in the curriculum is what gets tested. If something seems like something that an administrator would set up on a cluster (for example, a resource quota), it’s more likely that you’ll need to consume or use that resource, rather than needing to know how to create it yourself. Remember that this is an exam for application developers.

I think there are three priority tiers of content to learn for the exam. The first tier requires deep understanding and experience, and will be tested multiple times. The second tier you need to understand and use, but it is likely to appear fewer times. The third tier are simpler concepts that you are likely to simply use or consume, and they only appear once in the exam.

Prioritise your learning according to these tiers.

  1. Debugging Kubernetes, Pods, Deployments, Jobs, Services, editing YAML, Volumes and PVCs, namespaces, labels
  2. Liveness and readiness, logging, monitoring, multi-container pods, rolling updates and rollbacks
  3. Service Accounts, resource quotas, security contexts

Sample questions

I can’t give out any specific questions, but to give you a sense of what the questions are like, here are a couple of sample questions. I have more sample questions (with complete solutions!) in the upgraded package of my Golden Guide to Kubernetes Application Development book.

Note that these sample questions are easier than what’s in the exam, but they give you a hint of the style of the questions.

Sample question 1

Create a deployment of version 1.7.1 of the nginx image. This deployment should have five pods running the nginx image. Create the deployment in the question-four namespace. Save the YAML configuration to create this deployment in a file called deploy.yaml.

Sample question 2

A pod called question-five-pod is failing to run in our Kubernetes cluster in the question-five namespace. Query the Kubernetes cluster to determine why the pod isn’t starting, and save any relevant events to a file called query-results.txt. Then, fix the pod’s configuration so that it starts correctly.

Other advice

Know how to quickly navigate the web and CLI documentation available to you

You have full access to kubernetes.io and kubectl in the exam environment. Make the most of it!

Make sure you can navigate, search, and find examples on kubernetes.io. Most questions require knowledge or configuration that’s contained on kubernetes.io—knowing the layout and location of documentation might need is a huge advantage.

While navigating the docs is important, the faster (and my preferred) way is to use kubectl’s inbuilt documentation to quickly find information you need.

For figuring out which YAML field to use, kubectl explain <object>.<subobject> and kubectl explain <object>.<subobject> --recursive are my most-used commands. They’ll print out types and attributes you need to set on a resource.

Know how to do both YAML and kubectl commands

The exam will require you to interchangeably use YAML or direct kubectl commands—make sure you are comfortable with both. I have two tips to help with this.

kubectl get $resource --export=true -o yaml will get you the configuration for an existing object in YAML format. This is great for debugging why something might not be working. It’s also really useful if it’s faster (or you are more comfortable) creating a resource via a kubectl command.

For example, I used something like kubectl run mydeployment --image=nginx --port=8080 --replicas=5 to create a deployment quickly, and then did kubectl get deployment mydeployment --export=true -o yaml to get the YAML for that deployment. This helps me avoid remembering all the details of writing a deployment YAML.

Most things need to happen in a specific namespace

Each question will probably specify which namespace the resource lives in or is to be created in. Namespaces were something I wasn’t particularly familiar with when I took the exam, so I kind of had to wing it. Make sure you’re comfortable using and understanding namespaces, and can specify them through the command line (the --namespace argument) and through YAML (the metadata.namespace` field).

Be able to move quickly

I found the exam fairly tight time-wise. You’ll need to work quickly in a Kubernetes cluster from a terminal environment. Also, be prepared to skip questions if they have a low weighting—sometimes it’s not worth spending ten minute on a two mark question.

The exam environment is not friendly

First of all, the person running your exam will be strict. Even though it’s all done remotely, you’ll have to remove labels from drink bottles, remove everything from your desk (including, in my case, desk lamps and plants), and show the proctor the entire room through your webcam. Taking the exam in a public setting (like a library, which I almost did) is not really viable unfortunately.

The terminal environment you have to use is pretty terrible. It can be quite laggy and doesn’t have the autocompletion functionality you might be used to. Try to find the best internet connection you can to take the exam—a laggy environment is so disruptive.

A tip from Steve Mayne

My thanks to Steve Mayne for this tip (who passed his exam after taking my course... just sayin’)

Set the KUBE_EDITOR environment variable if you can't hack using vi / vim. The first thing I did in the exam was export KUBE_EDITOR="nano" because I'm not proud and I don't mind hardcore Linux people pouring scorn upon me :-)

You have a free retake

Don’t worry if you fail the exam—you get a free retake! The next time you’ll better understand what’s coming in the exam, and you’ll be able to manage your time better. If you do fail your first attempt, please email me and let me know which things tripped you up or what would have helped to know. I really want to improve this guide for everyone.

Meet the Author

Matthew Palmer is a software developer and author. He’s created popular desktop apps, scaled SaaS web services, and taught Computer Science students at the University of New South Wales.

Contact

Email: [email protected]

Email List: Sign Up

Twitter: @_matthewpalmer

Github: matthewpalmer