I recently passed the Certified Kubernetes Application Developer exam and thought to share some tips and tricks that might come in handy if you are also planning to take the exam in the future.
About a month ago, I decided to learn more about Kubernetes as it would be really useful for the stuff I’m working at GitHub daily. Prior to that, I was always fascinated by Kubernetes but never got the chance to work on an actual system that used it. I knew how it worked from a 10,000 feet view, but didn’t have an idea of core components, basic constructs and literally to be able to do anything with it.
Having taken the exam, I’m quite comfortable navigating through Kubernetes and now it makes sense when I’m doing something with it, rather than merely following some commands.
CKAD is a hands-on exam and managing your time is absolutely crucial. I hope you find the following tips useful✌️
🗒️ Summary of the exam
To summarize the key facts about the CKAD exam,
- Passing score is 66%
- 2 hours duration, comprised of 19 questions
- Questions will have varying weights (from 2% - 13%)
- You can also open only one tab to browse Kubernetes documentation
- Remotely proctored
💻 Aliases and bash tricks
This is a really important first that I can’t recommend enough. I was using the full
kubectl command during the study phase but later started using just
k by setting up an alias when I was practising simply to cut down the time when typing commands.
Initially, it will take a few seconds to type this out but it will pay dividends throughout the exam. Here are a few more if you are interested. You don’t need to use everything in here though. In fact, I only used the above alias.
Feel free to mix and match the commands you are comfortable with 👍
alias kd='kubectl describe' alias kr='kubectl run' alias kc='kubectl create' alias ke='kubectl explain' alias kgp='kubectl get pods' alias kgs='kubectl get svc'
You don’t need to be a Linux guru to take the exam, but, remember you will do it in some Linux env. (potentially Ubuntu). So it helps to know a few basic Bash commands if you are coming from Windows.
cp- Copy files
mv- Move/Rename files
mkdir- Create new folder
ls- List files
rm- Remove/Delete files
grep- Search through text. Useful when you want to filter a list of pods. Eg:
kubectl get pods | grep -i status:
Ctrl+R- To do a reverse search to find a command you have previously run
Extra tip: Use short names of resources whenever possible.
Not sure what are the short names? You can check it with
kubectl api-resources command.
⌨️ Get a good grasp of VIM
I found having previous experience in VIM came in handy. However, you don’t need to be a master at it. Using nano would be fine too if you are good.
Take the time to set the following to your VIM profile before attempting any questions.
Add the following lines and save it.
set expandtab set tabstop=2 set shiftwidth=2
These commands will save you from having indentation issues and weird syntax issues while working with YAML files during the exam.
Here are some other commands that may be of help if you are not familiar with VIM.
/- Search through text. Also, use
nto go to the next result.
dd- Delete a line
Shift+A- Go to the end of the line and enter the INSERT mode
gg- Go to the beginning of the file
G- Go to the end of the file
o- Go to the next line and enter INSERT mode
v- Enter VISUAL mode. You can select a block of lines with arrow keys or
kkeys. You can copy with
yand paste with
p. Also, you can indent a block with
Shift + >to right and
Shift + <to indent to the left
And finally, while you are in NORMAL mode you can type
ZZ to quickly save and go back to the terminal without having to type
:wq How cool is that? ⚡
☄️ Mastering the imperative commands
You would come across many questions where you would have to create pods, deployments, services etc. In such cases, don’t bother writing up YAML definitions from scratch - or even finding the relevant reference in the k8s docs.
You can save a lot of time by using imperative commands. For instance, if you are tasked to create a pod with
nginx as the image,
tier:frontend as labels with the port
kubectl run tmp --image=nginx --labels tier=frontend --port 80
Say you are asked to expose a deployment
nginx with a
NodePort service called
kubectl expose deploy nginx --name=nginx-svc --port=80 --target-port=80 --type=NodePort
But what if you can’t get everything included in a single command you can use the
--dry-run=client -o yaml > tmp.yaml to export it to a file before creating the resource.
Oh btw, if you need to delete a pod quickly you can use the
--grace-period=0 --force command to quickly delete them without waiting.
kubectl delete po <pod name> --grace-period=0 --force
🤔 When in trouble
Pay attention to the weightage of the question and a rough idea of how long it will take you to solve it. I can remember, I was looking at a question that was quite long and had a fair bit of configuration to be done. But the weightage was only 2% 😆 I marked it down on the provided notepad and skipped it (you can also Flag a question). The next question was 4% and was really really easy! I hope you get the point.
💡 Don’t be afraid to skip and revisit questions.
If you forgot how something is placed in a resource definition, you can use
kubectl explain <resource name> --recursive | less to find what you are looking for.
Another useful tip I can give you is, the
kubectl <resource name> -h command. You can use it like so.
k run -h
☝️ A note on clusters & namespaces
This is also a very important point you should pay attention to. At the top of each question, if you will be given a command to set the current context. Make sure to run it for each question as different questions will be in different clusters.
Another point is, pay attention to any namespaces in the given question text. Sometimes it will be worded within the question. Sometimes it will be at the bottom of the question as a separate note!
In a question where you will have to
ssh into servers please make sure to remember (or note it down) which cluster and server you are in. And remember to
exit out of it before going to the next question.
📄 Leverage the docs
In certain cases, it’s better to visit the docs than to spend time to figure out what needs to be done. For instance, if there’s a question on setting up a Persistent Volume, the question will also have a section to create a Persistent Volume Claim and to create a Pod to use that.
Go to the docs, type
pv at the search bar and click on the link that says “Configure a Pod to Use a PersistentVolume for Storage”. And yes, you need to know where things are at within the K8S docs!
👟 Practice, practice, practice
Speed is key to the exam. Although you get 2 hours, it will just fly! 🦅
When you pay for the exam you will get 2 free mock exam sessions before sitting the real exam.
Here are some more exercises I used.
- https://github.com/dgkanatsios/CKAD-exercises [Free]
- https://github.com/bmuschko/ckad-prep [Free]
- https://kodekloud.com/courses/certified-kubernetes-application-developer-ckad/ [Paid]
- https://medium.com/bb-tutorials-and-thoughts/practice-enough-with-these-questions-for-the-ckad-exam-2f42d1228552 [Free]
Do you know what’s the hardest thing to do after the exam? waiting for the results! 🤣 It might take up to 24 - 36 hours to get your result. Here’s my certificate if you are interested.
I hope you found these tips helpful. Feel free to comment below if you have got any tips and tricks too! Good luck with your exam!!! 🎉