64bit Kubernetes Cluster on Raspberry Pi

In this manual I describe how to install and configure a 64bit Kubernetes Cluster on Raspberry Pi.

Why this tutorial?

Although the Raspberry Pi 3B+ has a 64bit ARM processor, the most linux distributions for Raspberry Pi 3B+ currently only work on a 32bit basis. This hardly leads to a lower performance, but limits the usability of software a little, because 32bit software can run on 64bit systems, but not vice versa, e.g. the Kubernetes Pod Network Add-On “Calico”.

Because I wanted to know if it is possible to run a 64bit Kubernetes Cluster on Raspberry Pi I decided to simply try it out.

Image preparation

First, a 64bit operating system is required for the Raspberry Pi. Since HypriotOS is a very good base for Docker on Raspberry Pi, and I also used it for my first Raspberry Pi Kubernetes Cluster, I searched for a 64bit variant of HypriotOS. I found this Github project by Dieter Reuter, which offers a HypriotOS image with 64bit support. For flashing this image to a MicroSD card I could use the original HypriotOS Flash Tool without any problems.

After the image was flashed, my Raspberry Pis started without any problems. Next I configured basic settings on all pis like user, timezone, hostname and updated all installed packages.

Kubernetes Setup

After the basic configuration was done, I followed the Kubernetes documentation for installing kubeadm, kubectl and the kubelet service. After everything was installed successfully, I set up the cluster with kubeadm. As Pod Network Plugin, I decided to give Calico a try. After downloading the Calico Manifest, some configuration (POD Network), I fed the configuration into the cluster with kubectl apply. After ~10 minutes of waiting and a temporary system load of > 20, everything was up and running. Not it’s time to join the other nodes into the cluster. After additional 5 minutes, kubectl get nodes reported all my Raspberry Pis to be up and running 🙂

Ansible Role for tinc VPN

When setting up Kubernetes clusters, it makes sense for the individual nodes of Kubernetes to live in the same private network. If Kubernetes is set up on bare metal machines from suppliers such as Hetzner, it may not necessarily be possible to set up a common network of this kind natively. This is where tinc comes in: it makes it very easy to set up a virtual network across all participating nodes. To keep the configuration of tinc parallel to that of Kubernetes (I use Kubespray for my Kubernetes setup), I developed an Ansible Role for tinc VPN and made it available on GitHub.

Features

  • Installing and setting up tinc VPN service
  • In-place private key generation (private keys are never copied)
  • Support for additional nodes where host machines are not covered by the playbook
  • Support for custom routes for the VPN interface
  • Support for joining existing bridge interfaces on the host machine
  • Custom scripting for up/down hook scripts

Setup

For setup instructions or a tutorial how to use my Ansible Role for tinc VPN please check the README. It always contains the up-to-date instructions for using this role and will be updated, if new features come up.

Raspberry Pi Kubernetes Cluster

In order to gain experience with a Kubernetes cluster or to be able to experiment with it, a functioning cluster is required. Since most conceptual challenges do not require a high performance test cluster, it is also sufficient to build a smaller and therefore more cost-effective one. For this reason I decided to set up a Raspberry Pi Kubernetes Cluster for testing purposes.

Shopping List

If the Raspberry Pis are not to be connected via WLAN but cable, the corresponding network components are also required:

Set up

The website of Hypriot has a very good tutorial how to set up a Kubernetes cluster with Raspberry Pi boards: https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/. If you need some configuration examples (executable on a Raspberry Pi Kubernetes Cluster) please check out my GitHub repository with configuration examples: https://github.com/MatthiasLohr/kubernetes-rpi-examples.