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 Befehlszeilentool
kubectl
, das für die Verbindung mit Ihrem Cluster konfiguriert ist. Weitere Informationen zum Installieren vonkubectl
in 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 mit
kubectl
auf 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-example
verbunden 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 Befehlszeilenprogrammhelm
auf 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 vontiller
Zugriff 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-demo
vornehmen, um den Update- und Rollback-Prozess zu demonstrieren: Wir aktualisieren den Namen des Dashboard-Dienstes auf nurdashboard
anstelle vondashboard-demo-kubernetes-dashboard
.
Das Diagrammkubernetes-dashboard
bietet eine Konfigurationsoption vonfullnameOverride
zur 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 Namespacedefault
ausgefü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-demo
aktualisiert 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 delete
gelö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 install
eine neue Version vondashboard-demo
zu erstellen, wird folgende Fehlermeldung angezeigt:
Error: a release named dashboard-demo already exists.
Wenn Sie das Flag--deleted
verwenden, 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 Befehlszeilentoolhelm
und den Begleitdiensttiller
installiert. 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.