Autoescalador de cluster

Nesta página, você encontra explicações sobre o recurso autoescalador de clusters do Google Kubernetes Engine. Para saber como escalonar clusters automaticamente, consulte Como fazer o escalonamento automático de um cluster.

Visão geral

O autoescalador de clusters do GKE redimensiona automaticamente os clusters com base nas demandas das cargas de trabalho que você quer executar. Com o escalonamento automático ativado, o GKE adiciona automaticamente um novo nó ao cluster se você tiver criado novos pods sem capacidade suficiente para serem executados. Por outro lado, se um nó em seu cluster estiver subutilizado e for possível executar os pods em outros nós, o nó poderá ser excluído pelo GKE.

O escalonamento automático de clusters permite que você pague apenas pelos recursos que são necessários em dado momento e que consiga recursos adicionais automaticamente quando houver aumento de demanda.

Tenha em mente que, quando os recursos são excluídos ou movidos no decorrer do escalonamento automático do cluster, os serviços podem passar por interrupções. Por exemplo, se o serviço for composto por um controlador com uma única réplica, o pod da réplica poderá ser reiniciado em um nó diferente se o atual for excluído. Antes de ativar o escalonamento automático, verifique se os serviços podem tolerar possíveis interrupções ou se foram projetados e configurados para que a redução de linha não interrompa os pods que não podem ser interrompidos.

Como funciona o autoescalador de clusters

O autoescalador de clusters funciona por pool de nós. Para cada pool de nós, o autoescalador verifica periodicamente se há pods que não estão sendo programados e aguardam um nó com recursos disponíveis. Se tais pods existem, e o autoescalador determina que o redimensionamento de um pool de nós pode permitir que os pods em espera sejam programados e, em seguida, ele expandirá esse pool de nós.

O autoescalador de clusters também mede o uso de cada nó em comparação com a demanda total de capacidade do pool de nós. Se um nó não tiver nenhum pod novo programado nele por um período de tempo definido, e todos os pods em execução nesse nó puderem ser programados para outros nós no pool, o autoescalador moverá os pods e excluirá o nó. Se o nó não puder ser drenado corretamente após um tempo limite (atualmente 10 minutos), ele será forçado a ser encerrado. O período de carência não é configurável para clusters do GKE.

O autoescalador de cluster funciona com base nas solicitações de recursos dos pods, de acordo com a quantidade de recursos que foram solicitados por eles. O autoescalador de clusters não considera os recursos que seus pods estão usando ativamente. Basicamente, o autoescalador de clusters pressupõe que as solicitações de recursos dos pods que você forneceu são precisas e programa os pods nos nós com base nesse pressuposto.

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 de escalonamento automático 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 autoescalador 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 é levado em conta.
  • 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 autoescalador de clusters 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. 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 autoescalador 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 escalonamento do pool de nós são determinados pela disponibilidade da zona.

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

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.

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 autoescalador 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 escalonamento, o autoescalador 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 do nó.
  • Em alguns casos, não será possível reduzir a escala com o autoescalador 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.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine