Na versão 1.10 do GKE no VMware, o escalonamento automático de clusters para pools de nós em clusters de usuário é GA. O escalonamento automático de clusters redimensiona o número de nós em um determinado pool de nós com base nas demandas das cargas de trabalho. Você não precisa adicionar ou remover manualmente os nós ou provisionar em excesso seus pools de nós. 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 sua carga de trabalho for um único pod e o nó atual for excluído, o pod será reprogramado em outro nó. Antes de ativar o escalonamento automático, crie suas cargas de trabalho para tolerar possíveis interrupções e garantir que os pods críticos não sejam interrompidos.
O escalonamento automático de clusters fica desativado por padrão para os pools de nós. É possível ativar e desativar o escalonamento automático em pools de nós do cluster de usuário durante ou após a criação do cluster usando o comando gkectl update
.
Como funciona o escalonamento automático de clusters
O autoescalador de clusters 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 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 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 não for possível esvaziar o nó, ele será forçado a ser encerrado, e o disco gerenciado pelo Kubernetes anexado será removido com segurança.
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 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 interrupção breve. Se os serviços não puderem tolerar interrupções, não use o escalonador automático de cluster.
- Usuários ou administradores não gerenciam nós manualmente. Se o autoescalador de cluster estiver ativado para um pool de nós, não será possível substituir o campo
replicas
do pool de nós. - 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 de nós e tenta expandir o pool de nós de forma a causar o menor desperdício possível.
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 com os valores autoscaling.minReplicas
e autoscaling.maxReplicas
. O escalonador automático de cluster toma decisões de redimensionamento dentro desses limites. O valor replicas
do pool de nós, que é o número padrão de nós sem escalonamento automático, deve ser maior que o valor especificado de minReplicas
e menor que o valor especificado de maxReplicas
. Quando você ativa o escalonamento automático, o autoescalador de cluster aguarda para entrar em vigor até que um novo nó seja necessário ou até que um nó possa ser excluído com segurança.
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. Se um nó tiver um pod com qualquer uma das condições a seguir, talvez ele não seja excluído.
- As regras de afinidade ou antiafinidade impedem a reprogramação.
- O pod tem armazenamento local.
- O Pod não é gerenciado por um controlador (em inglês), como o Deployment, o StatefulSet, o Job ou o ReplicaSet.
- O pod está no namespace kube-system e não tem um PodDisruptionBudget (em inglês).
O PodDisruptionBudget de um aplicativo também pode impedir o escalonamento automático. Se a exclusão de nós fizer com que o orçamento seja excedido, o cluster não vai reduzir escala vertical.
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?
- O escalonador automático de clusters funciona com o PodDisruptionBudget em redução de escala?
- Que tipos de pods podem impedir que o escalonador automático de cluster remova um nó?
Limitações
O escalonador automático de cluster tem as seguintes limitações:
- Não é permitido reduzir para zero réplicas no pool de nós.
- A soma dos nós de trabalho do cluster de usuário em qualquer momento precisa ser pelo menos três. Isso significa que a soma dos valores
minReplicas
de todos os pools de nós com escalonamento automático, além da soma dos valoresreplicas
de todos os pools de nós sem escalonamento automático, precisa ser pelo menos três. - 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?