Compartilhar via


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 do dimensionador automático de cluster observa os pods no seu cluster que não podem ser agendados devido às 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 novo cluster

  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 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 sucesso 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 de spot 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 O valor máximo entre a soma de solicitações de CPU e a soma de solicitações de memória de todos os pods em execução no nó dividido pelo recurso alocável correspondente do nó, abaixo do qual 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 agendados antes que eles atinjam um determinado tempo decorrido. 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 API versão 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 do dimensionador automático de cluster.

  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. Exibir 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. Exibir 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 Serviço gerenciado do Azure Monitor para o complemento do 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.