Instalar aplicações existentes com o Helm no Azure Kubernetes Service (AKS)

O Helm é uma ferramenta de empacotamento open source que o ajuda a instalar e gerir o ciclo de vida das aplicações do Kubernetes. À semelhança dos gestores de pacotes do Linux, como o APT e o Yum, pode utilizar o Helm para gerir gráficos do Kubernetes, que são pacotes de recursos do Kubernetes pré-configurados.

Este artigo mostra-lhe como configurar e utilizar o Helm num cluster do Kubernetes no Azure Kubernetes Service (AKS).

Antes de começar

Importante

O Helm destina-se a ser executado em nós linux. Se tiver nós do Windows Server no cluster, tem de garantir que os pods do Helm só estão agendados para serem executados em nós do Linux. Também tem de garantir que todos os gráficos Helm que instalar também estão agendados para serem executados nos nós corretos. Os comandos neste artigo utilizam seletores de nós para garantir que os pods estão agendados para os nós corretos, mas nem todos os gráficos Helm podem expor um seletor de nós. Também pode considerar a utilização de outras opções no cluster, como taints.

Verificar a sua versão do Helm

  • Utilize o comando para verificar se tem o helm version Helm 3 instalado.

    helm version
    

    O seguinte exemplo de saída mostra a versão 3.0.0 do Helm instalada:

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

Instalar uma aplicação com o Helm v3

Adicionar repositórios helm

  • Adicione o repositório ingress-nginx com o comando do repositório helm .

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

Localizar gráficos Helm

  1. Procure gráficos Helm pré-criados com o comando helm search .

    helm search repo ingress-nginx
    

    O seguinte resultado de exemplo condensado mostra alguns dos gráficos Helm disponíveis para utilização:

    NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
    ingress-nginx/ingress-nginx     4.7.0           1.8.0           Ingress controller for Kubernetes using NGINX a...
    
  2. Atualize a lista de gráficos com o comando de atualização do repositório helm .

    helm repo update
    

    O seguinte resultado de exemplo mostra uma atualização de repositório com êxito:

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

Importar as imagens do gráfico Helm para o seu ACR

Este artigo utiliza o gráfico Helm do controlador de entrada NGINX, que se baseia em três imagens de contentor.

  • Utilize az acr import para importar as imagens do controlador de entrada NGINX para o seu 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
    

    Nota

    Além de importar imagens de contentor para o seu ACR, também pode importar gráficos Helm para o seu ACR. Para obter mais informações, veja Enviar e solicitar gráficos Helm para um registo de contentor do Azure.

Executar gráficos Helm

  1. Instale gráficos Helm com o comando de instalação do helm e especifique um nome de versão e o nome do gráfico a instalar.

    Dica

    O exemplo seguinte cria um espaço de nomes do Kubernetes para os recursos de entrada denominados ingress-basic e destina-se a trabalhar nesse espaço de nomes. Especifique um espaço de nomes para o seu próprio ambiente, conforme necessário.

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

    O seguinte resultado de exemplo condensado mostra o estado de implementação dos recursos do Kubernetes criados pelo gráfico 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. Obtenha o IP EXTERNO do seu serviço com o kubectl get services comando .

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

    O resultado de exemplo seguinte mostra o EXTERNAL-IP para o serviço 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
    

Listar lançamentos

  • Obtenha uma lista de versões instaladas no cluster com o helm list comando .

    helm list --namespace ingress-basic
    

    O resultado de exemplo seguinte mostra a versão ingress-nginx implementada no passo anterior:

    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
    

Limpar os recursos

Implementar um gráfico Helm cria recursos do Kubernetes, como pods, implementações e serviços.

  • Limpe os recursos com o comando de desinstalação helm e especifique o nome da sua versão.

    helm uninstall --namespace ingress-basic ingress-nginx
    

    O seguinte resultado de exemplo mostra que a versão com o nome ingress-nginx foi desinstalada:

    release "nginx-ingress" uninstalled
    
  • Elimine todo o espaço de nomes de exemplo juntamente com os recursos com o kubectl delete comando e especifique o nome do espaço de nomes.

    kubectl delete namespace ingress-basic
    

Passos seguintes

Para obter mais informações sobre como gerir implementações de aplicações do Kubernetes com o Helm, veja a documentação do Helm.