Neste documento, explicamos como os pools de nós funcionam no Google Kubernetes Engine (GKE). Um pool de nós é um grupo de nós em um cluster padrão que têm a mesma configuração. No modo Standard do GKE, você pode escolher entre várias opções para seus pools de nós e atender às necessidades da carga de trabalho. Se você optar por usar o Autopilot, não será necessário configurar pools de nós. O GKE gerencia os nós para você, mas é possível fazer upgrade manual dos pools de nós gerenciados pelo Autopilot em clusters padrão, se necessário.
Para saber mais sobre como criar clusters no modo Standard, consulte Criar um cluster regional e Criar um cluster zonal. Para saber como gerenciar pools de nós em clusters Standard, consulte Como adicionar e gerenciar pools de nós.
Visão geral
Um pool de nós é um grupo de nós em um cluster que têm a mesma
configuração. Os pools de nós usam uma especificação NodeConfig. Cada nó no pool tem um rótulo de nó do Kubernetes, cloud.google.com/gke-nodepool, que tem o nome do pool de nós como valor.
Ao criar um cluster no modo padrão, o número e o tipo de nós especificados são usados para criar o primeiro pool de nós do cluster.
Por padrão, esse primeiro pool de nós (conhecido como pool de nós padrão) consiste em três nós em cada uma das zonas do Compute do cluster, com a imagem de nó padrão cos_containerd e um tipo de máquina de uso geral. É possível especificar várias propriedades para
o pool de nós, dependendo dos requisitos da carga de trabalho. Por exemplo, é possível
criar um pool de nós no cluster com SSDs locais, uma plataforma de CPU mínima,
VMs preemptivas, uma imagem de nó
diferente, tipos de máquinas diferentes ou uma interface de rede
virtual mais eficiente.
Em seguida, é possível adicionar ao cluster mais pools de nós de diferentes tamanhos e tipos. Todos os nodes de um determinado pool de nós são idênticos entre si.
Os pools de nós personalizados são úteis quando é necessário programar pods que exigem mais recursos que outros, como mais memória ou espaço em disco local. Se você precisar de mais controle sobre onde os pods são programados, use taints de nós.
É possível criar, fazer upgrade e excluir pools de nós individualmente sem afetar todo o cluster. Não é possível configurar um único nó em um pool de nós. Todas as mudanças de configuração afetam todos os nós do pool.
É possível redimensionar pools de nós em um cluster adicionando ou removendo nós.
Por padrão, todos os novos pools de nós executam a mesma versão do Kubernetes que o plano de controle. É possível fazer o upgrade manual ou automático dos pools de nós atuais. Também é possível executar várias versões de nós do Kubernetes em cada pool de nós no cluster, fazer upgrade de cada pool de nós de maneira independente e segmentar diferentes pools de nós para implantações específicas.
Pools de nós gerenciados pelo Autopilot
Nos clusters padrão, além dos pools de nós padrão descritos neste documento, também é possível ter pools de nós gerenciados pelo Autopilot, que são criados e gerenciados pelo GKE para ComputeClasses do Autopilot. Para mais informações, consulte Sobre cargas de trabalho do modo Autopilot no GKE Standard.
É possível fazer upgrade manual desse tipo de pool de nós. No entanto, não é possível realizar outros tipos de atualizações além de upgrades (mudanças de versão). Também não é possível excluir o pool de nós.
Como implantar serviços em pools de nós específicos
Ao definir um Service, você pode controlar indiretamente em qual pool de nós ele é implantado. O pool de nós não depende da configuração do Serviço, mas da configuração do Pod.
É possível implantar explicitamente um pod em um pool de nós específico definindo um
nodeSelectorno manifesto do pod. Isso força um pod a ser executado apenas em nós desse pool de nós. Para ver um exemplo, consulte Como implantar um pod em um pool de nós específico.É possível especificar solicitações de recursos para os contêineres. O pod é executado apenas em nós que atendem às solicitações de recursos. Por exemplo, se a definição do pod incluir um contêiner que requer quatro CPUs, o serviço não selecionará pods em execução em nós com duas CPUs.
Nós em clusters de várias zonas
Se você criou um cluster multizonal, todos os pools de nós serão replicados automaticamente nessas zonas. Qualquer novo pool de nós é criado automaticamente nessas zonas. Da mesma forma, qualquer exclusão também remove esses pools de nós das zonas adicionais.
Esse fator multiplicador pode causar um consumo maior da cota do projeto para uma região específica quando os pools de nós são criados.
Como excluir os pools de nós
Quando você exclui um pool de nós, o GKE drena todos os nós no pool, removendo e reprogramando todos os pods. O processo de diminuição envolve o GKE remover pods em cada nó no pool de nós. O GKE faz o seguinte ao excluir nós:
- O GKE drena cada nó em um pool de nós excluindo pods com um
período de encerramento otimizado alocado de
MAX_POD.MAX_PODé oterminationGracePeriodSecondsmáximo definido nos pods programados do nó, com um limite de uma hora. - Por padrão, o GKE não respeita as configurações de
PodDisruptionBudget(PDB) durante a exclusão do pool de nós. No entanto, é possível atualizar a configuração do pool de nós para que o GKE respeite os PDBs durante a exclusão do pool de nós, também com um limite de uma hora. Respeitar os PDBs dá às cargas de trabalho a oportunidade de serem movidas para outros nós do cluster. Para mais informações sobre como configurar essa definição, consulte Atualizar um pool de nós para respeitar PDBs durante a exclusão do pool de nós.
Se os pods tiverem seletores de nó específicos, poderão permanecer em uma condição não programável se nenhum outro nó no cluster cumprir os critérios.
No entanto, quando um cluster é excluído, o GKE não segue esse processo de encerramento normal dos nós, drenando-os. Se as cargas de trabalho
em execução em um cluster precisarem ser encerradas normalmente, use kubectl
drain para limpá-las
antes de excluir o cluster.
Para excluir um pool de nós, consulte Excluir um pool de nós. Não é possível excluir pools de nós gerenciados pelo Autopilot.