Usar o autoscaler de cluster no Serviço Kubernetes do Azure (AKS)
Para acompanhar as demandas de aplicativos no AKS, talvez seja necessário ajustar o número de nós que executam suas cargas de trabalho. O componente autoscaler do cluster procura pods no cluster que não podem ser agendados devido a restrições de recursos. Quando o autoscaler do cluster deteta 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 autoscaler de cluster no AKS, que é baseado na versão de código aberto do Kubernetes.
Antes de começar
Este artigo requer a CLI do Azure versão 2.0.76 ou posterior. Executar az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
Usar o autoscaler de cluster em um cluster AKS
Importante
O autoscaler de cluster é um componente do Kubernetes. Embora o cluster do AKS utilize um conjunto de dimensionamento de máquinas virtuais para os nós, não ative nem edite manualmente as definições do dimensionamento automático do conjunto de dimensionamento. Permita que o dimensionador automático do cluster do Kubernetes faça a gestão das definições de dimensionamento necessárias. Para obter mais informações, consulte Posso modificar os recursos do AKS no grupo de recursos do nó?
Habilitar o autoscaler de cluster em um novo cluster
Crie um grupo de recursos usando o
az group create
comando.az group create --name myResourceGroup --location eastus
Crie um cluster AKS usando o
az aks create
comando e habilite e configure o autoscaler do cluster no pool de nós para o cluster usando o--enable-cluster-autoscaler
parâmetro 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 escala de máquina virtual, habilita o autoscaler do cluster, define um mínimo de um e máximo de 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
Leva alguns minutos para criar o cluster e definir as configurações do autoscaler do cluster.
Habilitar o autodimensionador de cluster em um cluster existente
Atualize um cluster existente usando o
az aks update
comando e habilite e configure o autoscaler do cluster no pool de nós usando o--enable-cluster-autoscaler
parâmetro e especificando um nó--min-count
e--max-count
. O comando de exemplo a seguir atualiza um cluster AKS existente para habilitar o autoscaler de cluster no pool de nós para o cluster e define um mínimo de um e máximo de três nós:az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 3
Leva alguns minutos para atualizar o cluster e definir as configurações do autoscaler do cluster.
Desabilitar o autoscaler de cluster em um cluster
Desative o autoscaler do cluster usando o
az aks update
comando e o--disable-cluster-autoscaler
parâmetro.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --disable-cluster-autoscaler
Os nós não são removidos quando o autoscaler do cluster está desativado.
Nota
Você pode dimensionar manualmente o cluster depois de desativar o autoscaler do cluster usando o az aks scale
comando. Se você usar o pod autoscaler horizontal, ele continuará a ser executado com o autoscaler de cluster desativado, mas os pods podem acabar não podendo ser agendados se todos os recursos do nó estiverem em uso.
Reativar o autodimensionador de cluster em um cluster
Você pode reativar o autodimensionador de cluster em um cluster existente usando o az aks update
comando e especificando os --enable-cluster-autoscaler
parâmetros , --min-count
e --max-count
.
Usar o autoscaler de cluster em pools de nós
Usar o autoscaler de cluster em vários pools de nós
Você pode usar o autoscaler de cluster com vários pools de nós e pode habilitar o autoscaler de cluster em cada pool de nós individuais e passar regras de dimensionamento automático exclusivas para eles.
Atualize as configurações em um pool de nós existente usando o
az aks nodepool update
comando.az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1 \ --update-cluster-autoscaler \ --min-count 1 \ --max-count 5
Desabilitar o autoscaler de cluster em um pool de nós
Desative o autoscaler de cluster em um pool de nós usando o
az aks nodepool update
comando e o--disable-cluster-autoscaler
parâmetro.az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1 \ --disable-cluster-autoscaler
Reativar o autoscaler de cluster em um pool de nós
Você pode reativar o autoscaler de cluster em um pool de nós usando o az aks nodepool update
comando e especificando os --enable-cluster-autoscaler
parâmetros , --min-count
e --max-count
.
Nota
Se você planeja usar o autoscaler 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 autoscaler. Isso garante que o autoscaler possa aumentar com êxito e manter os tamanhos dos pools de nós equilibrados.
Atualizar as configurações do autoscaler do cluster
À medida que seu aplicativo exige mudanças, talvez seja necessário ajustar a contagem de nós do autoscaler do cluster para dimensioná-la de forma eficiente.
Altere a contagem de nós usando o
az aks update
comando e atualize o autoscaler do cluster usando o--update-cluster-autoscaler
parâmetro e especificando seu nó--min-count
atualizado e--max-count
.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --update-cluster-autoscaler \ --min-count 1 \ --max-count 5
Nota
O autoscaler de cluster impõe a contagem mínima nos casos em que a contagem real cai abaixo do mínimo devido a fatores externos, como durante uma remoção pontual ou ao alterar o valor mínimo de contagem da API AKS.
Usar o perfil do autoscaler do cluster
Você pode configurar detalhes mais granulares do autoscaler de cluster alterando os valores padrão no perfil de autoscaler em todo o cluster. Por exemplo, um evento de redução de escala acontece depois que os nós são subutilizados após 10 minutos. Se você tiver cargas de trabalho executadas a cada 15 minutos, convém alterar o perfil do autoscaler para reduzir os 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 do autoscaler de cluster afeta todos os pools de nós que usam o autoscaler de cluster. Não é possível definir um perfil de escalonamento automático por pool de nós. Quando você define o perfil, todos os pools de nós existentes com o autoscaler de cluster habilitado começam imediatamente a usar o perfil.
Configurações de perfil do autoscaler de cluster
A tabela a seguir lista as configurações disponíveis para o perfil do autoscaler do cluster:
Definição | Descrição | Default value |
---|---|---|
scan-interval |
Com que frequência o cluster é reavaliado para aumentar ou diminuir a escala. | 10 segundos |
scale-down-delay-after-add |
Quanto tempo depois de aumentar essa escala para baixo a avaliação é retomada. | 10 minutos |
scale-down-delay-after-delete |
Quanto tempo após a exclusão do nó que reduz a avaliação é retomada. | scan-interval |
scale-down-delay-after-failure |
Quanto tempo depois da falha de redução de escala essa avaliação de redução é retomada. | Três minutos |
scale-down-unneeded-time |
Por quanto tempo um nó deve ser desnecessário antes de ser elegível para redução. | 10 minutos |
scale-down-unready-time |
Por quanto tempo um nó despronto deve ser desnecessário antes de ser elegível para redução. | 20 minutos |
ignore-daemonsets-utilization |
Se os pods DaemonSet serão ignorados ao calcular a utilização de recursos para redução de escala. | false |
daemonset-eviction-for-empty-nodes |
Se os pods DaemonSet serão terminados graciosamente a partir de nós vazios. | false |
daemonset-eviction-for-occupied-nodes |
Se os pods DaemonSet serão terminados graciosamente a partir 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 divididos pela capacidade, na qual um nó pode ser considerado para redução de escala. | 0.5 |
max-graceful-termination-sec |
Número máximo de segundos que o autoscaler do cluster aguarda o encerramento do pod ao tentar reduzir a escala de um nó. | 600 segundos |
balance-similar-node-groups |
Deteta pools de nós semelhantes e equilibra o número de nós entre eles. | false |
expander |
Tipo de expansor de pool de nós usado no aumento de escala. Os valores possíveis incluem most-pods , random , least-waste , e priority . |
random |
skip-nodes-with-local-storage |
Se true o autoscaler do cluster não excluir nós com pods com armazenamento local, por exemplo, EmptyDir ou HostPath. |
false |
skip-nodes-with-system-pods |
Se true o autoscaler de cluster não excluir nós com pods do kube-system (exceto DaemonSet ou mirror pods). |
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 burst/batch scale em que você não quer que a CA aja antes que o agendador do Kubernetes possa agendar todos os pods, você pode dizer à CA para ignorar pods não programados antes que eles atinjam uma certa idade. | 0 segundos |
max-total-unready-percentage |
Porcentagem máxima de nós desprontos 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 autoscaler aguarda que um nó seja provisionado. | 15 minutos |
ok-total-unready-count |
Número de nós não prontos permitidos, independentemente da percentagem máxima-total-despronto. | Três nós |
Nota
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 do autoscaler do cluster em um novo cluster
Crie um cluster AKS usando o
az aks create
comando e defina o perfil do autoscaler do cluster usando ocluster-autoscaler-profile
parâmetro.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 do autoscaler do cluster em um cluster existente
Defina o autoscaler de cluster em um cluster existente usando o
az aks update
comando e ocluster-autoscaler-profile
parâmetro. O exemplo a seguir define a configuração do intervalo de varredura como 30s:az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --cluster-autoscaler-profile scan-interval=30s
Configurar o perfil do autoscaler de cluster para redução agressiva
Nota
A redução agressiva não é recomendada para clusters que experimentam scale-outs e scale-ins frequentes 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, mantendo o nó 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 do autoscaler de cluster para cargas de trabalho intermitentes
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 do autoscaler do cluster para valores padrão
Redefina o perfil do autoscaler do cluster usando o
az aks update
comando.az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --cluster-autoscaler-profile ""
Recuperar logs e status do autoscaler do cluster
Você pode recuperar logs e atualizações de status do autoscaler do cluster para ajudar a diagnosticar e depurar eventos do autoscaler. O AKS gerencia o autoscaler do 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 autoscaler do cluster.
Configure uma regra para que os logs de recursos enviem os logs do autoscaler do cluster para o Log Analytics usando as instruções aqui. Certifique-se de marcar a caixa ao selecionar opções para
cluster-autoscaler
Logs.Selecione a seção Log no cluster.
Insira o seguinte exemplo de consulta no Log Analytics:
AzureDiagnostics | where Category == "cluster-autoscaler"
Visualize eventos de escalonamento automático de cluster não acionados na CLI.
kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
Exiba eventos de aviso do autoscaler do cluster na CLI.
kubectl get events --field-selector source=cluster-autoscaler,type=Warning
O autoscaler de cluster também grava o status de integridade em um
configmap
arquivocluster-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, consulte as Perguntas frequentes sobre o projeto Kubernetes/autoscaler GitHub.
Métricas do Autoscaler de Cluster
Você pode habilitar as métricas do plano de controle (Visualização) para ver os logs e as operações do autoscaler de cluster com o complemento Azure Monitor managed service for Prometheus
Próximos passos
Este artigo mostrou como dimensionar automaticamente o número de nós AKS. Você também pode usar o autoscaler pod horizontal para ajustar automaticamente o número de pods que executam seu aplicativo. Para conhecer as etapas de uso do autoscaler de pod horizontal, consulte Dimensionar aplicativos no AKS.
Para ajudar ainda mais a melhorar a utilização de recursos de cluster e liberar CPU e memória para outros pods, consulte Vertical Pod Autoscaler.
Azure Kubernetes Service