Einführung
Helm ist ein Paketmanager für Kubernetes, der es Entwicklern und Betreibern ermöglicht, Anwendungen auf Kubernetes-Clustern einfacher zu konfigurieren und bereitzustellen.
Helm-Pakete werden als Charts bezeichnet und enthalten Vorlagen von Ressourcendefinitionen, die Apps bereitstellen und konfigurieren, wobei vom Benutzer nur minimaler Aufwand erforderlich ist. Mit der Vorlagenfunktion können Sie das Chart sowie dessen Einstellungen und Verhalten verwalten, indem Sie Variablendefinitionen übergeben, ohne das tatsächliche Chart zu ändern. Benutzerdefinierte Ressourcendefinitionen sowie Änderungen an bereits bereitgestellten Definitionen werden von Helm automatisch verwaltet. Ein bereitgestelltes Chart mit möglichen Anpassungen wird als Release bezeichnet.
In diesem Tutorial richten Sie Helm 3 ein und lernen, wie Sie Charts und Releases installieren, aktualisieren, zurücksetzen und verwalten. Sie lernen auch, eigene Charts zu erstellen und zu verpacken sowie Chart-Repositories einzurichten, die Charts hosten, die Sie sofort installieren können.
Voraussetzungen
-
Ein Kubernetes-Cluster mit aktivierter rollenbasierter Zugriffskontrolle (RBAC). Weitere Informationen zu Releases finden Sie auf der Helm-Releases-Seite.
-
Das
kubectl
-Befehlszeilentool ist auf Ihrem lokalen Rechner installiert und konfiguriert, um eine Verbindung zu Ihrem Cluster herzustellen. Weitere Informationen zur Installation vonkubectl
finden Sie in der offiziellen Dokumentation.Sie können Ihre Konnektivität mit dem folgenden Befehl testen:
Wenn Sie keine Fehlermeldungen erhalten, sind Sie mit dem Cluster verbunden. Wenn Sie auf mehrere Cluster mit
kubectl
zugreifen, stellen Sie sicher, dass Sie den richtigen Clusterkontext ausgewählt haben, indem Sie Folgendes ausführen:Die Ausgabe listet die verfügbaren Konfigurationen auf:
AusgabeAKTUELL NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-adminHier zeigt das Asterisk (
*
), dass wir mit dem Clusterdo-fra1-helm3-example
verbunden sind. Um Cluster zu wechseln, führen Sie Folgendes aus:
Wenn Sie mit dem richtigen Cluster verbunden sind, fahren Sie mit Schritt 1 fort, um mit der Installation von Helm zu beginnen.
Schritt 1 – Helm 3 installieren
In diesem Abschnitt werden Sie Helm 3 installieren, indem Sie das offiziell bereitgestellte Shell-Skript verwenden.
Beginnen Sie, indem Sie zu /tmp
navigieren, wo Sie das Installations-Skript speichern werden, indem Sie Folgendes ausführen:
Laden Sie das Skript mit dem folgenden Befehl herunter:
Sie können get_helm.sh
in Ihrem Texteditor überprüfen, um sicherzustellen, dass es sicher ist.
Setzen Sie es ausführbar, indem Sie die Berechtigungen wie folgt setzen:
Schließlich führen Sie es aus, um Helm 3 zu installieren:
Sie erhalten eine Ausgabe ähnlich der folgenden:
OutputDownloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
Auf Ihrem Gerät ist Helm 3 installiert. Sie werden nun über Diagramm-Repositories und deren Verwendung informiert.
Schritt 2 — Einrichten von Diagramm-Repositories
Helm-Charts werden in Diagramm-Repositories gespeichert, die von jedem gehostet werden können. Standardmäßig ist Helm 3 nicht mit einem Repository vorinstalliert. In früheren Versionen enthielt Helm ein zentrales kuratiertes Diagramm-Repository. Bei der Gestaltung von Helm 3 wurde jedoch bewusst darauf hingearbeitet, dass Diagrammentwickler ihr eigenes Repository verwalten können, was mehr Freiheit und schnellere Veröffentlichungen ermöglicht. Das bedeutet, dass Sie für jedes Diagramm, das Sie verwenden möchten, sicherstellen müssen, dass Sie das Hosting-Repository zu Ihrer Helm-Installation hinzufügen.
Um Ihnen bei der Suche nach dem richtigen Repository zu helfen, können Sie ArtifactHub.io verwenden, eine Open-Source-Website, die vom CNCF verwaltet wird und Helm-Diagramme und ihre Repositories katalogisiert. Es verfolgt auch beliebte und nützliche Diagramme, die andere CNCF-Projekte verwenden, daher unterscheidet es sich vom stable
-Repository, das in früheren Versionen von Helm verwendet wurde. Für gängige Projekte wie Nginx-Ingresses oder Überwachungstools ist es eine großartige Quelle.
Sie können auf der Startseite nach einem Diagramm suchen, das Sie installieren möchten. Die Suche nach nginx
zeigt alle indizierten Diagramme, die damit zusammenhängen.
Sie installieren die Community-Edition, die vom Kubernetes-Team verwaltet wird. Suchen Sie nach ingress-nginx
, um sie in Ihren Suchergebnissen zu finden. Wählen Sie sie aus, um auf ihre Seite zuzugreifen.
Jedes Diagramm sollte eine Beschreibung haben, die erklärt, was es tut, zusammen mit Befehlen zum Hinzufügen seines Repositories zu Ihrer Installation und zum Installieren des Diagramms. Falls nicht, können Sie die erforderlichen Befehle trotzdem erhalten, indem Sie auf die INSTALL-Schaltfläche auf der rechten Seite der Seite klicken.
Klicken Sie auf die blaue Schaltfläche neben einem Befehl, um ihn zu kopieren. Tun Sie dies für den ersten Befehl und führen Sie ihn aus:
Um ein Repository zu Helm hinzuzufügen, führen Sie helm repo add
aus. Die Parameter, die es akzeptiert, sind der Name des Repositories und sein Speicherort.
Die Ausgabe wird wie folgt sein:
Output"ingress-nginx" has been added to your repositories
Wenn Sie ein neues Repository hinzufügen, müssen Sie Helm mitteilen, was es enthält, indem Sie folgenden Befehl ausführen:
Sie erhalten die folgende Ausgabe, die zeigt, dass das Update erfolgreich war:
OutputHang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈
In diesem Schritt haben Sie ArtifactHub kennengelernt und was es bietet. Außerdem haben Sie ein neues Repository zu Ihrer Helm-Installation hinzugefügt. Im nächsten Schritt werden Sie ein Helm-Diagramm installieren.
Schritt 3 — Installation eines Helm-Diagramms
In der vorherigen Sektion haben Sie das Repository für das ingress-nginx
-Diagramm hinzugefügt. Jetzt werden Sie es in Ihrem Cluster installieren.
Jede Chart enthält Konfigurationsvariablen, die Sie setzen können, um ihr Verhalten zu ändern. Diese Variablen werden in einer Datei namens values.yaml
gespeichert, die Teil der Chart ist. Wenn Sie die Chart nicht auf Ihrem Rechner heruntergeladen haben, müssen Sie den folgenden Befehl ausführen, um sie anzuzeigen:
Um verfügbare Variablen für ingress-nginx
anzuzeigen, ersetzen Sie chart_name
:
Die Ausgabe wird lang sein und den Inhalt von values.yaml
für ingress-nginx
anzeigen.
Um eine Chart zu installieren, können Sie helm install
verwenden:
A release is a deployed instance of the chart, and here you’re calling it ingress-nginx
.
Dieser Befehl würde die Chart mit den Standardwerten der Variablen in Ihrem Cluster installieren. Wenn Sie einige davon ändern möchten, können Sie die neuen Variablenwerte mit --set
übergeben:
Sie können --set
für so viele Variablen wiederholen, wie Sie benötigen. Da wir sie jetzt nicht anpassen werden, installieren Sie sie wie folgt:
Die Ausgabe wird ähnlich wie folgt sein:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...
Beachten Sie, dass der NAME
dem Namen des Releases entspricht, den Sie angegeben haben. Helm listet auch allgemeine Informationen auf, wie den Veröffentlichungsstatus und das Namespace, in dem es bereitgestellt wird. Der Abschnitt NOTES
variiert je nach Chart und enthält in der Regel eine Schnellstartanleitung oder warnt vor einigen gängigen Problemen bei der Verwendung der Ressourcen der Chart. Hier wird darauf hingewiesen, dass der Load Balancer erstellt wird und dass es einige Zeit dauern kann, bis er fertig ist.
Um bereitgestellte Charts zu überprüfen, verwenden Sie helm list
:
Sie werden feststellen, dass ingress-nginx
momentan die einzige bereitgestellte Chart ist:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
Sie können die Dienste, die es in Ihrem Cluster hat, finden, indem Sie folgendes ausführen:
Die Ausgabe wird ähnlich wie folgt sein:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m
Jetzt, da Sie eine Version in Ihrem Cluster bereitgestellt haben, werden Sie ihre Konfiguration ändern, während sie bereitgestellt ist.
Schritt 4 — Upgrade einer Version
Nachdem eine Version bereitgestellt wurde, müssen Sie sie nicht vollständig abbauen und neu bereitstellen, wenn Sie ihre Konfiguration ändern müssen. Sie können den Befehl helm upgrade
verwenden, um die Version mit einer neuen Version der Chart zu aktualisieren oder neue Einstellungen festzulegen.
Die Chart ingress-nginx
stellt die Variable controller.replicaCount
bereit, die die Anzahl der bereitgestellten Controller-Pods steuert. Standardmäßig ist sie auf eins gesetzt, was Sie durch Auflisten der verfügbaren Pods überprüfen können:
Sie werden feststellen, dass es nur einen gibt:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m
Wenn Sie mehr für Redundanz bereitstellen möchten (beispielsweise drei), können Sie das Upgrade durchführen und die Variable auf 3
setzen, indem Sie Folgendes ausführen:
Sie geben auch --reuse-values
an, was Helm anweist, Ihre Änderungen auf der bereitgestellten Version basieren zu lassen und die vorherige Konfiguration beizubehalten.
In der Ausgabe erhöht Helm die Revision, um anzuzeigen, dass die Version aktualisiert wurde:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
Sie können die verfügbaren Pods auflisten, indem Sie Folgendes ausführen:
Sie werden drei aufgelistete Pods finden, anstatt nur einen:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s
Als nächstes werden Sie Änderungen rückgängig machen und alle Versionen komplett löschen.
Schritt 5 – Rollback und Löschen einer Version
Wenn Sie eine Version aktualisieren, wird ihre Revisionsnummer erhöht. Intern speichert Helm alle Revisionen einer Version, sodass Sie bei Bedarf zu einer früheren Revision zurückkehren können.
Um die Anzahl der Pods auf nur eins zurückzusetzen, könnten Sie helm upgrade
erneut ausführen und die Anzahl manuell festlegen, da es sich um eine kleine Änderung handelt. Bei größeren Diagrammen mit vielen Variablen ist jedoch eine manuelle Rücksetzung nicht praktikabel und sollte automatisiert werden.
Um eine Version zurückzusetzen, verwenden Sie helm rollback
:
Sie können es verwenden, um die Änderungen, die Sie an ingress-nginx
vorgenommen haben, durch Rückkehr zur Revision 1
zurückzusetzen:
Sie erhalten die folgende Ausgabe, die anzeigt, dass die Aktion erfolgreich war:
OutputRollback was a success! Happy Helming!
Sie können die aktuelle Revision über die Liste der Versionen überprüfen:
Sie werden feststellen, dass die Revision jetzt 3
und nicht 1
ist:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
Helm betrachtet jede Änderung, einschließlich Rollbacks, als eine neue Revision einer Version. Sie können überprüfen, ob Revision 3
der ersten entspricht, indem Sie die Anzahl der bereitgestellten Pods überprüfen, indem Sie ausführen:
Sie werden feststellen, dass es nur einen gibt:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m
Um eine Version und alle ihre Revisionen zu löschen, können Sie helm delete
verwenden:
Da du es nicht mehr benötigen wirst, lösche ingress-nginx
durch Ausführen des folgenden Befehls:
Die Ausgabe wird sein:
Outputrelease "ingress-nginx" uninstalled
Du kannst die Releases auflisten, um sicherzustellen, dass keine vorhanden sind:
Die Ausgabetabelle wird keine Zeilen enthalten:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
Jetzt, da das Release gelöscht ist, kannst du den Namen für zukünftige Bereitstellungen wiederverwenden.
Schritt 6 – (Optional) Erstellen benutzerdefinierter Diagramme
In diesem optionalen Schritt lernst du, wie man ein benutzerdefiniertes Diagramm erstellt, wo man seine Ressourcendefinitionen platziert und wie man es für weitere Verteilung verpackt.
Du wirst ein neues Diagramm namens example-chart
erstellen. Führe den folgenden Befehl aus, um es zu erstellen:
Dies erstellt ein neues Verzeichnis namens example-chart
mit den folgenden Dateien und Struktur:
charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml
Die Ressourcendefinitionen, die dein Diagramm auf Zielclustern installieren wird, befinden sich im Verzeichnis templates
. Die Standarddefinitionen, die Helm als Ausgangspunkt erstellt hat, installieren einen Nginx Ingress-Controller. Obwohl ihre Dateierweiterung YAML ist, verwenden sie die Template-Syntax von Go, um über freigegebene Variablen anpassbar zu bleiben, die du übergeben kannst. Du kannst überprüfen, indem du den Inhalt von service.yaml
anzeigen lässt, indem du folgendes ausführst:
Du wirst feststellen, dass es Vorlagenanweisungen zum Generieren von Werten gibt, die von doppelten Klammern umgeben sind:
Die referenzierten Variablen werden dem Benutzer zugänglich gemacht und in values.yaml
definiert. Der Text NOTES
, den Helm nach der Bereitstellung anzeigt, wird in NOTES.txt
gespeichert und ist ebenfalls als Vorlage konzipiert. Metadaten des Diagramms, wie Name, Version und Version der bereitgestellten Software, sind in Chart.yaml
angegeben:
Um zu überprüfen, was Helm bereitstellen würde, können Sie --dry-run
und --debug
an helm install
übergeben und auf das Diagrammverzeichnis verweisen:
Die Ausgabe wird lang sein und alle endgültigen Ressourcendefinitionen enthalten, die auf Ihrem Cluster angewendet würden. Während Sie an Ihrem Diagramm arbeiten, können Sie helm upgrade
verwenden, um neue Versionen an Kubernetes zu übermitteln.
Wenn es an der Zeit ist, Ihr fertiges Diagramm zu teilen, können Sie es zur Verteilung verpacken, indem Sie Folgendes ausführen:
Die Ausgabe wird sein:
OutputSuccessfully packaged chart and saved it to: .../example-chart-0.1.0.tgz
Das verpackte Diagramm kann genauso installiert werden wie diejenigen aus hinzugefügten Repositories:
In diesem Schritt haben Sie ein benutzerdefiniertes Diagramm erstellt und bereitgestellt. Sie haben es auch verpackt und etwas über seine Struktur gelernt.
Fazit
Sie wissen jetzt, wie Sie Helm verwenden können, um Software in Ihrem Kubernetes-Cluster zu installieren und zu aktualisieren. Sie haben Diagramm-Repositories hinzugefügt und gelernt, warum sie wichtig sind und wie Ihnen ArtifactHub helfen kann, sie zu finden. Sie haben auch ein neues benutzerdefiniertes Diagramm erstellt und etwas über Versionsrevisionen und das Rollback-Verfahren gelernt, falls erforderlich.
Für weitere Informationen zur Erstellung benutzerdefinierter Diagramme besuchen Sie das offizielle Handbuch.