Installera befintliga program med Helm i Azure Kubernetes Service (AKS)

Helm är ett paketeringsverktyg med öppen källkod som hjälper dig att installera och hantera livscykeln för Kubernetes-program. Precis som med Linux-pakethanterare, till exempel APT och Yum, kan du använda Helm för att hantera Kubernetes-diagram, som är paket med förkonfigurerade Kubernetes-resurser.

Den här artikeln visar hur du konfigurerar och använder Helm i ett Kubernetes-kluster på Azure Kubernetes Service (AKS).

Innan du börjar

  • Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du behöver ett AKS-kluster skapar du ett med Hjälp av Azure CLI, Azure PowerShell eller Azure Portal.
  • AKS-klustret måste ha en integrerad ACR. Mer information om hur du skapar ett AKS-kluster med en integrerad ACR finns i Autentisera med Azure Container Registry från Azure Kubernetes Service.
  • Du behöver också Helm CLI installerat, vilket är den klient som körs i ditt utvecklingssystem. Det gör att du kan starta, stoppa och hantera program med Helm. Om du använder Azure Cloud Shell är Helm CLI redan installerat. Installationsinstruktioner på din lokala plattform finns i Installera Helm.

Viktigt

Helm är avsett att köras på Linux-noder. Om du har Windows Server-noder i klustret måste du se till att Helm-poddar endast är schemalagda att köras på Linux-noder. Du måste också se till att alla Helm-diagram som du installerar också är schemalagda att köras på rätt noder. Kommandona i den här artikeln använder nodväljare för att kontrollera att poddar är schemalagda till rätt noder, men inte alla Helm-diagram kan exponera en nodväljare. Du kan också överväga att använda andra alternativ i klustret, till exempel taints.

Verifiera din version av Helm

  • helm version Använd kommandot för att kontrollera att Du har Helm 3 installerat.

    helm version
    

    Följande exempelutdata visar Helm version 3.0.0 installerat:

    version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
    

Installera ett program med Helm v3

Lägga till Helm-lagringsplatser

  • Lägg till lagringsplatsen ingress-nginx med kommandot helm repo .

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    

Hitta Helm-diagram

  1. Sök efter förskapade Helm-diagram med hjälp av helm-sökkommandot .

    helm search repo ingress-nginx
    

    Följande komprimerade exempelutdata visar några av de Helm-diagram som är tillgängliga för användning:

    NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
    ingress-nginx/ingress-nginx     4.7.0           1.8.0           Ingress controller for Kubernetes using NGINX a...
    
  2. Uppdatera listan över diagram med hjälp av helm-lagringsplatsens uppdateringskommando .

    helm repo update
    

    Följande exempelutdata visar en lyckad lagringsplatsuppdatering:

    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!⎈
    

Importera Helm-diagrambilderna till din ACR

Den här artikeln använder Helm-diagrammet NGINX-ingresskontrollant, som förlitar sig på tre containeravbildningar.

  • Använd az acr import för att importera NGINX-ingresskontrollantbilderna till din ACR.

    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
    

    Anteckning

    Förutom att importera containeravbildningar till din ACR kan du även importera Helm-diagram till din ACR. Mer information finns i Skicka och hämta Helm-diagram till ett Azure-containerregister.

Köra Helm-diagram

  1. Installera Helm-diagram med hjälp av helm-installationskommandot och ange ett versionsnamn och namnet på diagrammet som ska installeras.

    Tips

    I följande exempel skapas ett Kubernetes-namnområde för ingressresurserna med namnet ingress-basic och är avsett att fungera inom namnområdet. Ange ett namnområde för din egen miljö efter behov.

    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=""
    

    Följande komprimerade exempelutdata visar distributionsstatusen för Kubernetes-resurserna som skapats av Helm-diagrammet:

    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. Hämta tjänstens EXTERNA IP-adress med hjälp av kubectl get services kommandot .

    kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
    

    Följande exempelutdata visar EXTERNAL-IP för tjänsten 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
    

Lista versioner

  • Hämta en lista över versioner som är installerade i klustret med kommandot helm list .

    helm list --namespace ingress-basic
    

    Följande exempelutdata visar den ingress-nginx-version som distribuerades i föregående steg:

    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
    

Rensa resurser

När du distribuerar ett Helm-diagram skapas Kubernetes-resurser som poddar, distributioner och tjänster.

  • Rensa resurser med hjälp av helm-avinstallationskommandot och ange ditt versionsnamn.

    helm uninstall --namespace ingress-basic ingress-nginx
    

    Följande exempelutdata visar att versionen med namnet ingress-nginx har avinstallerats:

    release "nginx-ingress" uninstalled
    
  • Ta bort hela exempelnamnområdet tillsammans med resurserna med hjälp av kubectl delete kommandot och ange namnområdets namn.

    kubectl delete namespace ingress-basic
    

Nästa steg

Mer information om hur du hanterar Kubernetes-programdistributioner med Helm finns i Helm-dokumentationen.