blog/content/post/06-cka.md

232 lines
8.7 KiB
Markdown

---
title: "3 weeks, 1 CKA"
subtitle: "How to rock the k8s certification in no time"
date: 2022-10-29
draft: false
tags: [ops, containers, certifications, devops, kube]
---
## Kube & the CKA
![k8s logo](https://upload.wikimedia.org/wikipedia/commons/6/67/Kubernetes_logo.svg)
[Kube](https://kubernetes.io/), **k8s** or Kubernetes is the industry leader
when you need to orchestrate some containers at scale. The **containers war** is
over : Swarm, Mesos and all other alternatives are dead (except
[Nomad](https://nomadproject.io) under some circonstances).
The **Certified Kubernetes Administror** (CKA) is a certification delivered by
the **Cloud Native Coputing Fundation** (CNCF) and the **Linux Fundation** that
will ensure that the certified peoples have the skills and knowledge to operate
as cluster administrators.
As a certified kube nerd, I can now confirm that this certification is much more
than a _cool line_ on your CV.
## My CKA story
My certification was funded (price is around 300$) by my previous job (a year
ago). At that time, I was working as a DevOps/CI guy on a SaaS product based on
Gitlab, Gitlab-CI and Docker. Containers at a high or low-level was part of my
day to day job [^1].
For various reasons I quit and I am now working as a fullstack dev (Rails/React)
so I just use containers to spin up my dev env. Due to this change I did almost
have no time to dig on kube and the deadline to pass my exam was getting closer
and closer 🚨
On October I kicked myself in the ass to rush out the CKA and pass my exam ASAP.
**3 weeks later I am now certified ! YAY !** (with a 85% score)
Enough about me, now I will share with you everything you need to know to
prepare and pass your's !
## Course Material
When looking for learning materials, I focused my search on courses labelled as
**CKA courses** only (other ones do not go deep enough). The best one out
there is _Certified Kubernetes Administrator (CKA) with Practice Tests_ by
Mumshad Mannambeth on
[Udemy](https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/)
(reddit agrees with me so, it should the truth 🤷).
The awesomeness of this course comes from on how the content is balanced between
videos on theory and concepts around kube (architectures, entities and so on)
followed by hands on-labs. Directly from your browser, you will be able to
practice and
**get your hands dirty** by typing some "kube cuddle" commands on a multi-nodes
cluster setup. Tasks in each labs is clear enough for you to get the solution
by yourself or by the official kube docs. Of course, you can always take a look
at the associated video if you are stuck or want to confirm that your way of
doing things is the right one.
If you want to rush out, you should be able to finish the course by a week or
two, the rest of the time will be labs, labs, labs and labs. This certification
is a practical one and **you need to practice a lot**.
## Exam Prep Materials
When you starting to feel that you can control some **kube powers** with your
hands it's time to go on practice tests. Starts with the one in the course by
Mumshad. In order to pass the CKA you need to be efficient on a bunch of
various tasks. Practice pratice practice in order to become fluent in a least :
- cluster upgrades using kubeadm
- etcd back/restore
- pods scheduling (with PV and PVC)
- deployments and scheduling (with PV and PVC)
- roles setup (users, Role/RoleBinding, ClusterRole/ClusterRoleBinding)
- troubleshooting pods
- troubleshooting cluster components
in order to sharpen your skills, use the labs on [killer.sh](https://killer.sh).
You will have two "free sessions" attached to your Linux Fundation profile. Be
careful, those exams are way more difficult that the real ones. Hopefully this
will give you a very accurate feeling of your capabilities when times maters.
Take time to review the answers as they will give you deep explanations on the
how and why. Killer.sh interface is quite the same as the one you will use in
the real exam so take time to check the setup and customize it the way you like.
Now you are ready, go for the exam day !
## Exam Day
On the exam day, prepare yourself and your environment well. You can access the
session 30 minutes before the exam starts. Use this time to setup your desk and
your room. You need to be a in quiet and empty room with nothing on your desk to
speed up the check-in. The exam proctor will first ask you for your ID. After
that you will go for a room tour, an usb connected webcam is prefered since your
need to turn it in all directions for the proctor to verified you're not
cheating.
During the exam, the only online resource accessible is the [kubernetes
documentation](https://kubernetes.io/docs). No worry, this is the only thing you
need. I can recommend enough to use it why you are learning to be very
comfortable with it on the exam day.
Do not stress out, take your time, at least you have a free retake if you miss
the first one !
## Tricks and Tips
CKA is about speed and efficiency, here are some usefull tips.
### UTFD : Use The Fucking Documentation
k8s documentation is a gem, everything is already there but you have to know
some shortcuts to quckly access the examples or articles your need. **USE THE
SEARCH** to quickly find yaml manifests for things like PV, PVC. Just type PV
and rush the first link!
Another usefull page in the documentation is the [kubectl cheat
sheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/), as usual, just
type "cheat sheet" and you are good to go!
### kubectl : be imperative first
k8s is about carefully handcrafted yaml manifest, right ? That's too slow in our
case. You need to be fast. Hopefully, `kubectl` can do 90% of the job for you.
Always use the **imperative approach** as a first intention. Let's imagine you
need to run an ngnix POD:
```sh
kubectl run nginx --image=nginx
```
or if you need to create a service :
```sh
kubectl create service clusterip my-service --tcp=5678:8080
```
Sometimes, some of the options are not configurable using the cli, no worry,
`kubectl` have your back too ! You can generate a yaml manifest directly from
the cli :
```sh
kubectl run nginx --image=nginx --labels tier=frontend --dry-run=client -o yaml > pod.yaml
```
By redirecting it to a new text file, you will then be able to add the missing
specs from a vim session followed by a `kubectl apply -f` to apply your changes.
There is also a lot of examples in help messages from the cli ! Before loosing
time changing windows from terminal to browser, append `-h` to your command !
[^2]
_Extra tip! If you need to generate a DaemonSet or StatefulSet, you can not do
it directly from the cli but since thoose specs are similar to a deployment one,
generate a deployment and edit it afterward._
Finally practice some `jsonpath` stuff and play with it to output data from
pods, nodes, the way you want.
### Take the time to setup your env
The vitual machine you will be working on is a simple Ubuntu with a stock XFCE
config. Base setup for the shell/ssh and VIM (colors etc) will be applied by
default. Here is the things I think is worth it to add in the bash config :
```sh
# optional, should already be setup
alias k='kubectl'
# for fast apply
alias kaf='kubectl apply -f'
# old habit..
alias vi='vim'
# save tedious typos
export do='--dry-run=client -o yaml'
# we are in a hurry, we do not want to wait for things to terminate gracefully
export now='--force --grace-period 0'
# just to organize things, useful while reviewing our answers
function mkcd {
cd $HOME && mkdir -p $1 && cd $1
}
```
### Known your VIM
Due to the time constraint, I did not recommend working outside the terminal,
except for Firefox and navigating the docs (since you are in a remote desktop,
everything feels a little bit slow).
Some efficiency with VIM will be a great plus for the overall exam. At least
knowing the basic on how to edit/navigate/save the file is a must have. I also
recommend getting confortable with :
- basic moves: h,j,k,l,b,w,e
- visual mode
- copy/paste
- advanced moves : t/T, f/F
- search/replace
- :N to jump to line N
### Shell basics
Some shell basics are also a great plus, the most important one is `Ctrl+R` for
reverse searching a command in your history. Add to that some stuff like `!$` to
recall the last arg from your previous command, you should be able to have a
flow like this :
```sh
vi somestuff.yaml
kaf !$
```
Sometime, you may need to filter/modify output provided by a command, some shell
basic like `grep`, `cut`, `tail`, `head` may help you. If you already know some
shit about `AWK`, be sure to also review it a little bit, this tool is dope and
can archive very impressive stuff.
Now, it's your turn.
```sh
kubectl apply -f goodluck.yaml
```
[^1]: Kudos @athoune
[^2]: Another shell tip ! `!! -h` to recall your last command with the extra `-h`