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

  1. 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...
    
  2. 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

  1. 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'
    ...
    
  2. 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.