Verteilte Anwendungen paketieren und bereitstellen Helm – Paketverwaltung für Kubernetes

Von Thomas Joos

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.

Helm kann unter anderem auf Repositories im Internet zugreifen.
Helm kann unter anderem auf Repositories im Internet zugreifen.
(Bild: Joos / ArtifactHub)

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

Erstellen eines eigenen Charts mit Helm.
Erstellen eines eigenen Charts mit Helm.
(Bild: Joos / Canonical)

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

Installieren von Anwendungen mit Helm in Kubernetes.
Installieren von Anwendungen mit Helm in Kubernetes.
(Bild: Joos / Canonical)

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.

Anbinden von Repositories, Herunterladen von Charts und bearbeiten der Installationsdateien des Charts mit Helm.
Anbinden von Repositories, Herunterladen von Charts und bearbeiten der Installationsdateien des Charts mit Helm.
(Bild: Joos / Canonical)

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.

Anpassen der Datei „values.yaml“ eines Charts.
Anpassen der Datei „values.yaml“ eines Charts.
(Bild: Joos / Canonical)

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:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung
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

Helm kann auch auf Repositories im Internet zugreifen.
Helm kann auch auf Repositories im Internet zugreifen.
(Bild: Joos / ArtifactHub)

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

Anzeigen von weiterführenden Informationen zu einem Chart in den Helm-Repostories.
Anzeigen von weiterführenden Informationen zu einem Chart in den Helm-Repostories.
(Bild: Joos / Canonical)

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

Helm ist in wenigen Sekunden auf einer Verwaltungs-Arbeitsstation installiert.
Helm ist in wenigen Sekunden auf einer Verwaltungs-Arbeitsstation installiert.
(Bild: Joos / Canonical)

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

Anzeigen von Informationen zu bereitgestellten Anwendungen.
Anzeigen von Informationen zu bereitgestellten Anwendungen.
(Bild: Joos / Canonical)

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)