Usar o dimensionador automático de cluster no AKS (Serviço de Kubernetes do Azure)

Para acompanhar as demandas do aplicativo no AKS, talvez seja necessário ajustar o número de nós que executam suas cargas de trabalho. O componente dimensionador automático do cluster observa os pods em seu cluster que não podem ser agendados devido a restrições de recursos. Quando o dimensionador automático de cluster detecta problemas, ele aumenta o número de nós no pool de nós para atender às demandas do aplicativo. Ele também verifica regularmente os nós quanto à falta de pods em execução e reduz o número de nós conforme necessário.

Este artigo mostra como habilitar e gerenciar o dimensionamento automático de cluster no AKS, que se baseia na versão do Kubernetes de software livre.

Antes de começar

Este artigo exige a versão 2.0.76 ou posterior da CLI do Azure. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Usar o dimensionador automático de cluster em um cluster do AKS

Importante

O dimensionamento automático do cluster é um componente de Kubernetes. Embora o cluster do AKS use um conjunto de dimensionamento de máquinas virtuais para os nós, não habilite ou edite manualmente as configurações para dimensionamento automático do conjunto de dimensionamento. Permita que o dimensionador automático do cluster de Kubernetes gerencie as configurações de dimensionamento necessárias. Para obter mais informações, confira Posso modificar os recursos do AKS no grupo de recursos de nós?

Habilitar o dimensionador automático em um cluster existente

  1. Crie um grupo de recursos usando o comando az group create.

    az group create --name myResourceGroup --location eastus
    
  2. Crie um cluster do AKS usando o comando az aks create e habilite e configure o dimensionador automático de cluster no pool de nós para o cluster usando o parâmetro --enable-cluster-autoscaler e especificando um nó --min-count e --max-count. O comando de exemplo a seguir cria um cluster com um único nó apoiado por um conjunto de dimensionamento de máquinas virtuais, habilita o dimensionador automático de cluster, define um mínimo de um e no máximo três nós:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3 \
    --generate-ssh-keys
    

    São necessários alguns minutos para criar o cluster e definir as configurações do dimensionador automático de cluster.

Habilitar o dimensionador automático em um cluster existente

  • Atualize um cluster existente por meio do comando az aks update e habilite e configure o dimensionador automático de cluster no pool de nós para o cluster usando o parâmetro --enable-cluster-autoscaler e especificando um nó --min-count e --max-count. O exemplo a seguir atualiza um cluster do AKS existente para habilitar o dimensionamento automático de cluster em conjunto de nós para o cluster e define um mínimo de um e um máximo de três nós:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    São necessários alguns minutos para atualizar o cluster e definir as configurações do dimensionamento automático de cluster.

Desabilitar o dimensionador automático de cluster em um cluster

  • Desabilite o dimensionador automático de cluster por meio do comando az aks update e do parâmetro --disable-cluster-autoscaler.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    Os nós não são removidos quando o dimensionador automático de cluster é desabilitado.

Observação

Você pode dimensionar manualmente o cluster depois de desabilitar o dimensionador automático de cluster por meio do comando az aks scale. Se você usar o dimensionador automático de pod horizontal, ele continuará sendo executado com o dimensionador automático de cluster desabilitado, mas os pods poderão acabar não sendo agendados se todos os recursos do nó estiverem em uso.

Habilitar novamente o dimensionador automático de cluster em um cluster

Se você quiser reabilitar o dimensionador automático em um cluster existente, poderá fazer isso usando o comando az aks update e especificando os parâmetros --enable-cluster-autoscaler, --min-count e --max-count.

Usar o dimensionador automático de cluster em pools de nós

Usar o dimensionador automático de cluster em vários pools de nós

Você pode usar o dimensionador automático de cluster com vários pools de nós e habilitar o dimensionador automático de cluster em cada pool de nós individual e passar regras de dimensionamento automático exclusivas para eles.

  • Atualize as configurações em um pool de nós existente usando o comando az aks nodepool update.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Desabilitar o dimensionador automático de cluster em um pool de nós

  • Desabilite o dimensionador automático de cluster por meio do comando az aks nodepool update e do parâmetro --disable-cluster-autoscaler.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

Habilitar novamente o dimensionador automático de cluster em um pool de nós

Você pode reabilitar o dimensionador automático de cluster em um pool de nós usando o comando az aks nodepool update e especificando os parâmetros --enable-cluster-autoscaler, --min-count e --max-count.

Observação

Se você planeja usar o dimensionador automático de cluster com pools de nós que abrangem várias zonas e aproveitam os recursos de agendamento relacionados a zonas, como agendamento topológico de volume, recomendamos que você tenha um pool de nós por zona e habilite --balance-similar-node-groups por meio do perfil de dimensionamento automático. Isso garante que o dimensionador automático possa ser escalado verticalmente com êxito e manter os tamanhos dos pools de nós equilibrados.

Atualizar as configurações do dimensionador automático do cluster

À medida que as demandas do aplicativo mudam, talvez seja necessário ajustar a contagem de nós do dimensionador automático de cluster para dimensionar com eficiência.

  • Altere a contagem de nós usando o comando az aks update e atualize o dimensionador automático de cluster usando o parâmetro --update-cluster-autoscaler e especificando o nó atualizado --min-count e --max-count.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Observação

O dimensionador automático de cluster imporá a contagem mínima nos casos em que a contagem real ficar abaixo do mínimo devido a fatores externos, como durante um despejo pontual ou ao alterar o valor da contagem mínima da API do AKS.

Usar o perfil do dimensionador automático de cluster

Você pode configurar detalhes mais granulares do dimensionador automático de cluster alterando os valores padrão no perfil de dimensionador automático em todo o cluster. Por exemplo, um evento de redução vertical ocorre depois que os nós são subutilizados por dez minutos. Caso você tenha cargas de trabalho que são executadas a cada 15 minutos, convém alterar o perfil de dimensionamento automático para realizar redução vertical em nós subutilizados após 15 ou 20 minutos. Quando você habilita o dimensionador automático de cluster, um perfil padrão é usado, a menos que você especifique configurações diferentes.

Importante

O perfil de dimensionamento automático de cluster afeta todos os pools de nós que usam o dimensionador automático de clusters. Não é possível definir um perfil de dimensionamento automático por pool de nós. Quando você define o perfil, todos os pools de nós existentes com o dimensionador automático de clusters habilitado começam a usar o perfil imediatamente.

Configurações de perfil do dimensionador automático de cluster

A tabela a seguir lista as configurações disponíveis para o perfil do dimensionador automático de cluster:

Configuração Descrição Valor padrão
scan-interval Com que frequência o cluster é reavaliado para escalar ou reduzir verticalmente. 10 segundos
scale-down-delay-after-add Quanto tempo depois da operação de escalar verticalmente a avaliação de redução vertical será retomada. 10 minutos
scale-down-delay-after-delete Quanto tempo após a exclusão do nó a avaliação de redução vertical é retomada. scan-interval
scale-down-delay-after-failure Quanto tempo após a falha na redução vertical a avaliação de redução vertical é retomada. Três minutos
scale-down-unneeded-time Quanto tempo um nó deve permanecer desnecessário antes de estar qualificado para redução vertical. 10 minutos
scale-down-unready-time Por quanto tempo um nó que não esteja preparado deve ser desnecessário para que seja elegível para redução vertical. 20 minutos
ignore-daemonsets-utilization Se os pods DaemonSet serão ignorados ao calcular a utilização de recursos para redução vertical. false
daemonset-eviction-for-empty-nodes Se os pods DaemonSet serão normalmente encerrados de nós vazios. false
daemonset-eviction-for-occupied-nodes Se os pods DaemonSet serão normalmente encerrados de nós não vazios. true
scale-down-utilization-threshold Nível de utilização do nó, definido como a soma dos recursos solicitados dividida pela capacidade, em que um nó pode ser considerado para redução vertical. 0.5
max-graceful-termination-sec Número máximo de segundos que o dimensionador automático do cluster aguarda para encerramento do pod ao tentar reduzir verticalmente um nó. 600 segundos
balance-similar-node-groups Detecta pools de nós semelhantes e equilibra o número de nós entre eles. false
expander O tipo de pool de nós que o expansor usa para escalar verticalmente. Os valores possíveis incluem most-pods, random, least-waste e priority. random
skip-nodes-with-local-storage Se true, o dimensionador automático de cluster não exclui nós com pods com armazenamento local – por exemplo, EmptyDir ou HostPath. false
skip-nodes-with-system-pods Se true, o dimensionador automático de cluster não exclui nós com pods do kube-system (exceto para DaemonSet ou pods de espelho). true
max-empty-bulk-delete Número máximo de nós vazios que podem ser excluídos ao mesmo tempo. 10 nós
new-pod-scale-up-delay Para cenários como a escala de intermitência/lote em que você não deseja que a AC atue antes que o agendador do Kubernetes possa agendar todos os pods, você pode dizer à AC para ignorar pods não programados antes que eles atinjam uma determinada idade. 0 segundos
max-total-unready-percentage Percentual máximo de nós não lidos no cluster. Depois que esse percentual é excedido, a autoridade de certificação interrompe as operações. 45%
max-node-provision-time Tempo máximo que o dimensionador automático aguarda para que um nó seja provisionado. 15 minutos
ok-total-unready-count Número de nós não preparados permitidos, independentemente do percentual máximo de total não preparado. Três nós

Observação

Os parâmetros ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes e daemonset-eviction-for-occupied-nodes são GA da versão API 2024-05-01. Se você estiver usando a CLI para atualizar esses sinalizadores, certifique-se de estar usando a versão 2.63 ou posterior.

Definir o perfil de dimensionamento automático de cluster em um novo cluster

  • Crie um cluster do AKS por meio do comando az aks create e defina o perfil do dimensionador automático de cluster por meio do parâmetro cluster-autoscaler-profile.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 1 \
        --enable-cluster-autoscaler \
        --min-count 1 \
        --max-count 3 \
        --cluster-autoscaler-profile scan-interval=30s \
        --generate-ssh-keys
    

Definir o perfil de dimensionamento automático de cluster em um cluster existente

  • Defina o dimensionador automático de cluster em um cluster existente por meio do comando az aks update e do parâmetrocluster-autoscaler-profile. O exemplo a seguir define a configuração do intervalo de verificação como30s:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

Configurar o perfil do dimensionador automático de cluster para redução vertical agressiva

Observação

Reduzir verticalmente de forma agressiva não é recomendado para clusters que experimentam expansões frequentes e reduções em intervalos curtos, pois isso poderia resultar em tempos de provisionamento de nó estendidos nessas circunstâncias. Aumentar scale-down-delay-after-add pode ajudar nessas circunstâncias, ao manter o nó por perto por mais tempo para lidar com cargas de trabalho de entrada.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s,scale-down-delay-after-add=0m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Configurar o perfil de dimensionador automático de cluster para cargas de trabalho com intermitência

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Redefinir o perfil de dimensionamento automático de cluster para valores padrão

  • Redefina o perfil do dimensionador automático de cluster por meio do comando az aks update.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

Recuperar status e logs do dimensionador automático de cluster

Você pode recuperar logs e status atualizações do dimensionador automático de cluster para ajudar a diagnosticar e depurar eventos de dimensionamento automático. O AKS gerencia o dimensionador automático de cluster em seu nome e o executa no plano de controle gerenciado. Você pode habilitar o nó do plano de controle para ver os logs e as operações da autoridade de certificação.

  1. Configure uma regra para que os logs de recursos enviem os logs do dimensionador automático do cluster para o Log Analytics usando as instruções aqui. Certifique-se de marcar a caixa cluster-autoscaler ao selecionar as opções de Logs.

  2. Selecione a seção Log no seu cluster.

  3. Insira o exemplo de consulta a seguir no Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    
  4. Exiba eventos não disparados de escala vertical do dimensionador automático de cluster na CLI.

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Exiba eventos de aviso do dimensionador automático de cluster na CLI.

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. O dimensionamento automático de cluster também gravará o status da integridade em um configmap chamado cluster-autoscaler-status. Você pode recuperar esses logs usando o seguinte kubectl comando:

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Para obter mais informações, confira Perguntas frequentes sobre o projeto do GitHub do Kubernetes/dimensionador automático.

Métricas do dimensionador automático de cluster

Você pode habilitar as métricas do painel de controle (versão prévia) para ver os logs e as operações do dimensionador automático de cluster com o complemento do Azure Monitor do serviço gerenciado para Prometheus

Próximas etapas

Este artigo mostrou como dimensionar automaticamente o número de nós do AKS. Você também pode usar o dimensionador automático de pod horizontal para ajustar automaticamente o número de pods que executam o aplicativo. Para obter as etapas de como usar o dimensionador automático de pod horizontal, confira Dimensionar aplicativos no AKS.

Para ajudar a melhorar ainda mais a utilização de recursos do cluster e liberar CPU e memória para outros pods, consulte Vertical Pod Autoscaler.