Installare le applicazioni con Helm nel servizio Azure Kubernetes
Helm è uno strumento per la creazione di pacchetti open source che consente di installare e gestire il ciclo di vita delle applicazioni Kubernetes. Analogamente agli strumenti di gestione dei pacchetti di Linux, come APT e Yum, è possibile usare Helm per gestire i grafici per Kubernetes, che sono pacchetti di risorse Kubernetes preconfigurate.
Questo articolo illustra come configurare e usare Helm in un cluster Kubernetes del servizio Azure Kubernetes.
Operazioni preliminari
- Questo articolo presuppone che sia già presente un cluster nel servizio Azure Kubernetes. Se è necessario un cluster nel servizio Azure Kubernetes, crearne uno usando l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.
- Il cluster del servizio Azure Kubernetes deve avere un Registro Azure Container integrato. Per altre informazioni sulla creazione di un cluster nel servizio Azure Kubernetes con un Registro Azure Container integrato, vedere Eseguire l'autenticazione con Registro Azure Container dal servizio Azure Kubernetes.
- È anche necessario aver installato l'interfaccia della riga di comando Helm, 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 le istruzioni di installazione nella 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 siano programmati per essere eseguiti solo nei nodi Linux. È anche necessario assicurarsi che tutti i grafici Helm installati siano programmati per l'esecuzione nei nodi corretti. I comandi in questo articolo usano node-selectors per assicurarsi che i pod siano programmati nei nodi corretti. Tuttavia, non tutti i grafici Helm possono esporre un selettore di nodi. È anche possibile prendere in considerazione l'uso di altre opzioni nel cluster, ad esempio taints.
Verificare la versione di Helm
Usare il comando
helm version
per verificare che Helm 3 sia installato.helm version
L'output di esempio seguente mostra che la versione 3.0.0 di Helm è 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 ingress-nginx usando il comando helm repo.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Trovare i grafici Helm
Cercare i grafici Helm precreati 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...
Per aggiornare l'elenco dei grafici, usare il comando helm repo update.
helm repo update
L’output di esempio seguente mostra un aggiornamento riuscito 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 dei grafici Helm nel Registro Azure Container
Questo articolo usa il grafico Helm del controller in ingresso NGINX, che si basa su tre immagini del contenitore.
Usare
az acr import
per importare le immagini del controller in 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 dei contenitori nel Registro Azure Container, è anche possibile importare grafici Helm. 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
Il seguente esempio crea uno spazio dei nomi Kubernetes per le risorse in ingresso denominate ingress-basic ed è pensato per essere usato 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 comando
kubectl get services
.kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
L'output di esempio seguente mostra l’indirizzo 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 comando
helm list
.helm list --namespace ingress-basic
L'output di esempio seguente mostra la versione ingress-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 comando
kubectl delete
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.
Azure Kubernetes Service