How it all started:
A bit about me: I started my journey into learning about container orchestration a few years ago after becoming familiar with working in virtualized environments (mostly Vagrant w/ either Ubuntu or CentOS installations) via several developer and administrator courses that I had enrolled in at MongoDB University. It didn't take long for curiosity to get the best of me and I fast developed an interest in the world of containerized applications with Docker.
The Learning Path:
I signed up for several Docker & Kubernetes courses (..beginning with introductory level courses, then on to intermediate & advanced courses) at Udemy, Pluralsight, KodeKloud, and the Linux Academy (now A Cloud Guru):
DevOps Pre-Requisite Course - KodeKloud
The Linux Basics Course - KodeKloud
KodeKloud Engineer - KodeKloud
Kubernetes for Developers: Core Concepts - Pluralsight
Docker for Web Developers - Pluralsight
Certified Kubernetes Application Developer (CKAD) - Linux Academy/A Cloud Guru
I read books:
I read as many blogs as I could find the time to read. Here are a few that I found to be helpful:
..and of course, don't forget to read the docs!!
I practiced and then I practiced some more!
I built several Kubernetes clusters on my machine. I also heavily utilized the practice labs provided by the(CKAD) - KodeKloud course labs & the temporary 3 node cluster that I was allowed to build thanks to the resources provided by the (CKAD) - Linux Academy/A Cloud course.
The exam environment:
There are 19 tasks given and you have 2 hours to complete the exam. I have read many stories about people running out of time before attempting to get to all to of the tasks, especially on the first attempt. This is precisely what happened to me. Luckily for me and for anyone wanting to take the CKAD exam, the Linux Foundation provides exam takers with one free retry.
One bummer in my opinion is that you are only allowed one terminal window during the exam. This really stressed me out! Learning
tmux was a bonus in this regard. It can be comforting to know that it is possible open up a new terminal window pane to do any extra logging, debugging, or searching for labels associated with any available services &/or network policies if needed, etc... I didn't care for it at first, but now I quite like working with it now that I've become more familiar with the command required to open up split panes, etc... It took a bit of getting used to, but now working with tmux comes to me like second nature.
I also encountered some severe formatting errors when attempting to copy & paste from the Kubernetes docs to the exam terminal window. This, unfortunately slowed me down quite a bit on my first attempt, which led to frustration, which then led to confusion (& stress!!) after having wasted too much time trying to reformat yaml files.
Time saving tip(s):
To avoid the severe formatting errors that can take place when copy/pasting directly from the docs use
:set paste THEN i before pasting from the Kubernetes docs into the
vi/vim editor to avoid major formatting errors!!
Trust me on this one. It can mean the difference between a big mess and a less stressful experience. Here is an example of a direct copy/paste (before any editing on my local vim editor on my Ubuntu VM installation) from the docs without
:set paste and then with
:set paste on the right:
Use Aliases & Auto completion
Auto completion is helpful, as is using aliases. Unfortunately, there is no option to use your own custom aliases. You are only allowed to have one open tab to the Kubernetes documentation during the exam, so there is no way to copy/paste your own custom aliases. Do the best that you can in this regard and try to learn/remember as many Kubernetes shortcut commands that you can to save time when creating &/or editing resources:
k get po k get rs k get deploy k get netpol k get cj k get svc k get ns k get sa k get pv k get pvc
Remember to save resource yaml files before deleting resources!
I made the mistake of not saving resources before recreating them in the right order on my first attempt. That's a big mistake. I repeat: don't delete resources before saving their associated yaml manifest files first.
I created a ton of bookmarks from the docs and I made it a point to put them in alphabetical order for quick reference.
Utilize the notepad provided
As mentioned above, Even though I was not able to use my own aliases, I was at least able to add a few in to the provided notepad for copy/pasting into the terminal:
alias k=kubectl alias kr="kubectl run" alias k="kubectl describe" alias kaf="k apply -f"
....speaking of the notepad, I also used it to take note of any tasks that I was having issues with so that I could move on if stuck & come back later.
Watch out for deprecated commands!
The best way to avoid this is to practice on an install with the most recent version of Kubernetes available.
--restart=Never command is no longer needed to spin up a pod on the fly in Kubernetes v1.21.0. It can and is useful for spinning up a temporary busybox pod to test connectivity to another pod via wget like so:
k run test --image=busybox --restart=Never -n default --rm -it -- wget -o- <nginx-pod-ip>
...but is not needed to generate, say for example, an nginx pod and you may even end up with an error if asked to spin up a pod that is meant to continue running.
restartPolicy: Never on lhe left vs the current default
restartPolicy: Always on the right below:
If you are unsure of whether or not a command is deprecated or not, double check commands in your local environment like so:
k run pod --help
Always declare a namespace
I also made it made it a point to always declare a namespace when creating/editing any resources (even if in the default namespace…ie.,
-n default). I made it a point to practice this way…so as not to forget to pay attention to the namespace of an object, etc…
Well, that's it for now. I may update this post as time passes &/or as anything else comes to mind that I may have forgotten. In no way am I saying that it is necessary for everyone to take all of the courses in order to pass the CKAD exam, though for some people who are new to the world of DevOps & containerized application, it may be. It all depends on the foundation that you have to stand on to begin with when attempting to learn about Kubernetes from a developer's perspective. I needed a bit of help with my foundation before continuing on to CKAD focused courses, so hopefully this post will help others who are new to DevOps and Kubernetes to understand what may lie ahead of them on this journey.