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

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

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