Einsatz von Helm Charts auf Magnum Kubernetes-Clustern auf der EO-Lab FRA1-1 Cloud
Kubernetes ist eine robuste und erprobte Umgebung für die Ausführung von Cloud-Anwendungen und Diensten. Dennoch kann es zeitaufwändig sein, alle für eine produktionsreife Bereitstellung erforderlichen Ressourcen manuell bereitzustellen. In diesem Artikel wird Helm als Paketmanager für Kubernetes vorgestellt. Mit ihm können Sie komplexe Kubernetes-Anwendungen, die aus Code, Datenbanken, Benutzeroberflächen und mehr bestehen, schnell bereitstellen.
Was wir behandeln werden
Hintergrund - Wie Helm funktioniert
Helm installieren
Hinzufügen eines Helm-Repositorys
Helm-Diagramm-Repositories
Helm-Diagramm auf einem Cluster bereitstellen
Anpassen des Diagrammeinsatzes
Voraussetzungen
No. 1 Konto
Sie benötigen einen Hosting-Konto mit Zugriff auf die Horizon-Schnittstelle: https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.
Nr. 2 Grundlegendes Verständnis von Kubernetes
Wir gehen davon aus, dass Sie ein grundlegendes Verständnis von Kubernetes, seinen Begriffen und Arbeitsweisen haben. Sie zu erläutern, würde den Rahmen dieses Artikels sprengen.
Nr. 3 Ein Cluster erstellt auf FRA1-1 Cloud
Um die Helm-Installation und -Einrichtung in einer realen Umgebung auszuprobieren, erstellen Sie mit OpenStack Magnum Erstellen eines Kubernetes-Clusters mit EO-Lab OpenStack Magnum einen Cluster auf der FRA1-1 Cloud.
Nr. 4 Aktive Verbindung zur Cloud
Foder Kubernetes, d.h. ein kubectl Kommandozeilentool ist installiert und kubeconfig verweist auf einen Cluster. Anweisungen finden Sie in diesem Artikel So verwenden Sie die Befehlszeilenschnittstelle für Kubernetes-Cluster auf EO-Lab OpenStack Magnum.
Nr. 5 Zugang zu Ubuntu zum Ausführen von Code
Die Codebeispiele in diesem Artikel setzen voraus, dass Sie Ubuntu 20.04 LTS oder ein ähnliches Linux-System verwenden. Sie können sie ausführen auf
Windows mit Linux-Subsystem,
echten Desktop Ubuntu-Betriebssystem oder Sie können auch
eine virtuelle Maschine in der EO-Lab FRA1-1 Cloud erstellen und die Beispiele von dort aus ausführen. Diese Artikel bieten technisches Know-how, wenn Sie es benötigen:
Wie man eine Linux-VM erstellt und vom Windows-Desktop aus darauf zugreift auf EO-Lab
Wie man eine Linux-VM erstellt und von einer Linux-Kommandozeile auf EO-Lab zugreift
Background - How Helm works
Eine übliche Sequenz für die Bereitstellung einer Anwendung auf Kubernetes umfasst Folgendes:
ein oder mehrere containerisierte Anwendungsimages in einer Image-Registry verfügbar zu haben
Bereitstellung einer oder mehrerer Kubernetes-Ressourcen in Form von YAML-Manifestdateien auf einem Kubernetes-Cluster
Die Kubernetes-Ressourcen verweisen direkt oder indirekt auf die Container-Images. Sie können auch zusätzliche Informationen enthalten, die für die Ausführung dieser Images erforderlich sind. In einem sehr minimalen Setup würde z. B. ein NGINX-Container-Image mit einer Kubernetes-Ressource Deployment erstellt und über eine Service-Ressource in einem Netzwerk bereitgestellt werden. Eine produktive Kubernetes-Bereitstellung einer größeren Anwendung erfordert in der Regel eine Reihe von mehreren Kubernetes-Ressourcen, die auf dem Cluster bereitgestellt werden.
Für jedes Standard-Deployment einer Anwendung auf Kubernetes (z. B. eine Datenbank, ein CMS-System, eine Überwachungsanwendung) sind die Boilerplate-YAML-Manifeste meist gleich und unterscheiden sich nur durch die zugewiesenen spezifischen Werte (z. B. Ports, Endpunkte, Image-Registry, Version usw.).
Helm automatisiert daher den Prozess der Bereitstellung einer Kubernetes-Installation. Die für das Deployment verantwortliche Person muss nicht jede Ressource von Grund auf neu schreiben oder die Verbindungen zwischen den Ressourcen berücksichtigen. Stattdessen lädt er ein Helm-Diagramm herunter, das vordefinierte Ressourcenvorlagen enthält. Die Werte für die Vorlagen werden aus einer zentralen Konfigurationsdatei namens values.yaml gelesen.
Helm-Charts sind so konzipiert, dass sie eine breite Palette von Anwendungsfällen abdecken, die für den Einsatz einer Anwendung erforderlich sind. Die Anwendung kann dann einfach mit wenigen Befehlen innerhalb von Sekunden auf einem Cluster gestartet werden. Einige spezifische Anpassungen für einen individuellen Einsatz können dann leicht angepasst werden, indem die Standarddatei values.yaml überschrieben wird.
Helm installieren
Sie können Helm auf Ihrem eigenen Entwicklungsrechner installieren. Laden Sie zur Installation die Installationsdatei von der Helm-Veröffentlichungsseite herunter, ändern Sie die Dateiberechtigung und führen Sie die Installation aus:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
Sie können die Installation überprüfen, indem Sie:
$ helm version
Für andere Betriebssysteme verwenden Sie den Link zum Herunterladen der Helm-Installationsdateien und verfahren analog.
Hinzufügen eines Helm-Repositorys
Helm-Diagramme werden über Repositories verteilt. Ein einzelnes Repository kann zum Beispiel mehrere Helm-Diagramme eines bestimmten Anbieters hosten. Für diesen Artikel fügen wir das Bitnami-Repository hinzu, das die Versionen mehrerer nützlicher Helm-Diagramme enthält, z. B. Redis, Grafana, Elasticsearch oder andere. Sie können es mit folgendem Befehl ausführen:
helm repo add bitnami https://charts.bitnami.com/bitnami
Überprüfen Sie dann die verfügbaren Diagramme in diesem Repository, indem Sie sie ausführen:
helm search repo
Das folgende Bild zeigt nur einen Anfang aller verfügbaren Anwendungen aus dem bitnami-Repository, die mit Helm installiert werden können:

Helmkarten-Repositories
Im obigen Beispiel wussten wir, wo wir ein Repository mit Helm-Diagrammen finden können. Es gibt noch weitere Repositorys, die normalerweise auf GitHub oder ArtifactHub gehostet werden. Werfen wir einen Blick auf die apache-Seite in ArtifactHUB:

Klicken Sie auf die Option DEFAULT VALUES (gelb hervorgehoben) und sehen Sie den Inhalt der Standarddatei values.yaml.

In dieser Datei (oder in zusätzlichen tabellarischen Informationen auf der Diagrammseite) können Sie überprüfen, welche Parameter für die Anpassung aktiviert sind und welche ihre Standardwerte sind.
Prüfen Sie, ob kubectl Zugriff auf den Cluster hat
Um fortzufahren, überprüfen Sie, ob Ihre Umgebungsvariable KUBECONFIG exportiert wurde und auf die kubeconfig-Datei eines laufenden Clusters verweist (siehe Voraussetzung Nr. 4). Falls erforderlich, exportieren Sie diese Umgebungsvariable:
export KUBECONFIG = <location-of-your-kubeconfig-file>
Wenn kubectl ordnungsgemäß installiert ist, sollten Sie nun in der Lage sein, die Knoten Ihres Clusters aufzulisten:
kubectl get nodes
Dies dient als Bestätigung, dass Sie Zugriff auf den Cluster haben.
Bereitstellen eines Helm-Diagramms auf einem Cluster
Da wir nun wissen, wo wir Repositories mit Hunderten von Diagrammen zur Auswahl finden, können wir eines davon in unserem Cluster einsetzen.
Wir werden ein Apache-Webserver-Helm-Diagramm installieren. Um es mit einer Standardkonfiguration zu installieren, müssen wir einen einzigen Befehl ausführen:
helm install my-apache bitnami/apache
Beachten Sie, dass my-apache sich auf die konkrete Version bezieht, d. h. auf die konkrete Bereitstellung, die auf unserem Cluster läuft. Wir können diesen Namen nach Belieben anpassen. Nach dem Ausführen des obigen Befehls wird das Diagramm bereitgestellt und es werden einige Informationen über unsere Version bereitgestellt:
NAME: my-apache
LAST DEPLOYED: Tue Jan 31 10:48:07 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: apache
CHART VERSION: 9.2.11
APP VERSION: 2.4.55
....
Infolgedessen werden mehrere Kubernetes-Ressourcen auf dem Cluster bereitgestellt. Eine davon ist der Kubernetes-Dienst, der standardmäßig als LoadBalancer-Typ bereitgestellt wird. Auf diese Weise wird Ihre Apache-Bereitstellung sofort mit einer in der Zelle <EXTERNAL-IP> verfügbaren schwebenden IP am Standardport 80 öffentlich zugänglich gemacht:
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
my-apache LoadBalancer 10.254.147.21 64.225.131.111 80:32654/TCP,443:32725/TCP 5m
Beachten Sie, dass es einige Minuten dauern kann, bis die freie IP-Generierung erscheint. Nach dieser Zeit, wenn Sie die freie IP in den Browser eingeben, wird der Dienst im Internet verfügbar sein:

Anpassen der Chart-Bereitstellung
Wir haben gerade gesehen, wie schnell es war, ein Helm-Diagramm mit den Standardeinstellungen einzusetzen. Bevor Sie das Diagramm in der Produktion einsetzen, müssen Sie in der Regel einige Einstellungen anpassen, um Ihren Anforderungen gerecht zu werden.
Um den Einsatz anzupassen, wäre ein schneller, einfacher Ansatz die Bereitstellung von Flags in der Helm-Befehlszeile, um bestimmte Parameter anzupassen. Das Problem dabei ist, dass jede Kommandozeilenoption 10-20 verfügbare Flags hat, so dass dieser Ansatz auf lange Sicht vielleicht nicht der beste ist.
Ein universellerer Ansatz besteht jedoch darin, die Datei values.yaml anzupassen. Dafür gibt es zwei Hauptmethoden:
- Kopieren der gesamten values.yaml-Datei
Hier passen Sie nur den Wert eines bestimmten Parameters an.
- Neue values.yaml-Datei von Grund auf neu erstellen
Sie würde nur die angepassten Parameter mit ihren überschriebenen Werten enthalten.
In beiden Fällen bleiben alle Standardwerte, mit Ausnahme der überschriebenen Werte, erhalten.
Als Beispiel für die Anpassung des Diagramms wollen wir den Apache-Webserver auf Port 8080 statt auf dem Standardport 80 bereitstellen. Wir werden den zweiten Ansatz verwenden und eine minimale Datei my-values.yaml für die Überschreibungen bereitstellen. Der Inhalt dieser Datei sieht wie folgt aus:
my-values.yaml
service:
ports:
http: 8080
Achten Sie bei diesen Anpassungen auf die Einrückung und die YAML-Struktur, die auch die jeweiligen übergeordneten Blöcke im Baum angibt.
Eine weitere Anpassung, die wir vornehmen werden, ist die Erstellung eines dedizierten Namespace apache für unser Helm-Release und die Anweisung an Helm, diesen Namespace zu verwenden. Eine solche Anpassung ist durchaus üblich, um die Artefakte zu trennen, die sich auf eine bestimmte Version/Applikation beziehen.
Wenden Sie die genannten Anpassungen mit dem folgenden Befehl auf die Veröffentlichung my-custom-apache an:
helm install my-custom-apache bitnami/apache --values my-values.yaml --namespace custom-apache --create-namespace
In ähnlicher Weise wie im vorherigen Beispiel wird der Dienst ausgesetzt. Um auf die floating IP des Dienstes zuzugreifen, verweisen Sie diesmal auf den neu erstellten Namespace custom-apache:
kubectl get services -n custom-apache
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-custom-apache LoadBalancer 10.254.230.171 64.225.135.161 8080:31150/TCP,443:30139/TCP 3m51s
Wir können sehen, dass die Anwendung nun einem neuen Port 8080 zugewiesen ist, der auch im Browser überprüft werden kann:

Was als nächstes zu tun ist
Einsatz anderer nützlicher Dienste mit Helm-Diagrammen: Argo Workflows, JupyterHub, Vault , die neben vielen anderenverfügbar sind.
Denken Sie daran, dass ein mit Helm eingesetztes Diagramm letztendlich nur ein Satz von Kubernetes-Ressourcen ist. Normalerweise gibt es in den verfügbaren Open-Source-Diagrammen eine beträchtliche Menge an konfigurierbaren Einstellungen. Genauso gut können Sie andere Parameter auf einem bereits bereitgestellten Cluster bearbeiten und sogar die Vorlagen an Ihren speziellen Anwendungsfall anpassen.
Der folgende Artikel zeigt, wie man das JetStack-Repositorium verwendet, um CertManager zu installieren, mit dem man HTTPS-Dienste in der Kubernetes-Cloud bereitstellen kann: /kubernetes/Deploying-HTTPS-Services-on-Magnum-Kubernetes-in-{{ brand_name_cloud }}-Cloud