Tutorial – dimensionar aplicativos no AKS (Serviço de Kubernetes do Azure)

Se seguiu os tutoriais anteriores, você tem um cluster do Kubernetes funcionando e um aplicativo front do Microsoft Azure Store.

Neste tutorial, você dimensiona os pods no aplicativo, tenta dimensionar automaticamente o pod e dimensiona o número de nós de VM do Azure para alterar a capacidade do cluster para hospedar cargas de trabalho. Você aprenderá como:

  • Dimensionar os nós Kubernetes.
  • Dimensionar pods Kubernetes manualmente que executam seu aplicativo.
  • Configurar os pods de dimensionamento automático que executam o front-end do aplicativo.

Antes de começar

Em tutoriais anteriores, você empacotou um aplicativo em uma imagem de contêiner, carregou a imagem no Registro de Contêiner do Azure, criou um cluster do AKS, implantou um aplicativo e usou o Barramento de Serviço do Azure para reimplantar um aplicativo atualizado. Se você não concluiu essas etapas e deseja acompanhar este tutorial, comece com Tutorial 1: preparar um aplicativo para o AKS.

Este tutorial altera o número de pods e de nós e pode aumentar os custos de computação. Use uma identidade com permissão para dimensionar cargas de trabalho e pools de nós do AKS, como Colaborador ou Proprietário para o grupo de recursos.

Este tutorial requer a CLI do Azure, versão 2.34.1 ou posterior. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Dimensionar pods manualmente

Área de trabalho do AKS

  1. Edite a configuração de dimensionamento para o order-service selecionando Dimensionamento>Selecionar implantação: order-service>Editar configuração>Número de réplicas: 5. Captura de tela que mostra a edição da configuração de escala do serviço de pedidos.

  2. Verifique se a atualização de implantação foi concluída antes de continuar.

  3. Exiba os pods no cluster usando o comando kubectl get.

    kubectl get pods
    

    A saída de exemplo a seguir mostra os pods que executam o aplicativo front do Microsoft Azure Store:

    NAME                               READY     STATUS     RESTARTS   AGE
    order-service-848767080-tf34m      1/1       Running    0          31m
    product-service-4019737227-2q2qz   1/1       Running    0          31m
    store-front-2606967446-2q2qz       1/1       Running    0          31m
    
  4. Altere manualmente o número de pods na implantação store-front usando o comando kubectl scale.

    kubectl scale --replicas=5 deployment.apps/store-front
    
  5. Verifique se os pods adicionais foram criados usando o comando kubectl get pods.

    kubectl get pods --selector app=store-front
    

    A saída de exemplo a seguir mostra os pods adicionais que executam o aplicativo Front da Microsoft Azure Store:

    NAME                              READY     STATUS    RESTARTS   AGE
    store-front-3309479140-2hfh0      1/1       Running   0          3m
    store-front-3309479140-bzt05      1/1       Running   0          3m
    store-front-3309479140-fvcvm      1/1       Running   0          3m
    store-front-3309479140-hrbf2      1/1       Running   0          15m
    store-front-3309479140-qphz8      1/1       Running   0          3m
    

Dimensionamento automático de pods

Área de trabalho do AKS

  1. No projeto, selecione o botão Implantar aplicativo>Kubernetes YAML. Selecione a origem do aplicativo, YAML do Kubernetes

  2. Copie e cole esse manifesto do dimensionador automático YAML e os limites de recursos.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: store-front-hpa
    spec:
      maxReplicas: 10 # define max replica count
      minReplicas: 3  # define min replica count
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: store-front
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
    
  3. Selecione Avançar>Implantar>Fechar. Captura de tela que mostra a colagem na configuração do YAML.

  4. Selecione Dimensionar>Selecionar Implantação: store-front. Você pode ver que o modo de dimensionamento agora está definido como HPA, Limites de Réplica e Uso da CPU/Destino definidos pela configuração. Captura de tela que mostra a visão geral de escalonamento da área de trabalho do AKS mostrando o modo HPA para a implantação na frente da loja.

  5. Verifique se o modo HPA está habilitado e se os limites da réplica correspondem aos valores de manifesto.

Linha de comando

Para usar o dimensionador automático de pod horizontal, todos os contêineres devem ter solicitações e limites de CPU definidos, e os pods devem ter solicitações especificadas. Na implantação aks-store-quickstart, o contêiner de front-end solicita 1m CPU, com um limite de 1000m CPU.

Essas solicitações e os limites de recursos são definidos para cada contêiner conforme mostrado no seguinte exemplo condensado de YAML:

...
  containers:
  - name: store-front
    image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
    ports:
    - containerPort: 8080
      name: store-front
...
    resources:
      requests:
        cpu: 1m
...
      limits:
        cpu: 1000m
...

Dimensionamento automático de pods usando um arquivo de manifesto

  1. Crie um arquivo de manifesto para definir o comportamento do dimensionador automático e os limites de recursos, conforme mostrado no seguinte arquivo de manifesto condensado de exemplo aks-store-quickstart-hpa.yaml:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: store-front-hpa
    spec:
      maxReplicas: 10 # define max replica count
      minReplicas: 3  # define min replica count
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: store-front
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
    
  2. Aplique o arquivo de manifesto do dimensionador automático usando o comando kubectl apply.

    kubectl apply -f aks-store-quickstart-hpa.yaml
    
  3. Verifique a status do dimensionador automático usando o comando kubectl get hpa.

    kubectl get hpa
    

    Após alguns minutos, com carga mínima no aplicativo Front da Microsoft Azure Store, o número de réplicas de pod diminui para três. Você pode usar o comando kubectl get pods novamente para conferir os pods desnecessários que estão sendo removidos.

    Continue quando as colunas TARGETS e REPLICAS mostrarem o comportamento de escalonamento automático esperado para store-front-hpa.

Observação

Você pode habilitar o complemento AKS do KEDA (dimensionador automático baseado em eventos) baseado em Kubernetes para seu cluster impulsionar o dimensionamento com base no número de eventos que precisam ser processados. Para obter mais informações, consulte Habilitar o dimensionamento automático simplificado de aplicativos com o complemento KEDA (dimensionador automático baseado em eventos) do Kubernetes (versão prévia).

Dimensionar nós do AKS manualmente

Observação

Se você criou um cluster automático do AKS, essas etapas não se aplicam porque o cluster dimensiona automaticamente nós.

Se você criou seu cluster AKS Standard usando os comandos nos tutoriais anteriores, seu cluster tem três nós. Se você quiser aumentar ou diminuir esse valor, poderá ajustar manualmente o número de nós.

O exemplo a seguir aumenta o número de nós para cinco no cluster kubernetes chamado myAKSCluster. Esse comando leva alguns minutos para ser concluído.

  • Escale seus nós de cluster usando o comando az aks scale.

    Depois que o cluster for dimensionado com êxito, sua saída será semelhante à seguinte saída de exemplo:

    az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster --query "[].{name:name,count:count}" -o table
    
    az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 5
    

    Depois que o cluster for dimensionado com êxito, sua saída será semelhante à seguinte saída de exemplo:

    "aadProfile": null,
    "addonProfiles": null,
    "agentPoolProfiles": [
      {
        ...
        "count": 5,
        "mode": "System",
        "name": "nodepool1",
        "osDiskSizeGb": 128,
        "osDiskType": "Managed",
        "osType": "Linux",
        "ports": null,
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
        ...
      }
      ...
    ]
    

Você também pode dimensionar automaticamente os nós em seu cluster. Para obter mais informações, consulte Usar o dimensionador automático de cluster com pools de nós.

Próximas etapas

Neste tutorial, você usou diferentes recursos de colocação em escala em seu cluster Kubernetes. Você aprendeu a:

  • Dimensionar pods Kubernetes manualmente que executam seu aplicativo.
  • Configurar os pods de dimensionamento automático que executam o front-end do aplicativo.
  • Dimensionar manualmente os nós de Kubernetes.

Se terminar, selecione o ícone Excluir e, na mensagem de confirmação, selecione Também excluir o namespace. Captura de tela que mostra a exclusão do projeto da área de trabalho do AKS clicando no ícone de lixo.

No próximo tutorial, você aprenderá a atualizar o Kubernetes no cluster do AKS.