Wie man Software auf Kubernetes-Clustern mit Helm 3-Paketverwaltung installiert

0 Aktien
0
0
0
0

Einführung

Helm ist ein Paketmanager für Kubernetes, der es Entwicklern und Betreibern ermöglicht, Anwendungen einfach auf Kubernetes-Clustern zu konfigurieren und bereitzustellen.

Helm-Pakete werden als Charts bezeichnet und enthalten Vorlagen für Ressourcendefinitionen, die die Bereitstellung und Konfiguration bestimmter Anwendungen mit minimalem Aufwand ermöglichen. Mithilfe von Vorlagen lassen sich das Chart, seine Einstellungen und sein Verhalten durch die Übergabe von Variablendefinitionen verwalten, ohne das eigentliche Chart zu verändern. Helm verwaltet automatisch benutzerdefinierte Ressourcendefinitionen sowie Änderungen an bereits bereitgestellten Definitionen. Das bereitgestellte Chart mit möglichen Anpassungen wird als Release bezeichnet.

In diesem Tutorial richten Sie Helm 3 ein und lernen, wie Sie Charts und Versionen installieren, aktualisieren, wiederherstellen und verwalten. Außerdem erfahren Sie, wie Sie eigene Charts erstellen und verpacken sowie Chart-Repositories einrichten, in denen Charts bereitgestellt werden, die Sie sofort installieren können.

Voraussetzungen
  • Ein Kubernetes-Cluster mit aktivierter rollenbasierter Zugriffskontrolle (RBAC).
  • Das kubectl-Befehlszeilentool ist auf Ihrem lokalen Rechner installiert und für die Verbindung mit Ihrem Cluster konfiguriert.
  • Sie können Ihre Verbindung mit folgendem Befehl testen:
  • kubectl cluster-info
  • Wenn keine Fehler auftreten, sind Sie mit dem Cluster verbunden. Wenn Sie mit kubectl auf mehrere Cluster zugreifen, stellen Sie sicher, dass Sie den richtigen Clusterkontext ausgewählt haben, indem Sie Folgendes ausführen:
  • kubectl config get-contexts
  • Die Ausgabe listet die verfügbaren Einstellungen auf:
  • Output
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE
    * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin
  • Das Sternchen (*) zeigt hier an, dass wir mit dem Cluster „do-fra1-helm3-example“ verbunden sind. Um den Cluster zu wechseln, führen Sie folgenden Befehl aus:
  • kubectl config use-context context-name
  • Sobald 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 installieren Sie Helm 3 mithilfe des offiziell bereitgestellten Shell-Skripts.

Beginnen Sie, indem Sie in das Verzeichnis /tmp wechseln. Dort finden Sie das Installationsskript, indem Sie folgenden Befehl ausführen:

cd /tmp

Laden Sie das Skript mit folgendem Befehl herunter:

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.

Machen Sie die Datei ausführbar, indem Sie ihre Berechtigungen wie folgt festlegen:

chmod u+x get_helm.sh

Führen Sie es abschließend aus, um Helm 3 zu installieren:

./get_helm.sh

Sie erhalten eine Ausgabe, die in etwa wie folgt aussieht:

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

Sie haben Helm 3 auf Ihrem Rechner installiert. Nun lernen Sie Chart-Repositories und deren Verwendung kennen.

Schritt 2 – Chart-Repositories einrichten

Helm-Charts werden in Chart-Repositories gespeichert, die von jedem gehostet werden können. Helm 3 ist standardmäßig nicht mit Repositories vorkonfiguriert. Frühere Helm-Versionen enthielten ein zentrales Chart-Repository. Helm 3 wurde jedoch bewusst so konzipiert, dass Chart-Entwickler ihr eigenes Repository verwalten können, was mehr Freiheit und schnellere Releases ermöglicht. Das bedeutet, dass Sie für jedes Chart, das Sie verwenden möchten, das entsprechende Repository zu Ihrer Helm-Installation hinzufügen müssen.

Um das passende Repository zu finden, können Sie ArtifactHub.io nutzen, eine Open-Source-Website der CNCF, die Helm-Charts und ihre Repositories katalogisiert. Dort werden auch beliebte und nützliche Charts erfasst, die von anderen CNCF-Projekten verwendet werden. Daher unterscheidet sich ArtifactHub.io vom stabilen Repository, das frühere Helm-Versionen nutzten. Es ist eine hervorragende Ressource für gängige Projekte wie Nginx-Logs oder Monitoring-Tools.

Sie können das gewünschte Diagramm auf der Hauptseite suchen. Die Nginx-Suche zeigt alle zugehörigen indizierten Diagramme an.


Sie installieren die Community-Version, die vom Kubernetes-Team verwaltet wird. Suchen Sie in den Suchergebnissen nach „ingress-nginx“ und wählen Sie es aus, um die Seite aufzurufen.


Jedes Diagramm sollte eine Beschreibung der jeweiligen Aufgabe sowie Anweisungen zum Hinzufügen des zugehörigen Repositorys und zur Diagramminstallation enthalten. Alternativ können Sie die erforderlichen Anweisungen auch durch Klicken auf die Schaltfläche „INSTALLIEREN“ auf der rechten Seite abrufen.


Sie können auf die blaue Schaltfläche neben dem Befehl klicken, um ihn zu kopieren. Gehen Sie beim ersten Befehl wie folgt vor und führen Sie ihn aus:

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

Um ein Repository zu Helm hinzuzufügen, führen Sie den Befehl `helm repo add` aus. Die akzeptierten Parameter sind der Name des Repositorys und sein Speicherort.

Die Ausgabe lautet:

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:

helm repo update

Sie erhalten die folgende Ausgabe, die anzeigt, 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!⎈

Sie haben sich nun mit ArtifactHub und seinen Funktionen vertraut gemacht. Außerdem haben Sie Ihrer Helm-Installation ein neues Repository hinzugefügt. Als Nächstes installieren Sie das Helm-Chart.

Schritt 3 – Helm-Chart installieren

Im vorherigen Abschnitt haben Sie das Ingress-Nginx-Graph-Repository hinzugefügt. Jetzt installieren Sie es auf Ihrem Cluster.

Jedes Diagramm verfügt über Konfigurationsvariablen, mit denen Sie sein Verhalten ändern können. Diese Variablen werden in einer Datei namens values.yaml gespeichert, die Teil des Diagramms ist. Sofern Sie das Diagramm nicht auf Ihr Gerät heruntergeladen haben, müssen Sie den folgenden Befehl ausführen, um es anzuzeigen:

helm show values chart_name

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

helm show values ingress-nginx/ingress-nginx

Die Ausgabe wird lang sein und den Inhalt der values.yaml-Datei für ingress-nginx anzeigen.

Um das Chart zu installieren, können Sie den Befehl „install“ verwenden:

helm install release_name repository/chart_name

Ein Release ist eine bereitgestellte Instanz des Graphen, die hier ingress-nginx genannt wird.

Dieser Befehl installiert das Chart mit Standardwerten für die Variablen auf Ihrem Cluster. Wenn Sie einige davon ändern möchten, können Sie neue Variablenwerte mit dem Parameter `--set` angeben.

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

Sie können den Befehl `--set` für beliebig viele Variablen wiederholen. Da wir es jetzt nicht anpassen werden, installieren Sie es unverändert mit folgendem Befehl:

helm install ingress-nginx ingress-nginx/ingress-nginx

Das Ergebnis wird in etwa wie folgt aussehen:

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 NAME dem von Ihnen angegebenen Versionsnamen entspricht. Helm listet außerdem allgemeine Informationen auf, wie z. B. den Release-Status und den Namespace, in dem die Anwendung bereitgestellt wird. Der Abschnitt „NOTES“ variiert je nach Chart und enthält üblicherweise Schnellstarttipps oder Warnungen zu häufigen Problemen bei der Verwendung der Chart-Ressourcen. Hier wird erwähnt, dass der Load Balancer erstellt wird und dies einige Zeit dauern kann.

Um die bereitgestellten Charts zu überprüfen, verwenden Sie den Befehl list:

helm list

Sie werden feststellen, dass ingress-nginx derzeit der einzige bereitgestellte Graph 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

Die im Cluster enthaltenen Dienste können Sie durch Ausführen des folgenden Befehls ermitteln:

kubectl get services

Die Ausgabe wird in etwa so aussehen:

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

Nachdem Sie nun eine Version in Ihrem Cluster bereitgestellt haben, werden Sie deren Konfiguration während der Bereitstellung ändern.

Schritt 4 – Aktualisieren Sie eine Version

Sobald eine Version ausgeführt wird, müssen Sie sie nicht löschen und neu erstellen, wenn Sie ihre Konfiguration ändern möchten. Sie können den Befehl „upgrade“ verwenden, um die Version mit einer neuen Version des Charts zu aktualisieren oder neue Einstellungen vorzunehmen.

Das Diagramm zu ingress-nginx zeigt die Variable controller.replicaCount, die die Anzahl der bereitgestellten Controller-Pods steuert. Standardmäßig ist sie auf eins gesetzt, was Sie überprüfen können, indem Sie die verfügbaren Pods auflisten:

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 aus Redundanzgründen mehr Instanzen bereitstellen möchten (z. B. drei), können Sie die Version aktualisieren und die Variable auf 3 setzen, indem Sie folgenden Befehl ausführen:

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

Sie können auch die Option `--reuse-values` übergeben, die Helm anweist, Ihre Änderungen auf die bereits bereitgestellte Version anzuwenden und die vorherige Konfiguration beizubehalten.

In der Ausgabe nimmt Helm Korrekturen vor, 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 folgenden Befehl ausführen:

kubectl get pods

Statt einer werden drei Kapseln aufgelistet:

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

Anschließend werden Sie die Änderungen rückgängig machen und die Veröffentlichung vollständig löschen.

Schritt 5 – Wiederherstellen und Löschen einer Kopie

Beim Aktualisieren einer Version erhöht sich deren Revisionsnummer. Helm speichert intern alle Versionen einer Version, sodass Sie bei Bedarf zu einer vorherigen Version zurückkehren können.

Um die Anzahl der Pods wieder auf eins zu reduzieren, können Sie den Upgrade-Befehl erneut ausführen und die Anzahl manuell anpassen, da es sich um eine kleine Änderung handelt. Bei größeren Graphen mit vielen Variablen ist eine manuelle Rücksetzung jedoch nicht möglich und sollte automatisch erfolgen.

Um eine Version wiederherzustellen, verwenden Sie den Befehl restore:

helm rollback release_name release_revision

Sie können es verwenden, um Änderungen, die Sie an ingress-nginx vorgenommen haben, rückgängig zu machen und zur Version 1 zurückzukehren:

helm rollback ingress-nginx 1

Sie erhalten die folgende Ausgabe, die anzeigt, dass der Vorgang erfolgreich war:

Output
Rollback was a success! Happy Helming!

Die aktuelle Version können Sie überprüfen, indem Sie die Versionen auflisten:

helm list

Sie werden feststellen, dass die Revisionsnummer nun 3 und nicht mehr 1 beträgt:

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 eines Rollbacks, als neue Revision in einem Release. Die Anzahl der bereitgestellten Pods lässt sich durch Ausführen des folgenden Befehls überprüfen:

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 den Befehl helm delete verwenden:

helm delete release_name

Da Sie es nicht mehr benötigen, entfernen Sie ingress-nginx mit folgendem Befehl:

helm delete ingress-nginx

Die Ausgabe lautet:

Output
release "ingress-nginx" uninstalled

Sie können die Versionen auflisten, um zu überprüfen, ob keine existiert:

helm list

Die Ausgabetabelle wird keine Zeilen enthalten:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

Nachdem die Version gelöscht wurde, können Sie ihren Namen für zukünftige Bereitstellungen wiederverwenden.

Schritt 6 – (Optional) Benutzerdefinierte Diagramme erstellen

In diesem optionalen Schritt lernen Sie, wie Sie ein benutzerdefiniertes Diagramm erstellen, wo Sie Ressourcendefinitionen platzieren und wie Sie es für die weitere Verteilung verpacken.

Sie erstellen ein neues Diagramm mit dem Namen „Beispieldiagramm“. Führen Sie dazu folgenden Befehl aus:

helm create example-chart

Dadurch wird ein neues Verzeichnis namens example-chart mit folgenden Dateien und folgender Struktur erstellt:

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 Ihr Graph auf den Zielclustern installiert, befinden sich im Vorlagenverzeichnis. Die von Helm als Ausgangspunkt erstellten Standarddefinitionen stellen einen Nginx-Ingress-Controller bereit. Obwohl ihre Dateiendung YAML lautet, verwenden sie die Go-Formatierungssyntax, um über überprüfbare Variablen konfigurierbar zu bleiben. Sie können den Inhalt der Datei service.yaml mit folgendem Befehl anzeigen:

cat example-chart/templates/service.yaml

Sie werden feststellen, dass es Formatierungsanweisungen für die Erzeugung von Werten enthält, die von doppelten Klammern umschlossen sind:

OutputapiVersion: 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 }}

Referenzierte Variablen werden dem Benutzer zugänglich gemacht und in values.yaml definiert. Helm-NOTES-Texte werden nach der Bereitstellung in NOTES.txt gespeichert und formatiert. Chart-Metadaten, wie Name, Version und Versionsnummer der bereitgestellten Software, werden in Chart.yaml angegeben.

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 bereitstellt, können Sie die Parameter `--dry-run` und `--debug` an `helm install` übergeben, indem Sie auf das Chart-Verzeichnis verweisen:

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

Die Ausgabe wird umfangreich sein und alle endgültigen Ressourcendefinitionen enthalten, die auf Ihren Cluster angewendet werden. Während Sie an Ihrem Graphen arbeiten, können Sie den Befehl „upgrade“ verwenden, um neue Versionen an Kubernetes zu übertragen.

Wenn Sie die Freigabe des Diagramms abgeschlossen haben, können Sie es zur Verteilung freigeben, indem Sie folgenden Befehl ausführen:

helm package ./example-chart

Die Ausgabe lautet:

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

Das gepackte Chart kann genauso installiert werden wie die in den hinzugefügten Repositories:

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

An diesem Punkt haben Sie ein benutzerdefiniertes Diagramm erstellt und bereitgestellt. Sie haben es außerdem verpackt und sich mit seiner Struktur vertraut gemacht.

Ergebnis

Sie wissen nun, wie Sie mit Helm Software installieren und aktualisieren, die in Ihrem Kubernetes-Cluster bereitgestellt wird. Sie haben Chart-Repositories hinzugefügt und gelernt, warum diese wichtig sind und wie ArtifactHub Ihnen beim Auffinden hilft. Außerdem haben Sie ein neues benutzerdefiniertes Chart erstellt und etwas über Release-Revisionen sowie deren Rücksetzung bei Bedarf gelernt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen