Escalonador automático de cluster

Nesta página, você verá como redimensionar automaticamente pools de nós do cluster do Google Kubernetes Engine (GKE) com base nas demandas das cargas de trabalho. Quando a demanda é alta, o escalonador automático de cluster acrescenta nós ao pool de nós. 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.

Visão geral

O escalonador automático de cluster do GKE redimensiona automaticamente o 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 nós ou provisionar os pools de nós em excesso manualmente. Em vez disso, especifique um tamanho mínimo e máximo para o pool de nós, 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 o. tamanho 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 com base nas solicitações de recursos dos usuários em execução nos nós do conjunto de nós, em vez da utilização real de recursos. Ele verifica periodicamente o status de pods e nós e realiza as seguintes ações:

  • 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é alcançar 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 alteraram 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 escalonador automático de cluster trabalhe com a maior acurácia possível, faça solicitações de recursos explícitas para todas as cargas de trabalho.

Critérios de operação

O escalonador automático de cluster 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 por você 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 com 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 escalonador automático de cluster tentará manter o tamanho desses grupos balanceado durante o escalonamento vertical. 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 escalonador automático de cluster toma decisões de balanceamento, consulte as Perguntas frequentes sobre escalonamento automático (em inglês) na documentação do Kubernetes.

Tamanho mínimo e máximo do pool de nós

É possível especificar os tamanhos mínimo e máximo de cada pool de nós no cluster. O escalonador automático de clusters tomará as decisões de redimensionamento dentro desses limites. Se o tamanho atual do pool de nós for menor que o mínimo especificado ou maior que o máximo especificado quando você ativar o escalonamento automático, 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

Ao fazer o escalonamento automático de clusters, os limites de dimensionamento do pool de nós são determinados pela disponibilidade da zona.

Por exemplo, o comando a seguir cria um cluster com várias zonas de escalonamento automático com seis nós em três zonas, com um mínimo de um nó por zona e um máximo de quatro nós por zona:

    gcloud container clusters create example-cluster \
      --zone us-central1-a \
      --node-locations us-central1-a,us-central1-b,us-central1-f \
      --num-nodes 2 --enable-autoscaling --min-nodes 1 --max-nodes 4

O tamanho total do cluster é de 3 a 12 nós, distribuídos por três zonas. Se uma delas falhar, o tamanho total do cluster fica entre dois e oito nós.

Perfis de escalonamento automático

A decisão de quando remover um nó é uma troca entre a otimização da utilização e a disponibilidade de recursos. Remover nós subutilizados melhora a utilização do cluster, mas é possível que novas cargas de trabalho precisem esperar que os recursos sejam aprovisionados novamente antes de serem executados.

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 ativado, o escalonador automático de 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.

O comando a seguir ativa o perfil de escalonamento automático optimize-utilization em um cluster atual:

gcloud beta 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 escalonador automático 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 escalonador automático. A exclusão de um nó pode ser evitada se ele contiver um pod com qualquer uma das seguintes condições:

O PodDisruptionBudget (em inglês) de um aplicativo também permite 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 escalonador automático de clusters e prevenção de interrupções, consulte os itens a seguir nas Perguntas frequentes sobre o escalonador automático de clusters (em inglês):

Mais informações

Veja mais informações sobre o escalonador automático de clusters nas Perguntas frequentes sobre escalonamento automático no projeto de código aberto do Kubernetes (em inglês).

Limitações

O escalonador automático de clusters tem as limitações a seguir:

  • Ele é compatível com até 1.000 nós executando 30 pods cada. Para mais detalhes sobre as garantias de escalonabilidade, consulte este relatório.
  • Ao reduzir o dimensionamento, o escalonador automático de clusters respeita um período de encerramento de 10 minutos para reagendar os pods do nó em um nó diferente antes de forçar o 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 transferi-los 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 seguir