Installare applicazioni esistenti con Helm in servizio Azure Kubernetes (servizio Azure Kubernetes)
Helm è uno strumento di creazione dei pacchetti open source che consente di installare e gestire il ciclo di vita delle applicazioni Kubernetes. Analogamente alle gestioni pacchetti Linux, ad esempio APT e Yum, è possibile usare Helm per gestire i grafici Kubernetes, che sono pacchetti di risorse Kubernetes preconfigurate.
Questo articolo illustra come configurare e usare Helm in un cluster Kubernetes in servizio Azure Kubernetes (servizio Azure Kubernetes).
Prima di iniziare
- Questo articolo presuppone che sia presente un cluster del servizio Azure Kubernetes esistente. Se è necessario un cluster del servizio Azure Kubernetes, crearne uno usando l'interfaccia della riga di comando di Azure, Azure PowerShell o portale di Azure.
- Il cluster del servizio Azure Kubernetes deve avere un registro Azure Container integrato. Per informazioni dettagliate sulla creazione di un cluster del servizio Azure Kubernetes con un registro Azure Container integrato, vedere Eseguire l'autenticazione con Registro Azure Container da servizio Azure Kubernetes.
- È necessaria anche l'interfaccia della riga di comando Helm installata, ovvero il client in esecuzione nel sistema di sviluppo. Consente di avviare, arrestare e gestire le applicazioni con Helm. Se si usa Azure Cloud Shell, l'interfaccia della riga di comando di Helm è già installata. Per istruzioni di installazione sulla piattaforma locale, vedere Installazione di Helm.
Importante
Helm è progettato per l'esecuzione in nodi Linux. Se nel cluster sono presenti nodi Windows Server, è necessario assicurarsi che i pod Helm vengano eseguiti solo nei nodi Linux. È anche necessario assicurarsi che tutti i grafici Helm installati siano pianificati per l'esecuzione nei nodi corretti. I comandi in questo articolo usano i selettori di nodo per assicurarsi che i pod siano pianificati nei nodi corretti, ma non tutti i grafici Helm possono esporre un selettore di nodo. È anche possibile prendere in considerazione l'uso di altre opzioni nel cluster, ad esempio taints.
Verificare la versione di Helm
Usare il
helm version
comando per verificare che Helm 3 sia installato.helm version
L'output di esempio seguente mostra la versione Helm 3.0.0 installata:
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
Installare un'applicazione con Helm v3
Aggiungere repository Helm
Aggiungere il repository in ingresso-nginx usando il comando del repository helm .
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Trovare i grafici Helm
Cercare grafici Helm creati in modo preliminare usando il comando helm search .
helm search repo ingress-nginx
L'output di esempio sintetico seguente mostra alcuni dei grafici di Helm disponibili per l'uso:
NAME CHART VERSION APP VERSION DESCRIPTION ingress-nginx/ingress-nginx 4.7.0 1.8.0 Ingress controller for Kubernetes using NGINX a...
Aggiornare l'elenco dei grafici usando il comando helm repo update .
helm repo update
L'output di esempio seguente mostra un aggiornamento corretto del repository:
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!⎈
Importare le immagini del grafico Helm nel Registro Azure Container
Questo articolo usa il grafico Helm del controller di ingresso NGINX, che si basa su tre immagini del contenitore.
Usare
az acr import
per importare le immagini del controller di ingresso NGINX nel Registro Azure Container.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
Nota
Oltre a importare immagini contenitore nel Registro Azure Container, è anche possibile importare grafici Helm nel Registro Azure Container. Per altre informazioni, vedere Eseguire il push e il pull dei grafici Helm in un registro contenitori di Azure.
Eseguire i grafici Helm
Installare i grafici Helm usando il comando helm install e specificare un nome di versione e il nome del grafico da installare.
Suggerimento
L'esempio seguente crea uno spazio dei nomi Kubernetes per le risorse in ingresso denominate in ingresso-basic ed è destinato a funzionare all'interno di tale spazio dei nomi. Specificare uno spazio dei nomi per il proprio ambiente in base alle esigenze.
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=""
L'output di esempio sintetico seguente mostra lo stato della distribuzione delle risorse Kubernetes create dal grafico Helm:
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' ...
Ottenere l'indirizzo EXTERNAL-IP del servizio usando il
kubectl get services
comando .kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
L'output di esempio seguente mostra il servizio EXTERNAL-IP per il servizio 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
Elencare le versioni
Ottenere un elenco delle versioni installate nel cluster usando il
helm list
comando .helm list --namespace ingress-basic
L'output di esempio seguente mostra la versione in ingresso-nginx distribuita nel passaggio precedente:
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
Pulire le risorse
La distribuzione di un grafico Helm crea risorse Kubernetes come pod, distribuzioni e servizi.
Pulire le risorse usando il comando helm uninstall e specificare il nome della versione.
helm uninstall --namespace ingress-basic ingress-nginx
L'output di esempio seguente mostra che la versione denominata ingress-nginx è stata disinstallata:
release "nginx-ingress" uninstalled
Eliminare l'intero spazio dei nomi di esempio insieme alle risorse usando il
kubectl delete
comando e specificare il nome dello spazio dei nomi.kubectl delete namespace ingress-basic
Passaggi successivi
Per altre informazioni sulla distribuzione delle applicazioni Kubernetes con Helm, vedere la documentazione di Helm.