Início Rápido: Desenvolver no Serviço de Kubernetes do Azure (AKS) com o Helm

Helm é uma ferramenta de empacotamento de software livre que ajuda a instalar e gerenciar o ciclo de vida de aplicativos Kubernetes. Semelhante a gerenciadores de pacotes do Linux, como o APT e o Yum, o Helm gerencia gráficos do Kubernetes, que são pacotes de recursos de Kubernetes pré-configurados.

Neste guia de início rápido, você usa o Helm para empacotar e executar um aplicativo no AKS. Para obter mais informações sobre como instalar um aplicativo existente usando o Helm, confira Instalar aplicativos existentes com o Helm no AKS.

Pré-requisitos

Criar um Registro de Contêiner do Azure

Você precisa armazenar suas imagens de contêiner em um Registro de Contêiner do Azure (ACR) para executar seu aplicativo no cluster do AKS usando o Helm. O seu nome do registro deve ser exclusivo no Azure e conter de 5 a 50 caracteres alfanuméricos. Somente são permitidos caracteres minúsculos. A SKU Basic é um ponto de entrada de otimização de custo para fins de desenvolvimento que fornece um equilíbrio entre o armazenamento e taxa de transferência.

  1. Crie um grupo de recursos do Azure usando o comando az group create. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup no local eastus.

    az group create --name myResourceGroup --location eastus
    
  2. Crie um Registro de Contêiner do Azure com um nome exclusivo chamando o comando az acr create. O exemplo a seguir cria um ACR chamado myhelmacr com o SKU Básico.

    az acr create --resource-group myResourceGroup --name myhelmacr --sku Basic
    

    Sua saída deve se parecer com o seguinte exemplo resumido. Anote o valor de loginServer do seu ACR para usar em uma etapa posterior.

    {
      "adminUserEnabled": false,
      "creationDate": "2023-12-26T22:36:23.998425+00:00",
      "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myhelmacr",
      "location": "eastus",
      "loginServer": "myhelmacr.azurecr.io",
      "name": "myhelmacr",
      "networkRuleSet": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sku": {
        "name": "Basic",
        "tier": "Basic"
      },
      "status": null,
      "storageAccount": null,
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries"
    }
    

Criar um cluster do AKS

O novo cluster AKS precisa acessar seu ACR para efetuar pull das imagens de contêiner e executá-las.

  • Crie um cluster do AKS usando o comando az aks create com o parâmetro --attach-acr para conceder ao cluster acesso ao teu ACR. O exemplo a seguir cria um cluster do AKS denominado myAKSCluster e concede acesso ao ACR myhelmacr. Certifique-se de substituir myhelmacr pelo nome do seu ACR.

    az aks create --resource-group myResourceGroup --name myAKSCluster --location eastus --attach-acr myhelmacr --generate-ssh-keys
    

Conectar-se ao cluster do AKS

Para conectar um cluster do Kubernetes localmente, use o cliente de linha de comando do Kubernetes, kubectl. kubectl já está instalado se você usa o Azure Cloud Shell.

  1. Instale kubectl localmente usando o comando az aks install-cli.

    az aks install-cli
    
  2. Configure o kubectl para se conectar ao cluster do Kubernetes usando o comando az aks get-credentials. O comando a seguir obtém as credenciais do cluster do AKS chamado myAKSCluster em myResourceGroup.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Baixar o aplicativo de exemplo

Este guia de início rápido usa o aplicativo de voto do Azure.

  1. Clone o aplicativo do GitHub usando o comando git clone.

    git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
    
  2. Navegue até o diretório azure-vote usando o comando cd.

    cd azure-voting-app-redis/azure-vote/
    

Compilar e enviar por push o aplicativo de exemplo para o ACR

  • Crie e envie por push a imagem para o seu ACR usando o comando az acr build. O exemplo a seguir cria uma imagem chamada azure-vote-front:v1 e a envia por push para o ACR myhelmacr. Certifique-se de substituir myhelmacr pelo nome do seu ACR.

    az acr build --image azure-vote-front:v1 --registry myhelmacr --file Dockerfile .
    

Observação

Você também pode importar gráficos do Helm para o ACR. Para saber mais, confira Enviar por push e efetuar pull de gráficos Helm para um registro de contêiner do Azure.

Criar um gráfico Helm

  1. Gere o gráfico Helm usando o comando helm create.

    helm create azure-vote-front
    
  2. Atualize azure-vote-front/Chart.yaml para adicionar uma dependência para o gráfico redis do repositório de gráficos https://charts.bitnami.com/bitnami e atualizar o appVersion para v1, como mostrado no exemplo a seguir:

    Observação

    As versões da imagem de contêiner mostradas neste guia foram testadas para funcionar com este exemplo, mas podem não ser a versão mais recente disponível.

    apiVersion: v2
    name: azure-vote-front
    description: A Helm chart for Kubernetes
    
    dependencies:
      - name: redis
        version: 17.3.17
        repository: https://charts.bitnami.com/bitnami
    
    ...
    # This is the version number of the application being deployed. This version number should be
    # incremented each time you make changes to the application.
    appVersion: v1
    
  3. Atualize suas dependências de gráficos do Helm usando o comando helm dependency update.

    helm dependency update azure-vote-front
    
  4. Atualize azure-vote-front/values.yaml com as seguintes alterações.

    • Adicione uma seção Redis para definir os detalhes da imagem, a porta do contêiner e o nome da implantação.
    • Adicione um backendName para conectar a parte de front-end à implantação do redis.
    • Altere image.repository para <loginServer>/azure-vote-front.
    • Altere image.tag para v1.
    • Altere o service.type para LoadBalancer.

    Por exemplo:

    replicaCount: 1
    backendName: azure-vote-backend-master
    redis:
      image:
        registry: mcr.microsoft.com
        repository: oss/bitnami/redis
        tag: 6.0.8
      fullnameOverride: azure-vote-backend
      auth:
        enabled: false
    
    image:
      repository: myhelmacr.azurecr.io/azure-vote-front
      pullPolicy: IfNotPresent
      tag: "v1"
    ...
    service:
      type: LoadBalancer
      port: 80
    ...
    
  5. Adicione uma seção env a azure-vote-front/templates/deployment.yaml para aprovar o nome da implantação do redis.

    ...
          containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              env:
              - name: REDIS
                value: {{ .Values.backendName }}
    ...
    

Executar o gráfico Helm

  1. Com o comando helm install, instale o aplicativo que usa o gráfico Helm.

    helm install azure-vote-front azure-vote-front/
    
  2. Demora alguns minutos para o serviço retornar um endereço IP público. Monitore o andamento usando o comando kubectl get service com o argumento --watch.

    kubectl get service azure-vote-front --watch
    

    Quando o serviço estiver pronto, o valor EXTERNAL-IP será alterado de <pending> para um endereço IP. Pressione CTRL+C para interromper o processo de inspeção kubectl.

      NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
      azure-vote-front   LoadBalancer   10.0.18.228   <pending>       80:32021/TCP   6s
      ...
      azure-vote-front   LoadBalancer   10.0.18.228   52.188.140.81   80:32021/TCP   2m6s
    
  3. Navegue até o balanceador de carga do aplicativo em um navegador usando o <EXTERNAL-IP> para ver o aplicativo de exemplo.

Excluir o cluster

  • Remova o seu grupo de recursos, cluster do AKS, registro de contêiner do Azure, imagens de contêiner armazenadas no ACR e todos os recursos relacionados usando o comando az group delete com o parâmetro --yes para confirmar a exclusão e o parâmetro --no-wait para retornar ao prompt de comando sem precisar aguardar a conclusão da operação.

    az group delete --name myResourceGroup --yes --no-wait
    

Observação

Se você criou seu cluster do AKS com uma identidade gerenciada atribuída pelo sistema (a opção de identidade padrão neste guia de início rápido), a identidade é gerenciada pela plataforma e não requer remoção.

Se você criou seu cluster do AKS com uma entidade de serviço, a entidade de serviço não é removida quando você exclui o cluster. Para remover a entidade de serviço, leia as Considerações sobre a entidade de serviço do AKS e sua exclusão.

Próximas etapas

Para obter mais informações sobre como usar o Helm, confira a documentação do Helm.