microK8s
microK8s
Das ist eine Lightweight Kubernetes Lösung, die von Canonical entwicklet wird. Die ansonsten schwer zu managegende Control-Plane (die man auch bei AWS-EKS einkaufen kann) ist kommt out-of-the-box:
"MicroK8s is the easiest way to consume Kubernetes as it abstracts away much of the complexity of managing the lifecycle of clusters." (Statement)
Motivation
Für die Einarbeitung in Kubernetes wollte ich eine möglichst billige und schnelle Lösung haben. Ein Cluster via AWS EKS zu betreiben ist sicherlich der Porsche, aber kommt auch mit entsprechenden Kosten daher (pro Tag kommen da schon mal 10 Euro zusammen ... ohne, dass Last drauf ist) und deshalb sollte man ihn - wenn ausschließlich zum Training verwendet - immer wieder zerstören ... der Aufbau und Abbau kann mit (Amazon EKS) aber schon mal eine Stunde dauern (und das ist schon die schnelle Variante).
Da ich sowieso ein Freund von Raspberry Pi bin, finde ich ein den Pi-Cluster sehr interessant. Hier könnte man auch langfristig sein eigenes kleines billiges Datacenter aufbauen.
Getting started
Installation
Auf meinem Ubuntu verwende ich folgende Befehle
sudo apt update
sudo snap install microk8s --channel=latest/stable --classic
sudo usermod -a -G microk8s vagrant
mkdir -p ~/.kube
sudo chown -R vagrant ~/.kube
Einmal abmelden und neu anmelden (damit der User vagrant
auch tatsächlich in der Gruppe micork8s
ist) und dann noch dieses Kommando nachschießen:
Start
microk8s start
Konfiguration
Microk8s kommt mit einem Plugin-Ansatz daher ... die Plugins muss man entsprechend einschalten
microk8s enable rbac dns storage ingress
Microk8s kommt zwar schon gebundelt mit einem eigenen kubectl
(microk8s.kubectl
), will neben dem Microk8s auch einen "normalen" Kubernetes Cluster managen, dann wird man das offizielle kubectl
verwenden wollen.
Ich empfehle, das
microk8s.kubectl
nicht zu verwenden. Stattdessen das normalekubectl
permicrok8s config > ~/.kube/config
umkonfigurieren. Dann funktioniert auch die Auto-Completion vonkubectl
einfach out-of-the-box auch für Microk8s.
Konfiguration kubectl
Mit
microk8s config > ~/.kube/config-microk8s
erstellt man die Konfiguration und macht sie per
export KUBECONFIG=~/.kube/config-microk8s
zur aktuellen, so dass kubectl get pods
gegen das MicroK8s-Cluster läuft.
Ingress-Controller
Über
microk8s enable ingress
wird der Ingress-Controller im Microk8s enabled und gestartet. Er befindet sich in einem separaten Namespace.
ACHTUNG: man benötigt hierfür zudem den metallb Load-Balancer, der VOR dem Ingress-Controller sitzt
metallb - Load-Balancer
microk8s enable metallb:192.168.100.40-192.168.100.49
Die IP-Range definiert, welche IP-Adressen die Load-Balancer erhalten werden (meist reichen in MicroK8s weniger als 10 IP-Adressen). Da die IP-Adressen im gleichen Netzwerk wie der MicroK8s-Knoten (= localhost ... bei MicroK8s der einzige Knoten) liegen muss, kann man per k get nodes -o wide
herausfinden welche IP-Adresse localhost hat.
Vergleich zu anderen Lösungen
Ich habe mich für microK8s entschieden, weil
es mit Canonical einen renomierten Anbieter im Hintergrund hat (und hoffentlich noch eine Weile weiterentwickelt wird)
auf einem Raspberry Pi betrieben werden kann (ARM64 + minimale Hardware-Anforderungen)
mich dieser Vergleich überzeugt hat
Vanilla Kubernetes
Multi-Node Support
Minikube
Minikube unterstützt nur einen einzelnen Worker-Knoten ... ist somit kein echtes Cluster und somit stark eingeschränkt.
k3s
k3d
"k3d is a lightweight wrapper to run k3s (Rancher Lab’s minimal Kubernetes distribution) in docker. k3d makes it very easy to create single- and multi-node k3s clusters in docker, e.g. for local development on Kubernetes." (Homepage)
Der Vorteil ist, dass man Cluster-Nodes als Docker-Container abbildet und somit auch lokal auf einem Laptop eine Multi-Node-Cluster starten kann.
kind
... kind
kommt in Docker-Desktop schon vorinstalliert.
Last updated
Was this helpful?