Die Minikube-Webseite zeigt, wie die Installation bei RPM-basierten Distributionen oder bei ARM funktioniert. Zudem erklärt sie die Installation eines statischen Binaries [5] sowie das Setup unter Windows und Mac OS. Verwenden Sie Pi OS oder eine andere Distribution mit XFCE als Desktop, installieren Sie für eine korrekte Ausgabe im Terminal zusätzlich die Pakete gnome-terminal sowie fonts-noto-color-emoji.
Minikube starten
Nun folgt der erste Start des Clusters mit nur einem Knoten mittels des Aufrufs minikube start. Dabei erkennt das System zunächst das von uns vorher installierte Virtualbox, da es der einzige der unterstützten “Treiber” in unserer Installation ist. Existiert ein weiterer Hypervisor, so geben Sie minikube start --driver=virtualbox ein. Möchten Sie ausschließlich Virtualbox verwenden, legen Sie das mit minikube config set driver virtualbox fest. Verwenden Sie dagegen wechselnde Treiber, so geben Sie diesen jeweils beim Start mit an (Abbildung 2).

Abbildung 2: Um genügend Ressourcen bereitzustellen, geben Sie beim ersten Start von Minikube möglichst viel RAM und CPU-Kerne an. Die Emojis im Gnome-Terminal stammen vom fonts-noto-color-emoji.
Mit dem Parameter --memory=n --cpu=n legen Sie die zugewiesenen Ressourcen fest. Da Minikube standardmäßig nur 2 GByte RAM und eine CPU verwendet, sollten Sie jeweils die maximal mögliche Menge bereitstellen, ohne dabei dem darunterliegenden Betriebssystems die Ressourcen gänzlich zu entziehen (Abbildung 3). RAM geben Sie dabei in MByte an. Für die Zuteilung von 4 GByte verwenden Sie beispielsweise memory=4096. Möchten Sie immer die gleichen Werte verwenden, legen Sie diese in der Konfiguration fest. Dazu dient der Befehl minikube config set; alle Optionen zeigt minikube config --help.

Abbildung 3: Sollten Sie beim ersten Start dieses Fehlerbild erhalten, erkannte Minikube den gewünschten Treiber nicht automatisch. Hier gilt es, den Startbefehl entsprechend zu erweitern.
Im nächsten Schritt lädt das Setup automatisch ein Image von Minikube und Kubernetes herunter und startet es in einer VM, was je nach Hardware und Internet-Anbindung einige Minuten dauert. Nun steht die Grundlage, um mit dem Cluster via Kubectl zu interagieren. Alle dazu nötigen Befehle vermittelt ein Cheat-Sheet [6].
Der Befehl kubectl get pods -A listet alle laufenden Pods [7] samt deren Aktivierungszustand auf (Abbildung 4). Das -A am Ende des Befehls steht für den standardmäßig aktuellen Namensraum kube-system (Abbildung 5). Möchten Sie einen anderen Namensraum abbilden, geben Sie ihn per --namespace= an. Der Befehl kubectl get namespaces listet die erstellten Namensräume auf.

Abbildung 4: Der Befehl kubectl get zeigt den Status von Pods, Diensten, Namensräumen und vielem mehr.

Abbildung 5: Mit kubectl edit pod Name passen Sie Pods an. Den Wert, der in die eckige Klammer muss, zeigt kubectl get pods -A an.
Steht in der Pod-Liste unter Status noch vereinzelt Pending, liegt das am Raspberry Pi, der für das Einrichten der Container etwas Zeit benötigt. Nach ein oder zwei Minuten sollten aber alle Pods den Status Running erreichen.
Minikube beschränkt sich wie MicroK8s nicht auf die Kommandozeile, sondern bietet ebenfalls ein Dashboard im Browser. Der Weg dorthin gestaltet sich noch einfacher als bei Canonicals Kubernetes-Umsetzung: Bei Minikube genügt die Eingabe von minikube dashboard. Die Anwendung erstellt im Hintergrund in Virtualbox die Netzwerk-Bridge von der VM zum Browser in Ubuntu und öffnet dort das Dashboard (Abbildung 6).

Abbildung 6: Neben der Administration auf der Kommandozeile mit Kubectl lassen sich Kubernetes und seine Abkömmlinge auch übersichtlich per Dashboard verwalten.
Wie bereits im ersten Artikel (Sie finden ihn in den zu diesem Artikel gehörigen Downloads) führen wir auch diesmal einen “Hello-World”-Test durch, der in diesem Fall “Hello-Minikube” heißt (Listing 2).
Listing 2
Hello-Minikube
# kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 # kubectl expose deployment hello-minikube --type=NodePort --port=8080 # kubectl get services hello-minikube
Kubernetes per Script
Um Kubernetes selbst nicht ganz außen vor zu lassen, setzen wir zum Abschluss skriptgesteuert eine selbst gehostete Nextcloud in Kubernetes auf [8]. Die beschriebene Methode lässt sich besonders einfach nachvollziehen: Sie lädt die YAML-Dateien, die die Dienste in Kubernetes erstellen, direkt von Github herunter. Dazu nutzen wir wiederum Ubuntu 20.10, das wir dazu neu installieren. Als Vorbereitung richten Sie die Pakete curl und git ein, die Ubuntu nicht automatisch installiert.
Im nächsten Schritt arbeiten Sie den ersten Befehlsblock “Setting up Docker & Kubernetes on Ubuntu” der Nextcloud-Anleitung [8] ab. Er beschreibt das Installieren und Aktivieren von Docker und Kubernetes sowie das Setup des Container-Netzwerktools Flannel [9]. Damit stehen die Grundlagen für das weitere Vorgehen.
Zwar beschreibt die Anleitung lediglich das Erstellen eines Clusters mit nur einem Knoten, weitere lassen sich aber jederzeit hinzufügen. Falls Sie das planen, sichern Sie jetzt den Befehl, der als Antwort auf den Befehl sudo kubeadm init --pod-network-cidr=10.244.0.0/16 folgte und mit kubeadm join beginnt. Um nachzuvollziehen, was der Cluster in den nächsten Schritten tut, setzen Sie in einem zusätzlichen Terminal als User den Befehl watch -n 10 kubectl get deployment,svc,pods,pvc,pv,ing ab.
Im nächsten Block der Anleitung, “Deployment + Service: MariaDB”, folgt das Herunterladen und Abarbeiten der YAML-Datei für MariaDB, wobei Sie Passwörter und Pfade per Texteditor anpassen müssen. Danach werden am Ende des Blocks die entsprechenden Dienste aufgesetzt. Nun geht es im dritten Block “Deployment + Service: Nextcloud:” an das Ausrollen von Nextcloud selbst. Auch hier nehmen Sie individuelle Anpassungen im Editor vor.
Das OMGWTFSSL-Docker-Image im nächsten Block (“Create self-signed certificates”) erstellt ein selbst ausgestelltes Zertifikat, was im lokalen Netz ausreicht. Der folgende Block “Deployment + Service: Nginx reverse Proxy” setzt zusätzlich Nginx als Reverse-Proxy auf [10], sodass auch HTTPS zur Verfügung steht. Auch hier passen Sie die Konfiguration des Webservers an Ihre Gegebenheiten an. Achten Sie dabei darauf, dass server_name im Template zweimal gesetzt ist (Listing 3).





