k3s

Kubernets wird in vielen Bereichen eingesetzt, um Applikationen automatisiert bereit zu stellen, zu skalieren und zu verwalten. Oft kommen dabei die großen Cloudanbieter zum Einsatz, da diese die Kubernetes Infrastruktur bereitstellen, doch ihr könnt euch auch zu Hause ein Kubernetes Cluster mit Raspberry Pis (und anderen Computern) aufsetzen. Es gibt dafür k3s welches eine leichtgewichtige Kubernetes Lösung ist, die unteranderem für den Raspberry Pi ab Version 2 verfügbar ist. Wie ihr damit ein Kubernetes Cluster aufsetzt erkläre ich im Folgenden.

Zunächst ein kurze Zusammenfassung meiner Komponenten. Ich verwende einen Raspberry Pi 4 (mit 4GB) als k3s-server, einen Raspberry Pi 3 als k3s-node und meinen normalen Desktop-PC als Client, um auf das Kubernetes Cluster zuzugreifen. Der k3s-server wird also das Kubernetes Cluster mit dem auch der Client kommuniziert und der k3s-node wird wie der k3s-server auch als Maschinen dienen, wo die Kubernetes Sachen (Pods, Persistant Volume, etc. ) betrieben werden. Es ist von Vorteil sich im Voraus mal ein Tutorial anzuschauen, um die Begrifflichkeiten zu kennen.

Als erstes wird der k3s-server aufgesetzt. Ich habe dazu ein aktuelles Raspberry Pi OS (Buster) verwendet, bei dem ich über raspi-config den Hostname auf k3s-server geändert habe und ssh aktiviert habe. Anschließend habe ich folgende Befehle ausgeführt.

# Run install script
curl -sfL https://get.k3s.io | sh -

# enable cgroup_memory
sudo sed -i -e 1's/.*/cgroup_enable=memory &/' /boot/cmdline.txt

# Enabling legacy iptables on Raspbian Buster
sudo iptables -F
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo reboot

Anschließend konnte ich über sudo systemctl k3s status sehen, dass der k3s Server erfolgreich installiert wurde.

Als nächstes setze ich jetzt den k3s-node auf. Dazu benötigen wir einen Token, der auf dem k3s-server automatisch angelegt wird. Dazu folgenden Befehl eingeben und den Token irgendwo speichern, damit ihn ihr später zur Hand habt.

sudo cat /var/lib/rancher/k3s/server/node-token

Jetzt kommen wir zur Installation des k3s-node. Ich verwende dafür wieder das aktuelle Raspberry Pi OS (Buster), ändere über raspi-config den Hostname auf k3s-node und aktiviere ssh. Im folgenden Codeblock müsst ihr dann euren Token (anstatt <TOKEN>) einfügen und eventuell k3s-server ersetzen, falls ihr einen anderen Hostname für den Server verwendet.

curl -sfL https://get.k3s.io | K3S_URL=https://k3s-server:6443 K3S_TOKEN=<TOKEN> sh -

# enable cgroup_memory
sudo sed -i -e 1's/.*/cgroup_enable=memory &/' /boot/cmdline.txt

# Enabling legacy iptables on Raspbian Buster
sudo iptables -F
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo reboot

Nach dem Neustart, solltet ihr jetzt, wenn ihr sudo kubectl get nodes beim k3s-server eingebt eine ähnliche Ausgabe wie folgt erhalten. Damit seht ihr, dass in eurem Kubernetes Cluster zwei Nodes vorhanden sind.

NAME         STATUS   ROLES    AGE     VERSION
k3s-server   Ready    master   9d      v1.18.8+k3s1
k3s-node     Ready    <none>   7d17h   v1.18.8+k3s1

Zum Schluss konfiguriere ich noch meinen normalen Desktop-PC mit Debian 10, damit ich von diesem aus mein Kubernetes Cluster steuern kann. Dazu kopiere ich zunächst die Konfiguration des k3s-server auf meinen PC.

sudo scp /etc/rancher/k3s/k3s.yaml lookslikematrix@lookslikematrix-desktop:/home/lookslikematrix/Downloads/

Anschließend installiere ich das Kommandozeilentool kubectl, verschiebe die Konfiguration nach ~/.kube/config und ändere 127.0.0.1 durch k3s-server (alternativ die IP-Adresse) ab.

# install kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
# copy and modify config
mkdir ~/.kube
mv /home/lookslikematrix/Downloads/k3s.yaml ~/.kube/config
sed -i 's/127.0.0.1/lookslikematrix-k3sserver/g' ~/.kube/config

Wenn alles funktioniert hat, dann könnt ihr nun mit einem kubectl get nodes auf eurem PC sehen, dass ihr Zugriff auf die zwei Nodes habt. Jetzt könnt ihr mit eurem Kubernetes Cluster herum spielen. Ich hoffe ich konnte euch helfen. Wenn ihr Fragen oder Anregungen habt, dann freue ich mich über eine Mail. Vermutlich werde ich mich gleich noch dran machen einen Blogeintrag über das Betreiben einer Applikation in diesem Cluster zu machen, damit das eine runde Sache wird.