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
Crie um grupo de recursos usando o comando
az group create
.az group create --name myResourceGroup --location eastus
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âmetrocluster-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.
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.Selecione a seção Log no seu cluster.
Insira o exemplo de consulta a seguir no Log Analytics:
AzureDiagnostics | where Category == "cluster-autoscaler"
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
Exiba eventos de aviso do dimensionador automático de cluster na CLI.
kubectl get events --field-selector source=cluster-autoscaler,type=Warning
O dimensionamento automático de cluster também gravará o status da integridade em um
configmap
chamadocluster-autoscaler-status
. Você pode recuperar esses logs usando o seguintekubectl
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.
Azure Kubernetes Service