So installieren Sie Software auf Kubernetes-Clustern mit dem Helm Package Manager

Einführung

Helm ist ein Paketmanager für Kubernetes, mit dem Entwickler und Betreiber Anwendungen auf Kubernetes-Clustern einfacher konfigurieren und bereitstellen können.

In diesem Tutorial richten wir Helm ein und verwenden es, um eine Instanz vonthe Kubernetes Dashboard application zu installieren, neu zu konfigurieren, zurückzusetzen und dann zu löschen. Das Dashboard ist eine offizielle webbasierte Kubernetes-GUI.

Für einen konzeptionellen Überblick über Helm und sein Verpackungsökosystem lesen Sie bitte unseren ArtikelAn Introduction to Helm.

Voraussetzungen

Für dieses Tutorial benötigen Sie:

  • Ein Kubernetes 1.8+ -Cluster mit aktivierter rollenbasierter Zugriffssteuerung (RBAC).

  • Das auf Ihrem lokalen Computer installierte Befehlszeilentoolkubectl, das für die Verbindung mit Ihrem Cluster konfiguriert ist. Weitere Informationen zum Installieren vonkubectlin the official documentation finden Sie hier.

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

    kubectl cluster-info

    Wenn Sie keine Fehler sehen, sind Sie mit dem Cluster verbunden. Wenn Sie mitkubectlauf mehrere Cluster zugreifen, stellen Sie sicher, dass Sie den richtigen Clusterkontext ausgewählt haben:

    kubectl config get-contexts
    OutputCURRENT   NAME                    CLUSTER                      AUTHINFO                      NAMESPACE
    *         do-nyc1-k8s-example     do-nyc1-k8s-example          do-nyc1-k8s-example-admin
              docker-for-desktop      docker-for-desktop-cluster   docker-for-desktop

    In diesem Beispiel zeigt das Sternchen (*) an, dass wir mit dem Clusterdo-nyc1-k8s-exampleverbunden sind. So wechseln Sie den Clusterlauf:

    kubectl config use-context context-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 - Installieren des Helms]] == Schritt 1 - Installieren des Helms

Zuerst installieren wir das Befehlszeilenprogrammhelmauf unserem lokalen Computer. Helm bietet ein Skript, das den Installationsprozess unter MacOS, Windows oder Linux abwickelt.

Wechseln Sie in ein beschreibbares Verzeichnis und laden Sie das Skript aus dem GitHub-Repository von Helm herunter:

cd /tmp
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

Machen Sie das Skript mitchmod ausführbar:

chmod u+x install-helm.sh

An dieser Stelle können Sie das Skript mit Ihrem bevorzugten Texteditor öffnen und auf Sicherheit prüfen. Wenn Sie zufrieden sind, führen Sie es aus:

./install-helm.sh

Möglicherweise werden Sie zur Eingabe Ihres Passworts aufgefordert. Geben Sie es ein und drücken SieENTER.

Outputhelm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

Als Nächstes schließen wir die Installation ab, indem wir einige Helm-Komponenten in unserem Cluster installieren.

[[Schritt-2 - Installation der Pinne]] == Schritt 2 - Pinne installieren

Tiller ist ein Begleiter des Befehlshelm, der in Ihrem Cluster ausgeführt wird, Befehle vonhelm empfängt und direkt mit der Kubernetes-API kommuniziert, um die eigentliche Arbeit zum Erstellen und Löschen von Ressourcen zu erledigen. Um Tiller die Berechtigungen zu erteilen, die für die Ausführung auf dem Cluster erforderlich sind, erstellen wir die Ressource eines Kubernetesserviceaccount.

[.Hinweis]##

Note: Wir werden dieseserviceaccount an die Clusterrolle voncluster-adminbinden. Dadurch erhält der Service-Superuser vontillerZugriff auf den Cluster und kann alle Ressourcentypen in allen Namespaces installieren. Dies ist in Ordnung, um Helm zu erkunden, aber Sie möchten möglicherweise eine gesperrte Konfiguration für einen produktiven Kubernetes-Cluster.

Weitere Informationen zum Einrichten verschiedener RBAC-Szenarien für Pinne finden Sie unterthe official Helm RBAC documentation.

Erstellen Sie dietillerserviceaccount:

kubectl -n kube-system create serviceaccount tiller

Als nächstes binden Sie dietillerserviceaccount an die Rolle voncluster-admin:

kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

Jetzt können wirhelm init ausführen, wodurch Tiller in unserem Cluster installiert wird, sowie einige lokale Verwaltungsaufgaben wie das Herunterladen der Repo-Details vonstable:

helm init --service-account tiller
Output. . .

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

Um zu überprüfen, ob Tiller ausgeführt wird, listen Sie die Pods im Namespacekube-systemauf:

kubectl get pods --namespace kube-system
OutputNAME                                    READY     STATUS    RESTARTS   AGE
. . .
kube-dns-64f766c69c-rm9tz               3/3       Running   0          22m
kube-proxy-worker-5884                  1/1       Running   1          21m
kube-proxy-worker-5885                  1/1       Running   1          21m
kubernetes-dashboard-7dd4fc69c8-c4gwk   1/1       Running   0          22m
tiller-deploy-5c688d5f9b-lccsk          1/1       Running   0          40s

Der Name des Pinnen-Pods beginnt mit dem Präfixtiller-deploy-.

Nachdem wir beide Helm-Komponenten installiert haben, können wirhelm verwenden, um unsere erste Anwendung zu installieren.

[[Schritt-3 -—- Installieren eines Helmdiagramms]] == Schritt 3 - Installieren eines Helmdiagramms

Helm-Softwarepakete heißencharts. Helm wird mit einem kuratierten Diagramm-Repository namensstable vorkonfiguriert geliefert. Sie können die verfügbaren Diagrammein their GitHub repo durchsuchen. Wir werden dieKubernetes Dashboard als Beispiel installieren.

Verwenden Siehelm, um das Paketkubernetes-dashboard aus dem Repostable zu installieren:

helm install stable/kubernetes-dashboard --name dashboard-demo
OutputNAME:   dashboard-demo
LAST DEPLOYED: Wed Aug  8 20:11:07 2018
NAMESPACE: default
STATUS: DEPLOYED

. . .

Beachten Sie die ZeileNAME, die in der obigen Beispielausgabe hervorgehoben ist. In diesem Fall haben wir den Namendashboard-demo angegeben. Dies ist der Name unsererrelease. Ein Helmrelease ist eine einzelne Bereitstellung eines Diagramms mit einer bestimmten Konfiguration. Sie können mehrere Versionen desselben Diagramms mit jeweils eigener Konfiguration bereitstellen.

Wenn Sie mit--name keinen eigenen Versionsnamen angeben, erstellt Helm einen zufälligen Namen für Sie.

Wir können Helm um eine Liste der Veröffentlichungen zu diesem Cluster bitten:

helm list
OutputNAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
dashboard-demo    1           Wed Aug  8 20:11:11 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

Wir können jetztkubectl verwenden, um zu überprüfen, ob ein neuer Dienst auf dem Cluster bereitgestellt wurde:

kubectl get services
OutputNAME                                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
dashboard-demo-kubernetes-dashboard   ClusterIP   10.32.104.73           443/TCP   51s
kubernetes                             ClusterIP   10.32.0.1              443/TCP   34m

Beachten Sie, dass der Servicename, der unserer Version entspricht, standardmäßig eine Kombination aus dem Helm-Release-Namen und dem Diagrammnamen ist.

Nachdem wir die Anwendung bereitgestellt haben, können Sie mit Helm die Konfiguration ändern und die Bereitstellung aktualisieren.

[[Schritt 4 - Aktualisieren einer Version]] == Schritt 4 - Aktualisieren einer Version

Mit dem Befehlhelm upgrade können Sie eine Version mit einem neuen oder aktualisierten Diagramm aktualisieren oder die Konfigurationsoptionen aktualisieren.

Wir werden eine einfache Änderung an der Versiondashboard-demovornehmen, um den Update- und Rollback-Prozess zu demonstrieren: Wir aktualisieren den Namen des Dashboard-Dienstes auf nurdashboard anstelle vondashboard-demo-kubernetes-dashboard .

Das Diagrammkubernetes-dashboardbietet eine Konfigurationsoption vonfullnameOverridezur Steuerung des Dienstnamens. Lassen Sie unshelm upgrade mit dieser Option ausführen:

helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"

Sie sehen eine Ausgabe ähnlich dem ersten Schritt vonhelm install.

Überprüfen Sie, ob Ihre Kubernetes-Dienste die aktualisierten Werte widerspiegeln:

kubectl get services
OutputNAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes             ClusterIP   10.32.0.1               443/TCP   36m
dashboard              ClusterIP   10.32.198.148           443/TCP   40s

Unser Servicename wurde auf den neuen Wert aktualisiert.

[.Hinweis]##

Note: An diesem Punkt möchten Sie möglicherweise das Kubernetes-Dashboard tatsächlich in Ihren Browser laden und es auschecken. Führen Sie dazu zunächst den folgenden Befehl aus:

kubectl proxy

Dadurch wird ein Proxy erstellt, mit dem Sie von Ihrem lokalen Computer aus auf Remoteclusterressourcen zugreifen können. Basierend auf den vorherigen Anweisungen heißt Ihr Dashboard-Dienstkubernetes-dashboard und wird im Namespacedefaultausgeführt. Sie können jetzt über die folgende URL auf das Dashboard zugreifen:

http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/

Ersetzen Sie bei Bedarf die hervorgehobenen Teile durch Ihren eigenen Dienstnamen und Namespace. Anweisungen zur tatsächlichen Verwendung des Dashboards sind in diesem Lernprogramm nicht enthalten. Weitere Informationen finden Sie inthe official Kubernetes Dashboard docs.

Als nächstes werden wir uns Helms Fähigkeit ansehen, Releases zurückzusetzen.

[[Schritt-5 - Roll-Back-a-Release]] == Schritt 5 - Roll-Back eines Releases

Als wir im vorherigen Schritt die Versiondashboard-demoaktualisiert haben, haben wir eine zweiterevisionder Version erstellt. Helm behält alle Details früherer Versionen bei, falls Sie ein Rollback zu einer früheren Konfiguration oder einem früheren Diagramm durchführen müssen.

Verwenden Siehelm list, um die Freigabe erneut zu überprüfen:

helm list
OutputNAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
dashboard-demo  2         Wed Aug  8 20:13:15 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

Die SpalteREVISION gibt an, dass dies jetzt die zweite Revision ist.

Verwenden Siehelm rollback, um zur ersten Revision zurückzukehren:

helm rollback dashboard-demo 1

Sie sollten die folgende Ausgabe sehen, die angibt, dass das Rollback erfolgreich war:

OutputRollback was a success! Happy Helming!

Wenn Sie zu diesem Zeitpunktkubectl get services erneut ausführen, werden Sie feststellen, dass der Dienstname wieder auf den vorherigen Wert geändert wurde. Helm hat die Anwendung mit der Konfiguration von Revision 1 erneut bereitgestellt.

Als nächstes werden wir uns mit dem Löschen von Releases mit Helm befassen.

[[Schritt 6 - Löschen einer Version]] == Schritt 6 - Löschen einer Version

Helmfreigaben können mit dem Befehlhelm deletegelöscht werden:

helm delete dashboard-demo
Outputrelease "dashboard-demo" deleted

Obwohl die Version gelöscht wurde und die Dashboard-Anwendung nicht mehr ausgeführt wird, speichert Helm alle Revisionsinformationen, falls Sie die Version erneut bereitstellen möchten. Wenn Sie jetzt versucht haben,helm installeine neue Version vondashboard-demozu erstellen, wird folgende Fehlermeldung angezeigt:

Error: a release named dashboard-demo already exists.

Wenn Sie das Flag--deletedverwenden, um Ihre gelöschten Releases aufzulisten, sehen Sie, dass das Release noch vorhanden ist:

helm list --deleted
OutputNAME            REVISION    UPDATED                     STATUS  CHART                       NAMESPACE
dashboard-demo  3           Wed Aug  8 20:15:21 2018    DELETED kubernetes-dashboard-0.7.1  default

Umreally die Version zu löschen und alle alten Revisionen zu löschen, verwenden Sie das Flag--purge mit dem Befehlhelm delete:

helm delete dashboard-demo --purge

Jetzt wurde die Version wirklich gelöscht und Sie können den Versionsnamen wiederverwenden.

Fazit

In diesem Tutorial haben wir das Befehlszeilentoolhelmund den Begleitdiensttillerinstalliert. Wir haben auch das Installieren, Aktualisieren, Zurücksetzen und Löschen von Helm-Diagrammen und -Versionen untersucht.

Weitere Informationen zu Helm und Helmdiagrammen finden Sie unterthe official Helm documentation.