Bare-Metal K8s Cluster with Raspberry Pi – Part 3
This is a continuation from the post series Bare-metal K8s cluster with Raspberry Pi – Part 1 & Part 2 here
Another option of running bare-metal K8s cluster in the Raspberry Pi I tried and tested was with Micro K8s which we discuss in this post.
Micro K8s are Lightweight upstream K8s. They are smallest, simplest, pure production K8s. For clusters, laptops, IoT and Edge, on Intel and ARM.
MicroK8s is a CNCF certified upstream Kubernetes deployment that runs entirely on your workstation or edge device. Being a snap it runs all Kubernetes services natively (i.e. no virtual machines) while packing the entire set of libraries and binaries needed. Installation is limited by how fast you can download a couple of hundred megabytes and the removal of MicroK8s leaves nothing behind.
And to give a context on snap, Snaps are app packages for desktop, cloud and IoT that are easy to install, secure, cross‐platform and dependency‐free. Snaps are discover able and install able from the Snap Store, the app store for Linux with an audience of millions.
A snap is a bundle of an app and its dependencies that works without modification across Linux distributions.
We are going to use the same components list as described in the Part 1 of this series.
Each Pi is going to need an Ubuntu server image and you’ll need to be able to SSH into them. Please follow this link here will help us to reach to this stage
Kubernetes Cluster Preparation with SSH connection to the Pi from your terminal
Installing MicroK8s
Follow this section for each of your Pis. Once completed you will have MicroK8s installed and running everywhere.
SSH to your first Pi and install the MicroK8s snap:
sudo snap install microk8s --classic
As MicroK8s is a snap and as such it will be automatically updated to newer releases of the package, which is following closely upstream Kubernetes releases, so we don’t need to worry about the K8s version we’re installing
sudo snap install microk8s --classic --channel=1.15/stable
Channels are made up of a track (or series) and an expected level of stability, based on MicroK8s releases (Stable, Candidate, Beta, Edge). For more information about which releases are available, run:
snap info microk8s
Cheat Sheet for MicroK8s
Before going further here is a quick intro to the MicroK8s command line:
microk8s.start
– start all enabled Kubernetes servicesmicrok8s.inspect
– status of servicesmicrok8s.stop
– stop all Kubernetes servicesmicrok8s.enable dns
– enable Kubernetes add-ons,“kubedns”microk8s.kubectl cluster-info
– status of the cluster:
MicroK8s is easy to use and comes with plenty of Kubernetes add-ons you can enable or disable.
Master node and leaf nodes
Now that you have MicroK8s installed on all boards, pick one which has to be the master node of your cluster.
On the chosen Master node, run the following command:
sudo microk8s.add-node
This command will generate a connection string in the form of :/.
Adding a node
Now, you need to run the join command from another Pi you want to add to the cluster:
microk8s.join 10.55.60.14:25000/JHpbBYMIevZSAMnmjMHmFwanrOYCWZLu
You should be able to see the new node in a few seconds on the master with the following command:
microk8s.kubectl get node
For each new node, you need to run the microk8s.add-node
command on the master, copy the output, then run microk8s.join
on the leaf.
Removing nodes
To remove a node, run the following command on the master:
sudo microk8s remove-node
The name of nodes are available on the master by running the microk8s.kubectl get node
Alternatively, you can leave the cluster from a leaf node by running:
sudo microk8s.leave
Once Pis are setup with MicroK8s, adding and removing nodes is easy and you can scale up or down as you go.
Voila..!!
If you follow this series, you are now in control of your Kubernetes cluster. One with native kubernetes and docker and the other one with more easier to install and manage MicroK8s
This completes the 3 part series for K8s in Raspberry Pi. In a new follow-up blog post we can see how we can use kubectl & helm charts to deploy a Nginx service, Prometheus and few other services from the DevOps tools set to the cluster.