I decided to go for my Certified Kubernetes Administrator (CKA) certification, provided through The Linux Foundation. It was arduous!
My Score
I scored an 85 on the exam - my first try (you get one free retake). I didn’t find any of the questions particularly difficult, although I did find the wording on some of them to be either vague or weird, leading me to wonder whether I had completed questions or actually fulfilled the requirements.
In a work situation, you get to ask clarifying questions, but this is not that!
Here’s what my prep and exam experience was like:
Prep
I started with a KodeKloud course:
KodeKloud
I subscribed to KodeKloud (Pro, I believe) to get full access to their courses and “Playgrounds”. KodeKloud was probably the most consistently recommended platform for Kubernetes. I got a month subscription originally, then upgraded to a year when they did a 40% off promotion (these seem to be pretty regular). This was worth it for me because I’m planning to do another couple of courses.
I ran through all lectures and practice tests, then did all practice tests again.
I then went through the Ultimate Mock CKA exams. I really liked the mock exams. I probably ran through 8-10 times. Each exam is really just a random collection of questions from their question bank, so whether I repeated Exam one 5 times or did other exams I would sometimes get recycled questions. The answers occasionally were wrong (like when the answer was a result of k top node
), but no biggie.
I would spin up a k8s playground regularly to test things out, so that was a feature that I appreciated.
Killer.sh
I did both free killer.sh tests. The killer.sh tests are provided free with your certification exam purchase. You only get one set of exam questions. In other words, you take the same practice exam twice. Their idea is that you take it the first time, wait a little while, then take it again.
The killer.sh practice exams are quite difficult, mainly because of time constraints. While I was quite comfortable with the KodeKloud Mock Exams, the killer.sh exams were soulcrushing!
My first one I scored perhaps in the 50% range in two hours. One or two items weren’t covered by KodeKloud, and the setups were fairly complicated. You have 36 hours to continue with your exam (there is no 2 hour limit), so I went through all the questions and solutions. The next day, I reset the environment and took the test again.
I took the “second” exam the day before my real CKA and got an 80% in 2 hours. Again, I worked through the rest of the test questions.
KodeKloud Mock Exams vs. Killer.sh vs. Real Exam
The killer.sh exam was the most difficult, by far. If I’d skipped these, I think the KK Exams would have been pretty adequate prep. I didn’t find any Real Exam questions as hard as most of the killer.sh questions, or the hardest KK mock exam questions.
I’d still highly recommend killer.sh! It seemed like good real world practice and attempting to score as highly as possible in the killer.sh exam in 2 hours is great prep.
How effective was the prep?
It took me 2.5-3 months from when I signed up to KodeKloud to taking the exam. KodeKloud and Killer.sh were great.
What do you need to be good at?
Imperative commands save a ton of time over finding and pasting in full yaml for a resource.
Being able to find things in the docs is important, since you can’t have bookmarks. This is not always easy, so doing multiple practice exams helps you remember where things are.
k explain <resource> --recursive
is helpful.
It is particularly helpful to do something like k explain pod.spec.container.some-field.another-nested-field --recursive
to check/confirm field names in a resource.
I read that other people use it to generate yaml, however, it does not directly generate yaml, and it requires a ton of cleanup to get it into yaml form. I tried to do this on a practice exam and gave up, because it’s too easy to make a mistake.
I used k <some-command> -h | grep Example -A20
to get the help examples, and this would also work well for k explain
.
The general Linux knowledge that you’d need for KodeKloud or killer.sh was fine for the exam, although I’d think most people doing the CKA would already be fairly Linux-comfortable.
I am already a vim user, so I used vim. I have no idea what I’d use if not vim. (Nano, perhaps?)
My Environment
As you must, I used the PSI secure browser. I read and agreed to my check-in items a few days before the exam. You will leave your microphone and camera on, and have to pan the room you take the test in, your ears, under the keyboard, etc. It feels pretty invasive, but my proctor wasn’t insane and this went fine.
Crazily, the test environment only supports Ubuntu 20.04 and 22.04. At the time of this writing, Ubuntu 23.04 is out. While I understand why they might only support LTS releases, it’s shocking that The Linux Foundation doesn’t support other Linux OSes like Fedora, Arch, Debian, etc.
“Disposable” laptop setup
I have long used Ansible to provision my laptop, plus I do regular backups with borg, rclone, and the KDE backup utility. This is mostly because if I lose or wreck my laptop, I don’t want to worry about it. This came in handy:
I ended up partitioning my laptop’s second drive and installing both supported OSes. This did not go as smoothly as I would have liked, for a couple reasons, so I actually installed my primary OS again, as well.
Because of my restore scripts this wasn’t a big deal, but it was somewhat annoying to do all this work to get a cert.
Internet speed
According to fast.com, I’ve got 90 Mbps download/9.9 Mbps upload. I was worried about this, and was having some problems with…something during the PSI compatibility check. I read of people upgrading their Internet just for the test, but it was just fine for me.
Monitor
I used a 24" external monitor, which was great. I would go bigger next time. The PSI testing environment takes up some extra screen space.
In killer.sh, you’re set up with a few workspaces, so I planned to use them in the exam.
However, the testing environment does not have extra workspaces already setup. Despite using XFCE for years, I could not figure out how to make an extra workspace in 6 seconds, so I just started doing test questions with one workspace! This was fine.
Money
If you don’t need to take the exam right away, and you’re paying for it yourself, wait for a coupon code! I’ve seen coupons now for 15%, 20%, and 40% off the exam. KodeKloud and other orgs provide codes, and you should get coupons from the Linux Foundation if you sign up to their newsletter. This can be a significant savings!
The Actual Exam
I felt pretty prepared for it and was certain I would at least pass!
I didn’t find the questions particularly difficult, although I thought a couple of questions had imprecise wording. This resulted in my spending a bit more time in the docs trying to see if I had missed something.
Setup
I planned to create a file “auto” which would have the following:
# context management, from the cheatsheet
alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
# namespace management, from the cheatsheet
alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'
y=' --dry-run=client -o yaml '
n=' --force --grace-period 0 '
Then I was going to source in my terminals with . auto
.
But I never used this file or these aliases!
The exam provides the command to switch context, and I didn’t find namespace switching to be as important as it was in the practice exams. I just typed in the other things as needed and it was fine.
k
is already aliased to kubectl
.
Problem: Escape and Caps Lock
I had a major problem here!
Like many vim users, I have Caps functioning as an extra escape in my OS, and configured this in both 20.04 and 22.04. While this worked fine in the killer.sh exams, it did not work in the real exam.
This was a huge pain, and really disruptive to accidentally capitalize and then mess up what I was working on. I could have tried to memorize the command to swap Caps and Escape (I believe it’s probably xkbmap <something>
) but who knows if it would have worked anyway in the test environment?
To Conclude
Would I do it again? Yes.
It is a lot of work to become proficient enough in k8s to do well in the exam. You need to:
- Find things in the docs quickly.
- Use imperative commands.
- Be proficient with
kubectl
andkubectl -h
. - Understand a lot of things!
I felt like the process of taking the exam was harder than it should be, but it is what it is.