Single-node deployments of Kubernetes are more common than one would expect. In some scenarios, single-node clusters make much more sense. For development or testing purposes, there’s no need to deploy a full production cluster.
So, to solve this trouble, we have MicroK8s, a tool by Canonical. In this hands-on lab, we will be going to learn about MicroK8s, and also we will see how to set them up on our machine.
You can start the lab setup by clicking on the Lab Setup button on the right side of the screen.
MicroK8s is an open-source system for automating deployment, scaling, and management of containerized applications. It enables you to easily deploy a lightweight single-node cluster in your local environment.
But now the question is, doesn’t Minikube already allow us to do just this? Yes, Minikube also allows us to deploy a single-node Kubernetes cluster locally but with one key difference — it’s VM-based, and thus will work best running within a VM, primarily on Mac and Windows but also on Linux.
MicroK8s, on the other hand, was designed for Linux and do not require a VM. Instead, it can easily be installed as a snap package using one simple command. Because it doesn’t require a VM, there are more resources available on the given machine to run applications, which makes MicroK8s a perfect fit for edge installations.
MicroK8s: Why use it
It provides the functionality of core Kubernetes components, in a small footprint, scalable from a single node to a high-availability production cluster. However, MicroK8s is aiming to reduce entry barriers for K8s and cloud-native application development.
There are some of the key reasons to use it widely.
- Delivered as snap packages – App packages for desktop, cloud, and IoT that are easy to install and secure with auto-updates, which support snaps.
- Production-grade add-ons — Istio, Knative, CoreDNS, Prometheus, Jaeger, Linkerd, Cilium, and Helm are available as add-ons and yet are simple to set up.
- Strict confinement – Ensures complete isolation from the underlying operating system and a tightly secured production-grade Kubernetes environment.
As we triggered the lab through the LAB SETUP button, a terminal, and an IDE comes for us. MicroK8s snap can be installed using the below command:
snap install microk8s --classic
The above command will install MicroK8s in a snap and within a few seconds, you should see this message displayed:
Now, confirm the status of MicroK8s by running the following command:
We can see a long list of available addon components that are disabled and the ones currently enabled which we will discuss in the next step.
To make MicroK8s as lightweight as possible, the default installation includes a core Kubernetes deployment, which includes the api-server, controller-manager, scheduler, kubelet, cni, and kube-proxy.
For the sake of demonstration in this hands-on lab, we’ll add the
dashboard addon that provides the well-known user interface to monitor and operate Kubernetes clusters. We’ll also enable two other addons that will support the dashboard —
microk8s enable dns dashboard storage
These add-ons can be disabled at any time by running the
microk8s disable command:
microk8s disable dns dashboard storage
We can have a look at some of the most important addons.
- dns: Deploy DNS. This addon may be required by others, thus we highly recommend you always enable it.
- dashboard: Deploy Kubernetes dashboard.
- ingress: Create an ingress controller.
- storage: Create a default storage class. This storage class makes use of the hostpath-provisioner pointing to a directory on the host.
- registry: Deploy a docker private registry and expose it on localhost:32000. The storage addon will be enabled as part of this addon.
Host your first service in Kubernetes
We start by creating a microbot deployment with two pods via the kubectl cli:
microk8s kubectl create deployment microbot --image=dontrebootme/microbot:v1
microk8s kubectl scale deployment microbot --replicas=2
To expose our deployment we need to create a service:
microk8s kubectl expose deployment microbot --type=NodePort --port=80 --name=microbot-service
As we have deployed this service on a
30000 node port, you need to change. Run the following command which will open up a yaml file of the
microk8s kubectl edit svc microbot-service
Now, check the
microbot-service running in
default namespace to verify that it is running on port
microk8s kubectl get svc -n default
At this moment, the microbot-service can be accessed through the app-port URL under the Lab-URLs section.
To see what the cluster looks like, run the following command:
microk8s kubectl get all --all-namespaces
It takes a few minutes to get all pods in the “Running” state.