Este documento descreve o dimensionador automático de cluster, que controla automaticamente o tamanho dos seus pools de nós. O dimensionador automático de cluster é ativado quando você especifica valores mínimo e máximo para o número de nós em um pool de nós. Você especifica esses valores ao criar um pool de nós ou atualizar um pool de nós .
O GKE na AWS usa o dimensionador automático de cluster Kubernetes de código aberto.
Dimensionamento automático de um pool de nós
O dimensionador automático de cluster redimensiona automaticamente o número de nós em um determinado pool de nós, com base nas demandas das suas cargas de trabalho. Você não precisa adicionar ou remover nós manualmente, nem provisionar excessivamente seus pools de nós. Em vez disso, você especifica um tamanho mínimo e máximo para o pool de nós, e o restante é automático.
Se recursos precisarem ser excluídos ou movidos durante o dimensionamento automático do cluster, suas cargas de trabalho poderão sofrer interrupções temporárias. Por exemplo, se sua carga de trabalho consistir em um controlador com uma única réplica, o Pod dessa réplica poderá ser reprogramado para um nó diferente se o nó atual for excluído. Por isso, você deve projetar suas cargas de trabalho para tolerar possíveis interrupções ou garantir que Pods críticos não sejam interrompidos.
Como funciona o autoescalador de cluster
O dimensionador automático de cluster funciona por pool de nós. Ao usar o dimensionador automático de cluster para configurar um pool de nós, você especifica um tamanho mínimo e máximo para o pool. Você pode alterar os tamanhos mínimo e máximo ao criar um pool de nós ou atualizar um pool de nós .
O dimensionador automático de cluster aumenta ou diminui o tamanho do pool de nós automaticamente, com base nas solicitações de recursos (em vez da utilização real dos recursos) nesse pool de nós. O dimensionador automático de cluster adiciona nós se os objetos do Pod não puderem ser agendados e não houver capacidade suficiente no pool de nós para atender às solicitações.
O escalonador automático de cluster também remove nós se eles estiverem subutilizados e todos os objetos do Pod puderem ser agendados em um número menor de nós. Se o nó não puder ser drenado normalmente após 10 minutos, ele será encerrado à força. Este período não é configurável.
Se um Pod solicitar poucos recursos (por exemplo, se os padrões forem insuficientes), o dimensionador automático de cluster não corrigirá a situação. Você pode ajudar a garantir que o dimensionador automático de cluster funcione com a maior precisão possível criando solicitações de recursos adequadas para todas as suas cargas de trabalho. Para obter mais informações, consulte Gerenciando recursos para contêineres .
Anotações de pod e comportamento do autoescalador de cluster
O escalonador automático de cluster considera determinadas anotações de Pod ao tomar decisões de escalonamento. Por exemplo, o escalonador automático de cluster oferece suporte a anotações de Pod, como "cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
. Essa anotação, quando definida como "false", impede que o nó que hospeda o Pod seja removido durante um evento de redução de escala. Entender e usar essas anotações pode ajudar você a ajustar o comportamento do escalonador automático para atender aos seus requisitos de carga de trabalho.
Para obter mais informações sobre anotações de Pod e seus efeitos no dimensionador automático de cluster, consulte os seguintes recursos:
- Que tipos de pods podem impedir que a CA remova um nó? nas perguntas frequentes sobre o dimensionador automático de cluster.
- Documentação oficial do Kubernetes Cluster Autoscaler
Critérios operacionais
O dimensionador automático de cluster faz as seguintes suposições ao redimensionar um pool de nós:
- Todos os objetos Pod replicados podem ser reiniciados em algum outro nó, possivelmente causando uma breve interrupção. Se a sua carga de trabalho não tolerar interrupções, configure-a para ser executada em um pool de nós com o escalonamento automático desabilitado. Para obter mais informações, consulte Controlando o agendamento com contaminações de nós .
- O autoescalador de cluster pode substituir quaisquer operações manuais de gerenciamento de nós que você executar.
- Todos os nós em um único pool de nós têm o mesmo conjunto de rótulos.
- O dimensionador automático de cluster seleciona um grupo de nós com a menor quantidade de CPU ociosa ou memória não utilizada após o dimensionamento vertical. Esse comportamento afeta quais pools de nós serão dimensionados verticalmente se você tiver tamanhos diferentes de nós (por exemplo, nós com alta CPU ou alta memória) no mesmo cluster.
Tamanho mínimo e máximo do pool de nós
Você pode especificar o tamanho mínimo e máximo para cada pool de nós no seu cluster com os sinalizadores min-nodes
e max-nodes
. Para desabilitar o dimensionamento automático, defina min-nodes
e max-nodes
com o mesmo número. O dimensionador automático do cluster toma decisões de dimensionamento dentro desses limites de tamanho.
Ao definir o tamanho máximo dos seus pools de nós, certifique-se de que eles sejam grandes o suficiente para executar todas as suas cargas de trabalho. Se os pools de nós do seu cluster não tiverem memória e CPU suficientes para executar todas as suas cargas de trabalho, poderão ocorrer interrupções.
Use um PodDisruptionBudget
para proteger cargas de trabalho
Você pode configurar o GKE na AWS para proteger contra interrupções de carga de trabalho com um PodDisruptionBudget
. Ao criar um PodDisruptionBudget
, você especifica o número mínimo de réplicas de pod que devem estar disponíveis ou o número máximo de réplicas de pod que podem ficar indisponíveis a qualquer momento. Para obter mais informações, consulte Como especificar um orçamento de interrupção para seu aplicativo .
Escalar a partir de zero nós
A partir das seguintes versões do GKE na AWS, o dimensionador automático de cluster oferece suporte ao dimensionamento vertical de pools de nós a partir de zero nós:
- Versão 1.29 e posterior
- Versões de 1.28 de 1.28.8-gke.800 e posteriores
- Versões de 1.27 de 1.27.12-gke.800 e posteriores
Se você estiver usando uma versão anterior, precisará atualizar seu cluster para uma destas versões para usar este recurso. Para habilitar este recurso para clusters existentes, atualize seu cluster para uma versão compatível e, em seguida, execute uma atualização contínua dos seus pools de nós, atualizando a versão do Kubernetes. Para obter mais informações sobre como atualizar seus pools de nós, consulte Atualizar um pool de nós .
O dimensionador automático de cluster respeita os rótulos e as tags de contaminação definidos nos pools de nós ao tomar decisões de dimensionamento, mesmo quando não há nós disponíveis para referência. O GKE na AWS define automaticamente as tags de rótulo e contaminação necessárias no grupo de dimensionamento automático da AWS subjacente ao pool de nós. Para obter mais informações sobre essas tags, consulte a seção Configuração de Descoberta Automática da página do GitHub que descreve a configuração do dimensionador automático de cluster para a AWS.
Ao definir essas tags de rótulo e taint, o GKE na AWS permite que o autoescalador de cluster crie modelos de nós precisos. Os modelos de nós são representações virtuais de nós que incluem a configuração, os rótulos e as taints corretos, mesmo quando não há nós físicos presentes no pool de nós. Com esses modelos de nós precisos, o autoescalador de cluster pode tomar decisões corretas de escalonamento vertical.
Ao configurar taints em seus pools de nós, esteja ciente de que os grupos de dimensionamento automático da AWS têm uma limitação: se você aplicar vários taints com a mesma chave, mas combinações de valor-efeito diferentes, somente o último taint aplicado com a chave duplicada será considerado pelo dimensionador automático do cluster.
Mais informações
Para saber mais sobre o dimensionador automático de cluster e como evitar interrupções, consulte os seguintes recursos:
- Perguntas frequentes sobre o escalonador automático de cluster Kubernetes
- Como funciona a redução de escala?
- O Cluster Autoscaler funciona com
PodDisruptionBudget
em redução de escala?