Autoescalador de cluster

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. Também é possível configurar o escalonador automático de cluster em 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.

Como funciona o escalonador automático de cluster

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 o nó não puder ser reduzido corretamente após um tempo limite (atualmente 10 minutos), ele será encerrado. O período de carência não é configurável para clusters do GKE.

Se os pods tiverem solicitado poucos recursos (ou não tiverem alterado os recursos padrão, o que pode ser insuficiente) e os nós estiverem passando por uma escassez, o escalonador automático 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 preemptivas é 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 saber mais sobre como o autoescalador de cluster toma decisões de balanceamento, consulte as Perguntas frequentes sobre escalonamento automático na documentação do Kubernetes.

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. Esse perfil foi otimizado para uso com cargas de trabalho em lote que não são sensíveis à latência de inicialização. No momento, não recomendamos o uso desse perfil com a disponibilização de cargas de trabalho.

Na versão 1.18 e posterior do GKE, quando você especifica o perfil de escalonamento automático optimize-utilization, o GKE prefere programar pods em nós que já têm alta utilização, ajudando 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 example-cluster \
--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:

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:

Problemas conhecidos

  • O escalonador automático de cluster para de escalonar verticalmente todos os pools de nós quando não há nós no cluster.

A seguir