Installieren vorhandener Anwendungen mit Helm in Azure Kubernetes Service (AKS)
Helm ist ein Open Source-Verpackungstool, das Ihnen dabei hilft, Kubernetes-Anwendungen zu installieren und ihren Lebenszyklus zu verwalten. Ähnlich wie Linux-Paket-Manager (z. B. APT und Yum) wird Helm zur Verwaltung von Kubernetes-Diagrammen verwendet, bei denen es sich um Pakete aus vorkonfigurierten Kubernetes-Ressourcen handelt.
Dieser Artikel veranschaulicht die Konfiguration und Verwendung von Helm in einem Kubernetes-Cluster in AKS (Azure Kubernetes Service).
Voraussetzungen
- In diesem Artikel wird vorausgesetzt, dass Sie über einen AKS-Cluster verfügen. Wenn Sie einen AKS-Cluster benötigen, erstellen Sie einen mithilfe der Azure CLI, von Azure PowerShell oder des Azure-Portals.
- Ihr AKS-Cluster muss über eine integrierte ACR-Instanz verfügen. Ausführliche Informationen zum Erstellen eines AKS-Clusters mit integrierter ACR-Instanz finden Sie unter Authentifizieren per Azure Container Registry über Azure Kubernetes Service.
- Außerdem muss die Helm CLI installiert sein, d. h. der Client, der auf Ihrem Entwicklungssystem ausgeführt wird. Sie ermöglicht es Ihnen, Anwendungen mit Helm zu starten, zu beenden und zu verwalten. Wenn Sie Azure Cloud Shell verwenden, ist die Helm-CLI bereits installiert. Installationsanweisungen für Ihre lokale Plattform finden Sie unter Installieren von Helm.
Wichtig
Helm ist für die Ausführung auf Linux-Knoten vorgesehen. Wenn sich in Ihrem Cluster Windows Server-Knoten befinden, müssen Sie sicherstellen, dass Helm-Pods nur für die Ausführung auf Linux-Knoten geplant sind. Sie müssen auch sicherstellen, dass alle von Ihnen installierten Helm-Diagramme auch für die Ausführung auf den richtigen Knoten geplant sind. Die Befehle in diesem Artikel verwenden node-selectors, um sicherzustellen, dass die Pods für die richtigen Knoten geplant sind, aber nicht alle Helm-Charts können einen Knotenselektor verfügbar machen. Sie können auch andere Optionen für Ihren Cluster verwenden, z. B. Taints.
Überprüfen Ihrer Version von Helm
Überprüfen Sie mit dem Befehl
helm version
, ob Helm 3 installiert ist:helm version
Die folgende Beispielausgabe zeigt die installierte Helm-Version 3.0.0:
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
Installieren einer Anwendung mit Helm v3
Hinzufügen von Helm-Repositorys
Verwenden Sie den Befehl helm repo, um das Repository ingress-nginx hinzuzufügen.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Suchen von Helm-Diagrammen
Suchen Sie mithilfe des Befehls helm search nach zuvor erstellten Helm-Charts:
helm search repo ingress-nginx
Die folgende verkürzte Beispielausgabe veranschaulicht einige der verfügbaren Helm-Diagramme:
NAME CHART VERSION APP VERSION DESCRIPTION ingress-nginx/ingress-nginx 4.7.0 1.8.0 Ingress controller for Kubernetes using NGINX a...
Verwenden Sie zum Aktualisieren der Liste der Charts den Befehl helm repo update:
helm repo update
Die folgende Beispielausgabe stellt das erfolgreiche Update eines Repositorys dar:
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!⎈
Importieren der Helm-Chartimages in Ihre ACR-Instanz
In diesem Artikel wird das Helm-Chart des NGINX-Eingangsdatencontrollers verwendet, das auf drei Containerimages basiert.
Verwenden Sie
az acr import
, um die NGINX-Eingangscontrollerimages in Ihre ACR zu importieren:REGISTRY_NAME=<REGISTRY_NAME> CONTROLLER_REGISTRY=registry.k8s.io CONTROLLER_IMAGE=ingress-nginx/controller CONTROLLER_TAG=v1.8.0 PATCH_REGISTRY=registry.k8s.io PATCH_IMAGE=ingress-nginx/kube-webhook-certgen PATCH_TAG=v20230407 DEFAULTBACKEND_REGISTRY=registry.k8s.io DEFAULTBACKEND_IMAGE=defaultbackend-amd64 DEFAULTBACKEND_TAG=1.5 az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
Hinweis
Zusätzlich zum Importieren von Containerimages in Ihre ACR können Sie auch Helm-Diagramme in Ihre ACR importieren. Weitere Informationen finden Sie unter Pushen und Pullen von Helm-Charts in Azure Container Registry.
Ausführen von Helm-Diagrammen
Verwenden Sie zum Installieren von Helm-Charts den Befehl helm install, und geben Sie einen Releasenamen und den Namen des zu installierenden Charts an.
Tipp
Im folgenden Beispiel wird der Kubernetes-Namespace namens ingress-basic für die Eingangsressourcen erstellt, und es ist beabsichtigt, in diesem Namespace zu arbeiten. Geben Sie ggf. einen Namespace für Ihre eigene Umgebung an.
ACR_URL=<REGISTRY_URL> # Create a namespace for your ingress resources kubectl create namespace ingress-basic # Use Helm to deploy an NGINX ingress controller helm install ingress-nginx ingress-nginx/ingress-nginx \ --version 4.0.13 \ --namespace ingress-basic \ --set controller.replicaCount=2 \ --set controller.nodeSelector."kubernetes\.io/os"=linux \ --set controller.image.registry=$ACR_URL \ --set controller.image.image=$CONTROLLER_IMAGE \ --set controller.image.tag=$CONTROLLER_TAG \ --set controller.image.digest="" \ --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \ --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \ --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \ --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \ --set defaultBackend.image.registry=$ACR_URL \ --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \ --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \ --set defaultBackend.image.digest=""
Die folgende verkürzte Beispielausgabe zeigt den Bereitstellungsstatus der Kubernetes-Ressource an, die vom Helm-Diagramm erstellt wurde:
NAME: nginx-ingress LAST DEPLOYED: Wed Jul 28 11:35:29 2021 NAMESPACE: ingress-basic 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 ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller' ...
Rufen Sie den EXTERNAL-IP-Wert Ihres Diensts mithilfe des Befehls
kubectl get services
ab:kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
Die folgende Beispielausgabe zeigt EXTERNAL-IP für den Dienst ingress-nginx-ingress-nginx-controller:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx-ingress-ingress-nginx-controller LoadBalancer 10.0.254.93 <EXTERNAL_IP> 80:30004/TCP,443:30348/TCP 61s app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
Releases auflisten
Rufen Sie eine Liste der im Cluster installierten Releases mithilfe des Befehls
helm list
ab:helm list --namespace ingress-basic
In der folgenden Beispielausgabe wird das ingress-nginx-Release angezeigt, das im vorherigen Schritt bereitgestellt wurde:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx ingress-basic 1 2021-07-28 11:35:29.9623734 -0500 CDT deployed ingress-nginx-3.34.0 0.47.0
Bereinigen von Ressourcen
Durch die Bereitstellung eines Helm-Charts werden Kubernetes-Ressourcen wie Pods, Bereitstellungen und Dienste erstellt.
Bereinigen Sie Ressourcen mit dem Befehl helm uninstall, und geben Sie Ihren Releasenamen an.
helm uninstall --namespace ingress-basic ingress-nginx
Die folgende Beispielausgabe zeigt, dass das Release mit dem Namen ingress-nginx deinstalliert wurde:
release "nginx-ingress" uninstalled
Löschen Sie den gesamten Beispielnamespace zusammen mit den Ressourcen mithilfe des Befehls
kubectl delete
, und geben Sie Ihren Namespacenamen an:kubectl delete namespace ingress-basic
Nächste Schritte
Weitere Informationen zum Verwalten von Kubernetes-Anwendungsbereitstellungen mit Helm finden Sie in der Helm-Dokumentation.
Azure Kubernetes Service