Nesta página, você verá como redimensionar automaticamente os pools de nós do cluster do Google Kubernetes Engine (GKE) Standard com base nas demandas das cargas de trabalho. Quando a demanda é alta, o escalonador automático de cluster adiciona nós ao pool. Quando ela é baixa, o escalonador automático do cluster volta para um tamanho mínimo designado por você. Isso pode aumentar a disponibilidade das cargas de trabalho quando você precisar delas e, ao mesmo tempo, controlar os custos. Para saber como configurar o escalonador automático do cluster, consulte Como escalonar automaticamente um cluster.
Com os clusters do Autopilot, você não precisa se preocupar com o provisionamento de nós ou o gerenciamento de pools de nós porque eles são provisionados automaticamente usando o provisionamento automático de nós, e são escalonadas automaticamente para atender aos requisitos das cargas de trabalho.
Visão geral
O escalonador automático de cluster do GKE faz o escalonamento automático do número de nós em um determinado pool de nós, com base nas demandas das cargas de trabalho. Não é preciso adicionar ou remover manualmente nós ou provisionar os pools de nós em excesso. Em vez disso, especifique um tamanho mínimo e máximo para o pool de nós, e o restante é automático.
Se os recursos forem excluídos ou movidos durante o escalonamento automático do cluster, as cargas de trabalho poderão sofrer interrupções temporárias. Por exemplo, se a carga de trabalho consistir em um controlador com uma única réplica, o pod dessa réplica poderá ser remarcado em um nó diferente caso o nó atual seja excluído. Antes de ativar o escalonador automático de cluster, projete as cargas de trabalho para tolerar possíveis interrupções ou garantir que os pods críticos não sejam interrompidos.
É possível aumentar o desempenho do escalonador automático de cluster com streaming de imagens, que transmite remotamente os dados de imagem necessários de imagens de contêiner qualificadas, ao mesmo tempo em que armazena a imagem em cache localmente para permitir cargas de trabalho em novos nós começar mais rápido.
Como funciona o autoescalador de clusters
O escalonador automático de cluster funciona por pool de nós. Ao configurar um pool de nós com ele, você especifica os tamanhos mínimo e máximo para o pool de nós.
O escalonador automático de cluster aumenta ou diminui o tamanho do pool de nós automaticamente adicionando ou removendo instâncias de máquina virtual (VM) no Grupo de instâncias gerenciadas (MIG) do Compute Engine para o pool de nós. , O autoescalador de cluster toma essas decisões de escalonamento com base nas solicitações de recursos (em vez da utilização real de recursos) dos pods em execução nos nós do pool de nós. Ele verifica periodicamente o status de pods e nós e toma as seguintes medidas:
- Se os pods forem não-modificáveis porque não há nós suficientes no pool de nós, o escalonador automático de cluster acrescentará nós até o tamanho máximo do pool de nós.
- Se os nós forem subutilizados e todos os pods puderem ser programados mesmo com menos nós no pool de nós, o escalonador automático de cluster removerá nós até o tamanho mínimo do pool de nós. Se houver pods em um nó que não podem ser movidos para outros nós no cluster, o escalonador automático de cluster não tentará reduzir esse nó. Se os pods puderem ser movidos para outros nós, mas o nó não puder ser drenado normalmente após um período de tempo limite (atualmente de 10 minutos), o nó será encerrado à força. O período de carência não é configurável para clusters do GKE. Para mais informações sobre como a redução de escala funciona, consulte a documentação do escalonador automático de cluster.
Se os pods tiverem solicitado poucos recursos (ou não alteraram os recursos padrão, o que pode ser insuficiente) e os nós estiverem passando por uma escassez, o autoescalador de clusters não corrigirá a situação. Para garantir que o autoescalador de cluster trabalhe com a maior precisão possível, faça solicitações de recursos explícitas para todas as cargas de trabalho.
Critérios de operação
O autoescalador de clusters parte dos seguintes pressupostos ao redimensionar um pool de nós:
- Todos os pods replicados podem ser reiniciados em outro nó, o que pode causar uma breve interrupção. Se os serviços não puderem ser interrompidos, o uso do escalonador automático de cluster não é recomendado.
- Usuários ou administradores não estão gerenciando manualmente os nós. Qualquer operação de gerenciamento manual de nós realizada pode ser substituída.
- Todos os nós em um único pool têm o mesmo conjunto de rótulos.
- O escalonador automático de clusters considera o custo relativo dos tipos de instâncias nos vários pools e tenta expandir o mais barato possível. O custo reduzido de pools de nós contendo VMs Spot é considerado.
- Os rótulos adicionados manualmente após a criação inicial do cluster ou do pool de nós
não são rastreados. Os nós criados pelo escalonador automático de cluster recebem rótulos especificados com
--node-labels
no momento da criação do pool de nós.
Balanceamento entre zonas
Se o pool de nós tiver vários grupos com instâncias gerenciadas do mesmo tipo, o autoescalador de cluster tentará manter o tamanho desses grupos balanceado durante o aumento da escala. Isso evita uma distribuição desigual de nós entre os grupos de instâncias gerenciadas em várias zonas de um pool de nós.
Para mais informações sobre como o escalonador automático de clusters toma decisões, consulte a documentação do escalonador automático de cluster.
Tamanho mínimo e máximo do pool de nós
Você pode especificar os tamanhos mínimo e máximo de cada pool de nós no cluster. O autoescalador de clusters tomará as decisões de redimensionamento dentro desses limites. Ao ativar o escalonamento automático, se o tamanho atual do pool de nós for menor que o mínimo ou maior que o máximo especificado, o escalonador automático entrará em ação somente após um novo nó ser necessário ou quando um nó puder ser excluído com segurança.
Limites do escalonamento automático
Defina o número mínimo e máximo de nós para o escalonador automático de cluster usar ao escalonar um pool de nós. Se o cluster tiver nós em várias zonas, o número mínimo e máximo de nós se aplicará a cada zona.
Por exemplo, o comando abaixo cria um cluster com várias zonas de escalonamento automático com seis nós em três zonas inicialmente, com no mínimo um nó por zona e no máximo quatro nós por zona:
gcloud container clusters create example-cluster \
--num-nodes 2 \
--zone us-central1-a \
--node-locations us-central1-a,us-central1-b,us-central1-f \
--enable-autoscaling --min-nodes 1 --max-nodes 4
Neste exemplo, o tamanho total do cluster pode estar entre 3 e 12 nós, distribuídos nas três zonas. Se uma delas falhar, o tamanho total do cluster pode estar entre dois e oito nós.
Consulte a documentação
gcloud container clusters create
para ver uma lista completa das sinalizações que podem ser especificadas.
Perfis de escalonamento automático
A decisão de quando remover um nó está relacionada à otimização da utilização ou à disponibilidade de recursos. Remover nós subutilizados melhora o uso do cluster, mas talvez novas cargas de trabalho precisem esperar que os recursos sejam provisionados novamente antes de serem executadas.
Quando tomar essas decisões, especifique qual perfil de escalonamento automático deve ser usado. Os perfis disponíveis no momento são:
balanced
: o perfil padrão.optimize-utilization
: prioriza a otimização do uso em vez de manter recursos sobressalentes no cluster. Quando selecionado, o escalonador automático do cluster reduz o escalonamento de forma mais agressiva: ele pode remover mais nós e mais rapidamente.
No GKE versão 1.18 e posteriores, quando você ativa o
perfil de escalonamento automático optimize-utilization
, o GKE prefere
programar pods em nós que já têm alta alocação de CPU ou memória. No GKE versão 1.22 e posterior, se o perfil de escalonamento automático optimize-utilization
estiver ativado, o GKE também considera alta alocação de GPU ao programar pods.
O perfil de escalonamento automático optimize-utilization
ajuda o
escalonador automático de cluster a identificar e remover nós subutilizados. Para alcançar essa
otimização, o GKE define o nome do programador na especificação do pod como
gke.io/optimize-utilization-scheduler
. Os pods que especificam um programador personalizado
não são afetados.
O comando a seguir ativa o perfil de escalonamento automático optimize-utilization
em um cluster atual:
gcloud container clusters update CLUSTER_NAME \
--autoscaling-profile optimize-utilization
Como considerar a programação e a interrupção do pod
Ao reduzir a escala, o autoescalador de clusters respeita as regras de programação e remoção definidas nos pods. Essas restrições podem impedir que um nó seja excluído pelo autoescalador. A exclusão de um nó pode ser evitada se ele contiver um pod com qualquer uma das seguintes condições:
- As regras de afinidade ou antiafinidade impedem a reprogramação.
- O pod tem armazenamento local.
- O Pod não é gerenciado por um Controlador, como Deployment, StatefulSet, Job ou ReplicaSet.
Com o PodDisruptionBudget de um aplicativo, também é possível impedir o escalonamento automático. Se a exclusão de nós fizer com que o orçamento seja excedido, o cluster não terá a escala reduzida.
Para mais informações sobre o autoescalador de clusters e prevenção de interrupções, consulte os seguintes itens nas Perguntas frequentes sobre o autoescalador de clusters:
- Como funciona a redução de escala? (em inglês)
- O escalonador automático de clusters funciona com o PodDisruptionBudget em redução de escala? (em inglês)
- Que tipos de pods podem impedir que o escalonador automático de cluster remova um nó? (em inglês)
Mais informações
Você pode encontrar mais informações sobre o autoescalador de clusters nas Perguntas frequentes de escalonamento automático no projeto de código aberto do Kubernetes.
Limitações
O escalonador automático de cluster tem as seguintes limitações:
- Os PersistentVolumes locais não são compatíveis com o escalonador automático de cluster.
- Quando os pods solicitam armazenamento temporário, o escalonador automático do cluster não é compatível com o escalonamento vertical de um pool de nós com nenhum nó usando SSDs locais como armazenamento temporário.
- Limitações do tamanho do cluster: até 15.000 nós e 150.000 pods. Considere outros limites de cluster e nossas práticas recomendadas ao executar clusters desse tamanho.
- Ao reduzir o dimensionamento, o escalonador automático de clusters respeita um período de encerramento de 10 minutos para reprogramar os pods do nó em um nó diferente antes de forçar seu encerramento.
- Em alguns casos, não será possível reduzir a escala com o escalonador automático de cluster, e haverá um nó extra após esse processo. Isso ocorre quando os pods necessários do sistema são programados em nós diferentes. O motivo é porque não há nenhum acionador nesses pods para transferir para um nó diferente. Consulte a pergunta Tenho um par de nós com baixa utilização, mas ele não está com a escala reduzida. Por quê? (em inglês). Para contornar essa limitação, configure um orçamento de interrupção de pod (em inglês).
- A programação personalizada com Filtros alterados não é compatível.
- Os nós não serão escalonados se os pods tiverem um valor
PriorityClass
abaixo de-10
. Saiba mais em Como o escalonador automático de cluster funciona com a prioridade e a preempção do pod? - O autoescalador de cluster pode não ter espaço de endereço IP não alocado suficiente para usar para adicionar novos nós ou pods, resultando em falhas de aumento de escala, que são indicadas por eventos
eventResult
com o motivoscale.up.error.ip.space.exhausted
. Adicione mais endereços IP para nós expandindo a sub-rede principal ou adicione novos endereços IP para pods usando CIDR de vários pods descontínuos. Para mais informações, consulte Não há espaço IP livre suficiente para pods.
Problemas conhecidos
- Na versão do plano de controle do GKE anterior à 1.22, o escalonador automático de cluster do GKE interrompe o escalonamento de todos os pools de nós em clusters vazios (zero nós).
A seguir
- Saiba como fazer o escalonamento automático dos seus nós.
- Saiba como atualizar os nós automaticamente.
- Saiba como reparar os nós automaticamente.
- Saiba como reduzir o tempo de extração de imagens em novos nós.