CKAD experience
Tags: kubernetes
Published: 2020-09-18 06:47:47

6 months ago I only knew kubernetes by name. Today I obtained the CKAD certification. Make no mistake, this is a selective examination where the slightest hesitation is not allowed.

I will share this experience with you, hoping it will help you.

# What skills are required?
The exam is limited in time and requires mainly quick decisions. In my opinion to be ready you need :
- To master the concepts of kubernetes in depth
- Mastering vim and basic bash commands

The exam assesses your ability to **identify and resolve a problem as quickly as possible**. You won't have time to experiment, either you've figured out what to do or you need to move on to the next question.

# Mastering kubernetes
For this there is only one way: practice, practice and practice!

First of all you have to understand the concepts. For this you have access to countless workshops on the internet.

I recommend this book: https://gumroad.com/l/understanding-kubernetes-visual-way

There's everything you need to understand how it works.

# Mastering vim and bash commands
The commands `curl` and `wget` are essential to know. Also the syntax `sh -c <command>` must be mastered.

If you are not comfortable with vim forget the exam. You will not have access to any IDE, you will have to manage and be quick with vim.

### Vim configuration
You can execute the following command to properly prepare `vim` for editing YAML.
```
echo "set ts=2 sts=2 sw=2 et" > ~./.vimrc && . ~/.vimrc
```
Learn this command by heart, it will be the first thing to do during the exam.

### Commands to know
You need to know how to quickly delete one or more lines, insert a line before or after the cursor, replace a character and exit the editor !

# Practice, practice and practice! 
Before taking the exam you must practice intensively. You must be able to answer instantly a question like: "Launch a pod named `pod1` with the image `nginx`. This pod must be exposed by a service called `pod-service` on port 443."

You must be able to use imperative mode to generate yaml files and modify them with vim to run them in declarative mode.

Personally, I used Udemy's training and performed the mock exam of killer.sh.

# D day
## Setup
The examination begins with a verification of identity and compliance with the rules. You will need to activate your camera and share your screen. This part can be quite long. For me it lasted almost 30 minutes. The screen sharing was not working properly and we had to repeat the procedure several times. I had to take apart the two screens on my desktop even though they were turned off.

Avoid wasting time, rigorously prepare the place where you will take the exam:
- no posters or inscriptions on the wall
- no paper on the desk
- only one screen
- no one else in the room
- preferably a closed room
- no food

You will be entitled to a glass of water as long as there is no inscription on the glass. I had taken a glass of water during a mock exam and had to go to the bathroom and waste time for nothing. I would advise against it!

## Process
The objective is to reach 66% correct answers. There are 19 questions in total, some questions are worth 3% and others 12%.

You will be entitled to the official kubernetes documentation, feel free to use it and copy and paste. If you are well prepared you will know exactly where the code snippet you need is.

There is a notepad available, use it to note down information about your progress and the value of the questions.

## Strategy
You need to know your strategy before you start. Are you going to do the easy questions first and then come back to the hard questions later? Are you going to start with the hard questions first? Will you answer the questions in order?

You absolutely must know how you want to proceed. You won't have time to improvise. If you waste too much time on one question you won't have enough time for a simpler one.

This is the strategy I applied: 
- First I took the time to create the aliases I needed and configure vim
- I took the questions in order, noting each time the number of each question and its percentage in the notepad. Ex: `12 - 4% => OK` or `8 - 7% => cron job, not done`.
- When I would answer a question I would do a quick check and then I wouldn't come back to it. Don't spend time on unnecessary checks, if you have made a mistake chances are that you don't see it and you are wasting time for nothing.
- Up to question 10 I answered all the questions in order because they were quite easy.
- From question 10 I read the question, if I understood it immediately and knew what to do I made a first attempt otherwise I moved on to the next question. If the attempt failed I tried to solve the problem once and then I went on to the next one. 
- Once I had scanned through all the questions I would go back to the ones that seemed easiest to me.
- From time to time I would stop to calculate the score of the questions that had already been answered.
- When I had a yaml file to create I numbered it according to the question. For example `04-pod.yaml` or `12-netpol.yaml`.
- I had time to answer all the questions, with the time left I quickly checked my answers without going into detail. I checked that the service was created in the right namespace for example but not that it exposed the right port or that it had the right selector.

I remind you that the objective is to have a score above 66%, not to beat the world record.

## Tips
Don't waste time on a tough question.
There are some topics where you will be less comfortable, save them for the end. I have less mastery of jobs and cronjobs, I immediately passed the question to answer a simpler one for me. I came back to this question once I had done everything I knew.

Beware of stress. It took me a long time to get started and it was hard for me to concentrate on the first few questions.

You may not have time to answer all the questions. That's normal, don't rush, read the statement carefully before you start answering. It is better not to have time to answer 3 questions than to answer 19 questions incorrectly.

**My aliases**
```
alias k="kubectl"
export $do="--dry-run=client -o yaml"
export $fo="--force --grace-period=0"
```
This is how I use them
```
# Create a definition file
k run ningx --image=ningx $do > 01-pod.yaml

# Force delete a pod
k delete po my-pod $fo
```
# Useful links
K8s in visual way: https://gumroad.com/l/understanding-kubernetes-visual-way
Another tips: https://dev.to/aurelievache/tips-about-certified-kubernetes-application-developers-ckad-exam-287g
Tips in french: https://thibault-lereste.fr/2020/05/certification-kubernetes-ckad/
Courses: https://www.udemy.com/course/certified-kubernetes-application-developer/