Wie man Software auf Kubernetes-Clustern mit dem Paketmanager Helm 3 installiert

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 von kubectl finden Sie in der offiziellen Dokumentation.

    Sie können Ihre Konnektivität mit dem folgenden Befehl testen:

    1. kubectl cluster-info

    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:

    1. kubectl config get-contexts

    Die Ausgabe listet die verfügbaren Konfigurationen auf:

    Ausgabe
    AKTUELL NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin

    Hier zeigt das Asterisk (*), dass wir mit dem Cluster do-fra1-helm3-example verbunden sind. Um Cluster zu wechseln, führen Sie Folgendes aus:

    1. kubectl config use-context Kontext-Name

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:

  1. cd /tmp

Laden Sie das Skript mit dem folgenden Befehl herunter:

  1. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

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:

  1. chmod u+x get_helm.sh

Schließlich führen Sie es aus, um Helm 3 zu installieren:

  1. ./get_helm.sh

Sie erhalten eine Ausgabe ähnlich der folgenden:

Output
Downloading 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:

  1. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

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:

  1. helm repo update

Sie erhalten die folgende Ausgabe, die zeigt, dass das Update erfolgreich war:

Output
Hang 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:

  1. helm show values chart_name

Um verfügbare Variablen für ingress-nginx anzuzeigen, ersetzen Sie chart_name:

  1. helm show values ingress-nginx/ingress-nginx

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:

  1. helm install release_name repository/chart_name

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:

  1. helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

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:

  1. helm install ingress-nginx ingress-nginx/ingress-nginx

Die Ausgabe wird ähnlich wie folgt sein:

Output
NAME: 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:

  1. helm list

Sie werden feststellen, dass ingress-nginx momentan die einzige bereitgestellte Chart ist:

Output
NAME 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:

  1. kubectl get services

Die Ausgabe wird ähnlich wie folgt sein:

Output
NAME 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:

  1. kubectl get pods

Sie werden feststellen, dass es nur einen gibt:

Output
NAME 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:

  1. helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

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:

Output
NAME: 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:

  1. kubectl get pods

Sie werden drei aufgelistete Pods finden, anstatt nur einen:

Output
NAME 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:

  1. helm rollback release_name release_revision

Sie können es verwenden, um die Änderungen, die Sie an ingress-nginx vorgenommen haben, durch Rückkehr zur Revision 1 zurückzusetzen:

  1. helm rollback ingress-nginx 1

Sie erhalten die folgende Ausgabe, die anzeigt, dass die Aktion erfolgreich war:

Output
Rollback was a success! Happy Helming!

Sie können die aktuelle Revision über die Liste der Versionen überprüfen:

  1. helm list

Sie werden feststellen, dass die Revision jetzt 3 und nicht 1 ist:

Output
NAME 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:

  1. kubectl get pods

Sie werden feststellen, dass es nur einen gibt:

Output
NAME 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:

  1. helm delete release_name

Da du es nicht mehr benötigen wirst, lösche ingress-nginx durch Ausführen des folgenden Befehls:

  1. helm delete ingress-nginx

Die Ausgabe wird sein:

Output
release "ingress-nginx" uninstalled

Du kannst die Releases auflisten, um sicherzustellen, dass keine vorhanden sind:

  1. helm list

Die Ausgabetabelle wird keine Zeilen enthalten:

Output
NAME 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:

  1. helm create example-chart

Dies erstellt ein neues Verzeichnis namens example-chart mit den folgenden Dateien und Struktur:

example-chart/
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:

  1. cat example-chart/templates/service.yaml

Du wirst feststellen, dass es Vorlagenanweisungen zum Generieren von Werten gibt, die von doppelten Klammern umgeben sind:

Output
apiVersion
: v1 kind: Service metadata: name: {{ include "mychart.fullname" . }} labels: {{- include "mychart.labels" . | nindent 4 }} spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http protocol: TCP name: http selector: {{- include "mychart.selectorLabels" . | nindent 4 }}

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:

example-chart/Chart.yaml
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes

...
type: application

...
version: 0.1.0

...
appVersion: "1.16.0"

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:

  1. helm install example-chart --dry-run --debug ./example-chart

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:

  1. helm package ./example-chart

Die Ausgabe wird sein:

Output
Successfully 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:

  1. helm install example-chart example-chart-0.1.0.tgz

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.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-3-package-manager