Compartilhar via


Visão geral do dimensionamento automático de cluster no AKS (Serviço de Kubernetes do Azure)

Para acompanhar as demandas do aplicativo no AKS (Serviço de Kubernetes do Azure), 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 do cluster detecta pods não agendados, ele aumenta o número de nós no pool de nós para atender à demanda do aplicativo. Ele também verifica regularmente os nós que não têm pods agendados e reduz o número de nós conforme necessário.

Este artigo ajuda você a entender como o dimensionador automático de cluster funciona no AKS. Ele também fornece diretrizes, melhores práticas e considerações ao configurar o dimensionador automático de cluster para suas cargas de trabalho do AKS. Se você quiser habilitar, desabilitar ou atualizar o dimensionador automático de cluster para suas cargas de trabalho do AKS, consulte Usar o dimensionador automático de cluster no AKS.

Sobre o dimensionador automático de cluster

Os clusters geralmente precisam de uma maneira de dimensionar automaticamente para se ajustar às mudanças nas demandas dos aplicativos, como entre dias úteis e noites ou finais de semana. Os clusters do AKS podem ser dimensionados das seguintes maneiras:

  • O dimensionador automático de cluster inspeciona periodicamente os pods que não podem ser agendados em nós devido a restrições de recursos. Em seguida, o cluster aumenta automaticamente o número de nós. O dimensionamento manual é desabilitado quando o dimensionador automático de cluster é usado. Para obter mais informações, confira Como funciona o escalonamento vertical?.
  • O Dimensionador Automático de Pod Horizontal usa o Servidor de Métricas em um cluster do Kubernetes para monitorar a demanda de recursos dos pods. Se um aplicativo precisar de mais recursos, o número de pods será automaticamente aumentado para atender à demanda.
  • O Dimensionador Automático de Pod Vertical define automaticamente solicitações de recursos e limites em contêineres por carga de trabalho com base no uso passado para garantir que os pods sejam agendados em nós que tenham os recursos necessários de CPU e memória.

Captura de tela de como o dimensionador automático de cluster e o dimensionador automático de pod horizontal costumam trabalhar juntos para dar suporte às demandas necessárias do aplicativo.

É uma prática comum habilitar o dimensionador automático de cluster para nós e o Dimensionador Automático de Pod Vertical ou o Dimensionador Automático de Pod Horizontal para pods. Quando você ativa o dimensionador automático do cluster, ele aplica as regras de escala especificadas quando o tamanho do pool de nós é menor do que a contagem mínima de nós, até a contagem máxima de nós. Em seguida, o dimensionador automático de cluster aguarda para entrar em vigor até que um novo nó seja necessário no pool de nós ou até que um nó possa ser excluído com segurança do pool de nós atual. Para obter mais informações, confira Como funciona a redução vertical?

Práticas recomendadas e considerações

  • Ao implementar zonas de disponibilidade com o dimensionador automático de cluster, recomendamos usar um único pool de nós para cada zona. Você pode definir o parâmetro --balance-similar-node-groups para True para manter uma distribuição equilibrada de nós entre zonas para suas cargas de trabalho durante operações de escalonamento vertical. Quando essa abordagem não é implementada, as operações de redução horizontal podem interromper o equilíbrio de nós entre zonas.
  • Para clusters com mais de 400 nós, recomendamos usar a CNI do Azure ou a Sobreposição da CNI do Azure.
  • Para executar com eficácia as cargas de trabalho simultaneamente nos pools de nós Spot e Fixo, considere usar expansores de prioridade. Essa abordagem permite agendar pods com base na prioridade do pool de nós.
  • Tenha cuidado ao atribuir solicitações de CPU/Memória em pods. O dimensionador automático de cluster escala verticalmente com base em pods pendentes, em vez de pressão de CPU/memória em nós.
  • Para clusters hospedando simultaneamente cargas de trabalho de longa execução, como aplicativos web, e cargas de trabalho de trabalho curtas/rápidas, recomendamos separá-los em pools de nós distintos com Regras de Afinidade/expansores ou usar PodDisruptionBudget para ajudar a evitar drenagem desnecessária de nós ou operações de reduzir verticalmente. Especificar a anotação cluster-autoscaler.kubernetes.io/safe-to-evict: "false" na especificação do Pod também impedirá que os pods sejam removidos. Use esta anotação com cautela, pois pode causar problemas de consulta do Cluster Autoscaler ao drenar um nó com um Pod em execução que inclui esta anotação.
  • Em um pool de nós habilitado para dimensionador automático, reduza verticalmente os nós removendo cargas de trabalho, em vez de reduzir manualmente o número de nós. Isso pode ser problemático se o pool de nós já estiver na capacidade máxima ou se houver cargas de trabalho ativas em execução nos nós, o que pode causar um comportamento inesperado do dimensionador automático de cluster.
  • Os nós não serão escalados verticalmente se os pods tiverem um valor PriorityClass abaixo de -10. A prioridade -10 é reservada para superprovisionamento de pods. Para obter mais informações, consulte Como usar o dimensionador automático de cluster com Prioridade e Preempção do Pod.
  • Não combine outros mecanismos de dimensionamento automático de nós, como dimensionadores automáticos do Conjunto de Dimensionamento de Máquinas Virtuais, com o dimensionador automático de cluster.
  • O dimensionador automático de cluster pode não conseguir reduzir verticalmente se os pods não puderem se mover, como nas seguintes situações:
    • Um pod criado diretamente sem o suporte de um objeto de controlador, como uma Implantação ou um ReplicaSet.
    • Um orçamento de interrupção de pod (PDB) que é muito restritivo e não permite que o número de pods fique abaixo de determinado limite.
    • Um pod usa seletores de nó ou uma antiafinidade que não pode ser cumprida se ele está agendado em outro nó. Para obter mais informações, consulte Quais tipos de pods podem impedir que o dimensionador automático do cluster remova um nó?

Importante

Não faça alterações em nós individuais dentro dos pools de nós com dimensionado automático. Todos os nós no mesmo grupo de nós devem ter capacidade uniforme, rótulos, taints e pods do sistema em execução neles.

  • O dimensionador automático de cluster não é responsável por impor uma "contagem máxima de nós" em um pool de nós de cluster, independentemente das considerações de agendamento de pod. Se qualquer ator não relacionado ao dimensionador automático de cluster definir a contagem do pool de nós para um número além do máximo configurado pelo dimensionador automático de cluster, o dimensionador automático de cluster não removerá automaticamente os nós. Os comportamentos de redução vertical do dimensionador automático de cluster permanecem no escopo para remover somente os nós que não têm pods agendados. A única finalidade da configuração da contagem máxima de nós do dimensionador automático de cluster é impor um limite superior para operações de escala vertical. Ela não tem nenhum efeito sobre as considerações de redução horizontal.

Dimensionador automático de cluster

O perfil do dimensionador automático de cluster é um conjunto de parâmetros que controlam o comportamento do dimensionador automático de cluster. Você pode configurar o perfil do dimensionador automático de cluster ao criar um cluster ou atualizar um cluster existente.

Otimizar o perfil do dimensionador automático de cluster

Você deve ajustar as configurações de perfil do dimensionador automático de cluster de acordo com seus cenários de carga de trabalho específicos, considerando também as compensações entre desempenho e custo. Esta seção fornece exemplos que demonstram essas compensações.

É importante observar que as configurações de perfil do dimensionador automático de cluster são para todo o cluster e aplicadas a todos os pools de nós habilitados para dimensionamento automático. Qualquer ação de dimensionamento que ocorra em um pool de nós pode afetar o comportamento de dimensionamento automático de outros pools de nós, o que pode levar a resultados inesperados. Aplique configurações de perfil consistentes e sincronizadas em todos os pools de nós relevantes para garantir que você obtenha os resultados desejados.

Exemplo 1: Otimização para desempenho

Para clusters que lidam com cargas de trabalho substanciais e intermitentes com foco principal no desempenho, recomendamos aumentar o scan-interval diminuir o scale-down-utilization-threshold. Essas configurações ajudam a colocar em lote várias operações de dimensionamento em uma única chamada, otimizando o tempo de dimensionamento e a utilização de cotas de leitura/gravação de computação. Isso também ajuda a mitigar o risco de operações de redução vertical rápida em nós subutilizados, aumentando a eficiência de agendamento do pod. Também aumenta ok-total-unready-count e max-total-unready-percentage.

Para clusters com pods de daemonset, recomendamos a configuração de ignore-daemonsets-utilization para true, que efetivamente ignora a utilização de nós por pods de daemonset e minimiza operações de redução vertical desnecessárias. Consulte o perfil para cargas de trabalho intermitentes

Exemplo 2: Otimização para custo

Se você quiser um perfil com otimização de custo, recomendamos definir as seguintes configurações de parâmetro:

  • Reduza scale-down-unneeded-time, que é a quantidade de tempo que um nó deve ser desnecessário antes de ser qualificado para reduzir verticalmente.
  • Reduza scale-down-delay-after-add, que é a quantidade de tempo para aguardar depois que um nó é adicionado antes de considerá-lo para reduzir verticalmente.
  • Aumente scale-down-utilization-threshold, que é o limite de utilização para remover nós.
  • Aumente max-empty-bulk-delete, que é o número máximo de nós que podem ser excluídos em uma única chamada.
  • Defina skip-nodes-with-local-storage como false.
  • Aumentar ok-total-unready-counte max-total-unready-percentage.

Problemas comuns e recomendações de mitigação

Visualize falhas de dimensionamento e escale verticalmente eventos não disparados por meio da CLI ou do Portal.

Operações de escalonamento vertical não são disparadas

Causas comuns Recomendações de mitigação
Conflitos de afinidade de nó PersistentVolume, que podem surgir ao usar o dimensionador automático de cluster com várias zonas de disponibilidade ou quando a zona de um pod ou volume persistente difere da zona do nó. Use um pool de nós por zona de disponibilidade e habilite --balance-similar-node-groups. Você também pode definir o campo volumeBindingMode como WaitForFirstConsumer na especificação do pod para impedir que o volume seja limitado a um nó até que um pod usando o volume seja criado.
Conflitos de afinidade Nós/Taints e Tolerations Avalie os taints atribuídos aos seus nós e examine os tolerations definidos em seus pods. Se necessário, faça ajustes nos taints e tolerations para garantir que seus pods possam ser agendados com eficiência em seus nós.

Falhas de escalonamento vertical de operação

Causas comuns Recomendações de mitigação
Esgotamento de endereço IP na sub-rede Adicione outra sub-rede na mesma rede virtual e adicione outro pool de nós à nova sub-rede.
Esgotamento da cota de núcleos A cota de núcleos aprovada foi esgotada. Solicitar um aumento de cota. O dimensionador automático de cluster entra em um estado de retirada exponencial dentro do grupo de nós específico quando ele experimenta várias tentativas de escalonamento vertical com falha.
Tamanho máximo do pool de nós Aumente o número máximo de nós no pool de nós ou crie um novo pool de nós.
Solicitações/Chamadas que excedem o limite de taxa Confira Erros 429: Número Excessivo de Solicitações.

Falhas de redução vertical de operação

Causas comuns Recomendações de mitigação
Pod impedindo o esvaziamento de nós/Não é possível remover o pod • Veja quais tipos de pods podem impedir a redução vertical.
• Para pods que usam armazenamento local, como hostPath e emptyDir, defina o sinalizador de perfil do dimensionador automático de cluster skip-nodes-with-local-storage como false.
• Na especificação do pod, defina a anotação cluster-autoscaler.kubernetes.io/safe-to-evict como true.
• Verifique o PDB, pois ele pode ser restritivo.
Tamanho mínimo do pool de nós Reduza o tamanho mínimo do pool de nós.
Solicitações/Chamadas que excedem o limite de taxa Confira Erros 429: Número Excessivo de Solicitações.
Operações de gravação bloqueadas Não faça nenhuma alteração no grupo de recursos do AKS totalmente gerenciado (consulte as políticas de suporte do AKS). Remova ou redefina todos os bloqueios de recursos aplicados anteriormente ao grupo de recursos.

Outros problemas

Causas comuns Recomendações de mitigação
PriorityConfigMapNotMatchedGroup Certifique-se de adicionar todos os grupos de nós que exigem dimensionamento automático ao arquivo de configuração do expansor.

Pool de nós em retirada

O pool de nós em retirada foi introduzido na versão 0.6.2 e faz com que o dimensionador automático de cluster se retire do dimensionamento de um pool de nós após uma falha.

Dependendo de quanto tempo as operações de dimensionamento estão enfrentando falhas, pode levar até 30 minutos antes de fazer outra tentativa. Você pode redefinir o estado de retirada do pool de nós desabilitando e habilitando novamente o dimensionamento automático.