I just passed the CNCF (Cloud Native Computing Foundation) CKA (Certified Kubernetes Administrator) exam. Here's some information about how I prepared for the exam and a few tips for people interested in taking the exam.

Starting From Scratch

For folks who are totally unfamiliar with k8s, edX offers a free, self paced course, which is a great place to start. There's also a list of online training available in the official k8s docs.

Minikube

The most important kind of preparation for any exam, especially a practical exam, like the CKA is getting your hands dirty. Minikube is a great way to use k8s locally. It's trivial to install and use, and can help you get comfortable with the api-resources you will need to know for the exam.

CNCF Training

The CNCF offers a self paced course, and it is excellent. This was the best resource for learning k8s. I feel I could have passed the exam with just this course and hands on time if I had focused on preparing for long enough.

Kubernetes the Hard Way

This is basically a right of passage from "I'm interested in k8s" to "I know some things about k8s". Once you have an understanding of building clusters with kubeadm, kops or similar tools, it's definitely worth going through kubernetes the hard way. It's imperative that you do not simply copy and paste the examples, but try to understand them. If all you do is copy and paste here, you won't learn anything, and that's the whole point. Thinking about what you are doing as you build CSRs and request certificates from the k8s CA, and then where they actually get installed will help solidify your understanding of the communication flow within the k8s architecture.

Get Your Hands Dirty

Because the CKA is a practical exam, I feel this is the best kind of preparation. You need to be able to manage workloads (Pods and Controllers) and Services. It's important to get familiar with the documentation, since you can reference the official docs (in a single tab) during the exam. Get to know the kubectl command intimately; the kubectl explain subcommand is something worth exploring deeply since you can use it to get the definitions for all api-resource types from the command line. This can really help when you are trying to write a spec and get stuck. For a quick example, let's look at the output of kubectl explain pod.spec.affinity:

KIND:     Pod
VERSION:  v1

RESOURCE: affinity <Object>

DESCRIPTION:
     If specified, the pod's scheduling constraints

     Affinity is a group of affinity scheduling rules.

FIELDS:
   nodeAffinity	<Object>
     Describes node affinity scheduling rules for the pod.

   podAffinity	<Object>
     Describes pod affinity scheduling rules (e.g. co-locate this pod in the
     same node, zone, etc. as some other pod(s)).

   podAntiAffinity	<Object>
     Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod
     in the same node, zone, etc. as some other pod(s)).

You can look at any api resource this way, and drill down as far as you like, using the dot delimited notation.

Here's some other useful things you can do with kubectl include:

  • kubectl run --image=nginx nginx --replicas 2 --dry-run -o yaml > nginx.yaml This will give you a deployment yaml template that you can edit as needed before the old kubectl create -f <file>
  • kubectl get svc nginx-service --export -o yaml > nginx-svc.yaml This will write the details of an existing service to a yaml file. The --export flag will strip all the cluster specific info, so you can edit this file and kubectl apply -f <file> to update that service or use it as a template for creating new services.

Hands on experience like this will help you beat the clock and save time for questions that take longer.

What to Expect

It's a practical exam, so you should be prepared to work on k8s clusters. You will have 3 hours to complete the exam, and it's proctored (very strictly) online. There's a terrific amount of detail about the exam in both the candidate handbook, and the exam tips available from the CNCF. While almost every certification encourages you to read the FAQ and associated documents, I have to emphasize how important and useful it is for this exam. Do yourself a favor, and read those documents carefully.

There's also the CNCF curriculum repo on github, which is incredibly useful for understanding the breakdown of scoring. This helped me a lot in deciding where I needed to focus.

Every question provides a kubectl config use-context <context> command in the beginning, so you can make sure you operate on the right cluster. I made sure to run this on every question, even though they appear in order to minimize context switching. It's easy to run it and doing so means you never have to second guess.