Friends and acquaintances often reach out to me for questions on where and how they can start learning Kubernetes. These requests are from a mixed bag of both Ops and Devs people who are still working with legacy systems like VM and monolith applications. Terms like CI/CD and DevOps are nothing but buzzwords to them, as they are still busy watering and feeding the legacy systems they maintain as part of their daily job requirements.
They are showing interest now that they’ve noticed more and more workloads being migrated away from VM to containers, and monolith applications are re-architected to microservices to handle innovation easily and respond to the rapid market demands. The time is now for them to learn the tools, platforms, and solutions causing this mass migration to Kubernetes.
This encouraged me to write this article, to help my friends and others who wanted to start learning Kubernetes to push their own journey toward containers and the cloud-native application world.
Disclaimer: Learning Kubernetes is going to be a bumpy ride. You will learn some new terminologies and new ways of managing and deploying your application the cloud-native way.
So what is Kubernetes anyway?
The first thing to do when learning Kubernetes is to find a clear explanation of what it is. There are a lot of books and YouTube references that you can use to get the most basic explanations—I found this YouTube video, The Illustrated Children’s Guide to Kubernetes, that I thought was the best explanation of what Kubernetes is. Have a look before reading on.
The Kubernetes components
Kubernetes is not a single machine but rather a platform. When you deploy Kubernetes, you will get a cluster. A cluster consists of a set of master and worker machines, called nodes, that run containerized applications. Every cluster has at least one worker node. These are the Kubernetes components.
Below is what Kubernetes looks like with all the components tied together.
How to start?
When learning Kubernetes, you need to deploy a cluster. But that will be a challenge for people who aren’t able to get their hands on the extra hardware and find time to set it up along with the required networking and computing resources. This requirement often derails a Kubernetes journey before it starts. So what is the best way to start?
Fortunately, there are multiple open source projects that allow you to deploy a Kubernetes cluster from your laptop. Let’s take a look at those projects before I offer my own opinion on which is the best way to learn Kubernetes and deploy your first cloud-native application.
Local Kubernetes projects to the rescue
These are the local projects that you can use to explore Kubernetes. Note that these projects are not enterprise-ready and only are supposed to be used for learning purposes.
Note: Before starting your Kubernetes exploration, make sure that you have adequate resources on your laptop.
- Linux: Red Hat Enterprise Linux, Fedora, CentOS
- 16 GiB or more of RAM per machine (any less leaves little room for your apps).
- 2 CPUs on the machine that you use as a control-plane node.
- Full network connectivity among all machines in the cluster.
Minikube is among the easiest to install among these options. It will provide you with a single-node cluster running on top of either VirtualBox or KVM.
- CPU: 2
- Memory: 2 GB
- Disk space: 20 GB
Once you have a running cluster (single-node), then you can start to familiarize yourself by deploying a simple application using the kubectl command line to interact with your local Kubernetes cluster. The only issue that I noticed while using minikube is the limitation of adding a worker node to complete the cluster experience.
Kind requires you to run Kubernetes in a Docker container. The kind installation instructions can be found here.
Although kind is easy to install, the problem that I see in using this project is the complex network configuration to access the cluster. For someone who is just starting to learn Kubernetes, it could be prohibitive.
- CPU: 2
- Memory: 8GB
- Storage: 20GB
The cluster spin-up using kubeadm can be used to deploy cloud-native applications. To start with, you will have a single master node and a worker node.
Installing kubeadm on your laptop is the nearest experience that you can get to production-grade Kubernetes cluster deployment. Because of this, kubeadm is also probably the hardest way to learn Kubernetes.
- CPU: 2
- Memory: 8GB (you will need extra memory for application deployment).
- Storage: 20GB
Minishift is a project based in OKD, the upstream behind OpenShift. When you install Minishift, it will provide you with a single-node OpenShift cluster running inside either in VirtualBox or KVM.
- CPU: 2
- Memory: 4 GB
- Storage: 20 GB
Minishift is easy to install and provides more flexibility compared to other projects because you can install it in Linux, Windows, and macOS.
Since Minishift is based in OKD, you will get to learn not only the Kubernetes basics but also Openshift and some of the components available in Minishift.
The drawback of Minishift is that it only supports OKD 3.11, so you will not be able to get the full experience of the new version of OKD 4. Minishift is replaced by CodeReady Containers to get the full experience of OKD 4, as described here.
CodeReady Containers (CRC)
CRC is based in OKD 4.1, which provides a single-node configuration on your laptop. It operates almost exactly like Minishift and minikube. The installation is easy as well; the documentation can be found here.
- CPU: 4
- Memory: 8 GB
- Storage: 30 GB
[ Get this free ebook: Managing your Kubernetes clusters for dummies. ]
There are many ways of deploying Kubernetes locally to start your own journey towards mastering the important skills that are at the center of the current IT revolution.
If you’re just starting out, I suggest learning Kubernetes using minikube because I found that this is the easiest for beginners. Once you are familiar with the Kubernetes concept, the next step is to move on to CRC. This will raise your Kubernetes skills to the next level so you can learn the enterprise-ready components that most of the advanced adapters are already using.
As mentioned earlier, learning Kubernetes is like learning Linux operating systems all over again. Don’t be discouraged if you hit a roadblock. Having a strong grasp on this technology is like investing in your future and, in a way, helps you future proof yourself.