Verteilte Anwendungen paketieren und bereitstellen Helm – Paketverwaltung für Kubernetes
Anbieter zum Thema
Das Provisioning in Kubernetes kann sich bei mehreren Ressourcen schwierig gestalten, weil verschiedene YAML-Dateien notwendig sind. Helm vereinfacht die Bereitstellung auch in komplexen Szenarien vereinfachen.

Um Anwendungen in Kubernetes bereitzustellen, sind häufig verschiedene Abhängigkeiten, Pods, Container und andere Ressourcen notwendig. Tools zum Paketieren können nebenher die Installation und Einrichtung auch dieser Abhängigkeiten und noch mehr übernehmen.
Das Open-Souce-Tool Helm gehört zu den bekanntesten Lösungen, wenn es darum geht, Anwendungen für Kubernetes zu paketieren. Das Tool gehört als Projekt zu Kubernetes und damit auch zur Cloud Native Computing Foundation. Der Paketmanager lässt sich eng mit Kubernetes integrieren und erleichtert das Erstellen von Ressourcen und das Installieren von Anwendungen deutlich, vor allem bei komplexen Lösungen und umfassenden Kubernetes-Clustern.
Das sind die Funktionen von Helm
Helm verfügt im Grunde genommen über die gleichen Funktionen wie die Paketmanager der verschiedenen Programmiersprachen und Betriebssysteme. Mit Helm lassen sich daher auch Anwendungen inklusive der notwendigen Abhängigkeiten installieren. Daher lässt sich Helm in Kubernetes auf gleichem Weg nutzen wie „apt“ in Debian/Ubuntu oder „pip“ mit Python.
Das Aktualisieren bereits installierter Software ist mit Helm ebenfalls möglich. Hinzu kommt die Funktion zum Herunterladen und Installieren von Paketen aus Software-Repositories im Internet oder zum Betreiben eigener Repositories. Das Deinstallieren und auch Rollbacks sind mit Helm über Befehle in der Kommandozeile möglich, ohne einzelne Dateien eines Projektes mit kubectl zurückspielen zu müssen.
Helm stellt für seine Funktionen ein Terminal-Tool (helm) und eine Server-Komponente, die auf Anfragen dieses Tools wartet, zur Verfügung. Die Bereitstellung der Anwendungen übernimmt der Server-Part, das Suchen nach Paketen, in Helm auch „Charts“ genannt, erfolgt auf dem Client. Die Software muss dazu im Helm-Paketformat „Charts“ zur Verfügung gestellt werden. Jedes Paket besteht aus verschiedenen YAML-Dateien, zum Beispiel die Datei „chart.yaml“ inklusive Vorlagen, die Kubernetes lesen kann.
Die Vorlagen sind in der Programmiersprache Go geschrieben. Abhängigkeiten von Paketen sollten mit einer eigenen YAML-Datei gesteuert werden. Die Datei „requirements.yaml“ gehört dazu zum Stammverzeichnis eines Helm-Pakets. Die Standardwerte für Charts sind wiederum in der Datei „values.yaml“ gespeichert. Um Werte von Charts abzufragen, kann zum Beispiel „helm inspect values <Chart>“ verwendet werden.
Eigene Charts mit Helm erstellen
Eigene Charts lassen sich relativ leicht auf Basis bereits vorhandener Charts erstellen. Gibt es kein Chart, das den gewünschten Einstellungen entspricht, kann mit „helm create <Chartname>“ ein neues Chart kreiert werden. Dadurch erstellt Helm auch eine passende Verzeichnisstruktur mit den jeweiligen Standardwerten. Danach müssen nur noch „chart.yaml“ angepasst und die notwendigen Dateien und Vorlagen in die jeweiligen Verzeichnisse kopiert werden.
So läuft die Installation von Anwendungen mit Helm ab
Wer eine eigene Datei schreibt, kann deren Werte bei „helm install“ mitgeben, um die Konfiguration der Anwendung so durchzuführen, wie es in der Datei festgelegt ist. Sobald ein Chart installiert wird, handelt es sich bei der installierten Anwendung in Kubernetes um ein Release. Einstellungen der Releases können auch über die Datei „values.yaml“ eines Charts angepasst werden. Daher kann eine App auch aus verschiedenen Releases und Versionen bestehen, die wiederum über eine eigene „values.yaml“ besteht.
Helm nutzt zur Installation der Anwendung und der Erstellung der notwendigen Ressourcen, wie Pods und Container, seinen Serverpart. Dieser baut eine Verbindung zur Kubernetes-API auf. Wenn ein Chart installiert wird, nutzt Helm zunächst die Daten aus den Konfigurationsdateien. Zusätzlich erfolgt eine Kombination mit den Werten aus „values.yaml“ und der angegebenen, benutzerdefinierten Konfiguration.
Hier besteht auch die Möglichkeit mit dem Parameter „--set“ von „helm“ zu arbeiten. Dazu lassen sich Werte verwenden, die von den Standardwerten abweichen. Um fertige Charts aus dem Repository herunterzuladen und vor der Installation erst die notwendigen Dateien zu bearbeiten, kann ebenfalls Helm eingesetzt werden. Der Befehl dazu lautet zum Beispiel:
helm pull bitnami/mysql“
Danach befindet sich die Tar-Datei des Paketes im Verzeichnis und kann mit „ls“ angezeigt werden.
Die Tar-Datei lässt sich mit Helm auch gleich extrahieren:
helm pull --untar bitnami/mysql
Nach dem Extrahieren ist es auf diesem Weg auch möglich, die Dateien anzupassen, zum Beispiel die Datei „values.yaml“ von MySQL:
cat mysql/values.yaml
Mit diesen sehr flexiblen Möglichkeiten lassen sich ähnliche oder gleiche Anwendungen auf Basis unterschiedlicher Releases und damit verschiedenen Einstellungen betreiben. Dadurch können bei Fehlern in neuen Releases auch Rollbacks auf ältere Releases über die Konfigurationsdateien durchgeführt werden.
Helm-Repositories steuern
Verschiedene Helm-Pakete können in einem Netzwerk auch in einem Helm-Repository gespeichert werden. Dabei kann es sich um eine einfache HTTP-Seite handeln. Neben eigenen Repositories kann Helm auch auf Repository-Seiten im Internet zugreifen, zum Beispiel auf ArtifactHub.io.
Die einzelnen Charts werden im Repository als *.tar.gz-Datei gespeichert. Zusätzlich verfügt ein Repository über eine Datei „index.yaml“. Neben dem Standard-Repository können in Helm auch weitere Repositories hinzugefügt werden. Dazu kann der Befehle „helm repo add“ zum Einsatz kommen. Um zum Beispiel das Repository von MySQL anzubinden und MySQL zu installieren, können folgende Befehle verwendet werden:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-release bitnami/mysql
Nicht mehr benötigte Repositories lassen sich aus Helm auch leicht wieder entfernen zum Beispiel mit „helm repo remove bitnami“. Um die Repos zu durchsuchen, kann zum Beispiel der Befehl „helm search hub mysql“ oder „helm search repo mysql“ verwendet werden. Auf dieser Basis können auch verschiedene andere Charts gefunden und installiert werden. Ausführlichere Informationen zu einem Chart liefert:
helm inspect hub mysql
Für erste Tests können auch bereits Anwendungen im Cluster installiert werden, zum Beispiel mit „helm install myrelease stable/redis“. Informationen zu Bereitstellungen lassen sich dann wiederum mit „helm ls“ anzeigen. Der Befehl verbindet sich mit dem Serverpart in Kubernetes und zeigt die entsprechenden Informationen an.
Helm im Kubernetes-Cluster installieren
Die Installation von Helm auf einer Arbeitsstation kann mit einfachen Befehlen erfolgen. Die jeweils aktuelle Version von Helm ist auf der GitHub-Seite des Projektes zu finden. Die Installation erfolgt zum Beispiel mit:
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
Die Überprüfung der Installation von Helm kann anschließend mit „helm version“ erfolgen. Ist die Installation über diesen Weg nicht möglich, sind in der Dokumentation zu Helm zahlreiche Informationen dazu zu finden.
Bereitgestellte Anwendungen in Kubernetes überprüfen
Wenn eine Anwendung über Chart in Kubernetes bereitgestellt wurde, lassen sich die neuen Pods und Container mit „kubectl“ anzeigen, zum Beispiel mit „kubectl get all“. Um ein Release wieder zu deinstallieren und damit ein Rollback durchzuführen, kann ebenfalls Helm zum Einsatz kommen. Eine Deinstallation erfolgt zum Beispiel mit „helm uninstall my-release“.
Fazit
Helm ermöglicht die schnelle Bereitstellung auch von komplexen Anwendungen mit nur einem Befehl. Durch die Paketierung und die Anbindung von verschiedenen Repositories wird die Installation von Anwendungen in Kubernetes genauso einfach, wie in Linux.
(ID:48167641)