Instalar aplicativos existentes com o Helm no AKS (Serviço de Kubernetes do Azure)
Helm é uma ferramenta de empacotamento de software livre que ajuda a instalar e gerenciar o ciclo de vida de aplicativos Kubernetes. Semelhante aos gerenciadores de pacotes do Linux, como APT e Yum, você pode usar o Helm para gerenciar os gráficos do Kubernetes, que são pacotes de recursos pré-configurados do Kubernetes.
Este artigo mostra como configurar e usar o Helm em um cluster do Kubernetes no Azure Kubernetes Service (AKS).
Antes de começar
- Este artigo pressupõe que você tenha um cluster do AKS. Se você precisar de um cluster do AKS, crie um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.
- Seu cluster do AKS precisa ter um ACR integrado. Para obter detalhes sobre como criar um cluster do AKS com um ACR integrado, consulte Autenticar com o Registro de Contêiner do Azure a partir do Serviço de Kubernetes do Azure.
- Também é necessário ter instalada a CLI do Helm, que é o cliente em execução no seu sistema de desenvolvimento. Ela permite iniciar, interromper e gerenciar aplicativos com o Helm. Se você usa o Azure Cloud Shell, a CLI do Helm já está instalada. Confira instruções de instalação em sua plataforma local em Instalação do Helm.
Importante
O Helm destina-se a ser executado em nós do Linux. Se você tiver nós do Windows Server em seu cluster, deverá garantir que os pods do Helm sejam agendados apenas para execução em nós do Linux. Também é preciso garantir que todos os gráficos do Helm instalados também estejam agendados para execução nos nós corretos. Os comandos neste artigo usam seletores de nós para garantir que os pods sejam agendados para os nós corretos, mas nem todos os gráficos Helm podem expor um seletor de nós. Você também pode considerar o uso de outras opções em seu cluster, como taints.
Como verificar a versão do Helm
Use o comando
helm version
para verificar se você tem o Helm 3 instalado.helm version
O exemplo de saída a seguir 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 um aplicativo com o Helm v3
Adicionar repositórios do Helm
Adicione o repositório ingress-nginx usando o comando helm repo.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Localizar gráficos Helm
Procure gráficos Helm pré-criados usando o comando helm search.
helm search repo ingress-nginx
A saída de exemplo condensada a seguir mostra alguns dos gráficos do Helm disponíveis para uso:
NAME CHART VERSION APP VERSION DESCRIPTION ingress-nginx/ingress-nginx 4.7.0 1.8.0 Ingress controller for Kubernetes using NGINX a...
Atualize a lista de gráficos usando o comando helm repo update.
helm repo update
O exemplo de saída a seguir mostra uma atualização bem-sucedida do repositório:
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!⎈
Importe as imagens do gráfico Helm no seu ACR
Este artigo usa o gráfico do Helm do controlador de entrada NGINX, que se baseia em três imagens de contêiner.
Use
az acr import
para importar as imagens do controlador de entrada do NGINX no 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
Observação
Além de importar imagens de contêiner no ACR, você também pode importar gráficos do Helm no ACR. Para saber mais, confira Enviar por push e efetuar pull de gráficos Helm para um registro de contêiner do Azure.
Executar gráficos Helm
Instale gráficos Helm usando o comando helm install e especifique um nome de versão e o nome do gráfico a ser instalado.
Dica
O exemplo a seguir cria um namespace Kubernetes para os recursos de entrada chamados ingress-basic e tem como objetivo funcionar nesse namespace. Especifique um namespace para 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=""
A saída do exemplo condensado a seguir mostra o status de implantação dos recursos do Kubernetes criados pelo gráfico do 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' ...
Obtenha o EXTERNAL-IP do seu serviço usando o comando
kubectl get services
.kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
O exemplo de saída a seguir 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 versões
Obtenha uma lista de versões instaladas no seu cluster usando o comando
helm list
.helm list --namespace ingress-basic
O exemplo de saída a seguir mostra a versão ingress-nginx implantada na etapa 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 recursos
A implantação de um gráfico Helm cria recursos do Kubernetes, como pods, implantações e serviços.
Limpe os recursos usando o comando helm uninstall e especifique o nome da versão.
helm uninstall --namespace ingress-basic ingress-nginx
A saída de exemplo a seguir mostra que a versão nomeada ingress-nginx foi desinstalada:
release "nginx-ingress" uninstalled
Exclua todo o namespace da amostra junto com os recursos usando o comando
kubectl delete
e especifique o nome do namespace.kubectl delete namespace ingress-basic
Próximas etapas
Para saber mais sobre como gerenciar implantações de aplicativo do Kubernetes usando o Helm, consulte a documentação do Helm.
Azure Kubernetes Service