Du möchtest deine Applikation auf Kubernetes betreiben? Dir und deinen Teammitgliedern fehlt allerdings die Erfahrung damit? Kein Problem, Kubernetes ist relativ neu auf dem Markt und zudem noch sehr komplex. Hinzu kommt, dass das Betreiben eines Kubernetes Clusters eine andere Herausforderung ist, als Kubernetes als Plattform zu nutzen.
Mit Tech4Hosting Kubernetes (GSK) bieten wir dir einen Managed Kubernetes Service an, sodass du dich um den Betrieb deiner Applikation kümmern kannst und nicht um das Cluster selbst.
In diesem Tutorial erstellen wir einen GSK Cluster, konfigurieren die Kommandozeilen-Tools und installieren ein WordPress auf dem GSK. Viel Spaß!
Einen GSK Cluster erstellen
Wie immer legen wir viel Wert auf eine möglichst einfache und effiziente Bedienbarkeit, daher ist auch das Erstellen eines GSK gewohnt einfach. Als erstes musst du dich natürlich in unser Tech4Hosting Panel einloggen. In der linken Navigationsleiste wählst du dann das schon bekannte Kubernetes-Icon aus.
Jetzt erstellst du den Service und bekommst ein Dialogfenster angezeigt, in dem du ein paar einfache Konfigurationen vornehmen kannst.
Gib deinem Cluster einen Namen und passe die Konfiguration an. Für das Beispiel reichen die oben abgebildeten Einstellungen völlig aus. Diese kannst du auch nachher anpassen.
Nun erstelle das GSK Cluster. Das dauert ungefähr 5-7 Minuten. Die Zeit nutzen wir und richten derweil die Kommandozeilen-Tools ein.
Zugriff aufs GSK Cluster einrichten
Um mit dem GSK Cluster bequem und einfach interagieren zu können installieren wir jetzt kubectl, helm und gscloud.
kubectl – Kubernetes CLI
Da ich auf einem Linux System unterwegs bin, sind folgende Schritte darauf ausgelegt.
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
Für andere Systeme verweise ich auf die offizielle Dokumentation von Kubernetes selbst:
- Install and Set Up kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl/
- Installieren und konfigurieren von kubectl https://kubernetes.io/de/docs/tasks/tools/install-kubectl/
Helm – der Kubernetes Packet Manager
Da wir wahrscheinlich noch auf das Cluster warten, installieren wir schnell noch Helm. Helm ist eine Art Paketmanager, mit dem wir nachher WordPress installieren werden. Wenn man gerade mit Helm startet, sollte man auf jeden Fall Helm 3 benutzen.
Hier wieder mein Installationsverlauf mit Verweis auf die offizielle Dokumentation:
Geh auf GitHub Releases für die letzte stable Helm 3 Version. Download Helm 3 für die jeweilige Architektur, entpacken und dann noch in meinen Pfad verschieben:
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
tar -xzf helm-v3.2.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
gscloud – Tech4Hosting CLI
Wir von Tech4Hosting entwickeln mit gscloud ein Kommandozeilen-Tool, mit dem du mit Tech4Hosting interagieren kann. Warum brauchen wir jetzt ein weiteres Tool, um mit Kubernetes zu agieren? Würde nicht die kubeconfig ausreichen? Ja, du kannst jetzt ins Panel gehen und dir die kubeconfig für deinen GSK Cluster herunterladen und schon loslegen.
Allerdings ist das Clientzertifikat in der kubeconfig nur 3 Tage gültig, da dies nicht widerrufen werden kann. Damit wir nicht alle 3 Tage ins Panel müssen und eine neue kubeconfig herunterladen müssen, können wir gscloud so einrichten, dass es beim Ablauf automatisch das Zertifikat erneuert, wenn wir kubectl nutzen.
Holt euch dafür den Downloadlink für eure Architektur hier.
gscloud installieren
wget https://github.com/Tech4Hosting/gscloud/releases/download/v0.3.0-beta/gscloud_0.3.0-beta_linux_amd64.zip
unzip gscloud_0.3.0-beta_linux_amd64.zip
sudo mv gscloud_0.3.0-beta_linux_amd64 /usr/local/bin/gscloud
gscloud konfigurieren
Wir richten gscloud nun ein, da wir damit die kubeconfig sehr einfach generieren können.
Hiermit erstellen wir eine config für gscloud:gscloud make-config
Das sieht dann so aus:
cat /home/${USER}/.config/gscloud/config.yaml
Im Panel unter API-Keys kannst du dir die User-UUID kopieren und einen API-Token erstellen. Diese beiden kopierst du in die gscloud config. Die kubeconfig kannst du dir nun mit folgendem Befehl generieren:
gscloud kubernetes cluster save-kubeconfig --credential-plugin --cluster CLUSTER-UUID
Die Cluster-UUID bekommst du im Panel angezeigt, wenn du auf dein GSK Cluster auswählst.
Mit dem GSK Cluster arbeiten
Das GSK Cluster ist provisioniert, alle Kommandozeilen-Tools sind eingerichtet. Jetzt kannst du anfangen mit dem Cluster zu interagieren. Zuerst schauen wir uns alle Nodes an:
kubectl get nodes
Dann schauen wir, welche Pods auf dem GSK Cluster laufen:
kubectl get pods --all-namespaces
WordPress mit Helm installieren
Helm ist der Paketmanager für Kubernetes. Viele bekannte Anbieter bieten ihre Kubernetes YAML Dateien als Helm Chart an. Es gibt momentan 2 Hubs auf denen man Helm Charts finden kann.
Jetzt suchst du nach “Wordpress” und siehst mehrere Anbieter.
Wir nehmen das Helm Chart “bitnami/wordpress”
.
Mit “helm repo list”
kann man prüfen, ob man das Repository schon konfiguriert hat. Bei einer frischen Installation von Helm 3 sollte kein Repository vorhanden sein. Mit folgendem Befehl fügen wir das Repository von bitnami hinzu:
helm repo add bitnami https://charts.bitnami.com/bitnami
Kurze Kontrolle mit helm repo list
Nun ist das Repository für Helm verfügbar. Als nächstes wird ein namespace erstellt in dem wir unsere WordPress Ressourcen deployen wollen.
kubectl create namespace wordpress
Im letzten Schritt deployen wir mit Helm das WordPress Chart. Hierfür belassen wir es bei den Standardwerten, da diese für unser Beispiel ausreichen.
helm install test-wordpress bitnami/wordpress --version 9.4.2 --namespace wordpress
Die Standardwerte eines Helm Charts werden für gewöhnlich im README.md gepflegt und sind auch im Hub einsehbar: https://hub.kubeapps.com/charts/bitnami/wordpress
Im Code des Helm Charts selbst sind die Standardwerte in der values.yaml des Helm Charts zu finden: https://github.com/bitnami/charts/blob/master/bitnami/wordpress/values.yaml
Für uns sind folgende Parameter wichtig:
service.type Kubernetes Service type LoadBalancer
Damit wird in dem GSK Cluster ein LoadBalancer erstellt, der die WordPress Installation direkt von außen erreichbar macht.
kubectl get svc --namespace wordpress
original
Wir sehen in unserem Beispiel, dass der WordPress Service mit der externen IP http://45.12.48.144/ erreichbar ist.
Im WordPress Helm Chart sind folgende Werte für persistente Datenhaltung wichtig:mariadb.master.persistence.enabled true
mariadb.master.persistence.size 8Gi
persistence.enabled true
persistence.size 10Gi
In dem GSK Cluster werden dadurch automatisch Persistent Volumes und Persistent Volume Claims angelegt:
kubectl get pvc -n wordpress
kubectl get pv
Mit GSK einen Kubernetes Cluster erstellen
Mit einem Tech4Hosting Kubernetes Cluster haben wir in Windeseile ein gemanagtes Kubernetes Cluster erstellt. Funktionen wie ein LoadBalancer und Storage Volumes sind direkt integriert und machen den Einstieg in die komplexe Kubernetes Welt sehr einfach.