Este documento explica como funcionam os node pools no Google Kubernetes Engine (GKE). Um conjunto de nós é um grupo de nós num cluster padrão que têm todos a mesma configuração. No modo padrão do GKE, pode escolher entre várias opções para os seus conjuntos de nós de forma a satisfazer as suas necessidades de carga de trabalho. Se optar por usar o Autopilot, não precisa de configurar os conjuntos de nós: o GKE gere os nós por si, embora possa atualizar manualmente os conjuntos de nós geridos pelo Autopilot em clusters padrão, se necessário.
Para saber como criar clusters no modo padrão, consulte os artigos Crie um cluster regional e Crie um cluster zonal. Para saber como gerir pools de nós em clusters padrão existentes, consulte o artigo Adicionar e gerir pools de nós.
Vista geral
Um conjunto de nós é um grupo de nós num cluster que têm todos a mesma configuração. Os node pools usam uma especificação NodeConfig. Cada nó no
pool tem uma etiqueta de nó do Kubernetes, cloud.google.com/gke-nodepool, que tem o
nome do node pool como valor.
Quando cria um cluster no modo Standard, o número de nós e o tipo de nós que especificar são usados para criar o primeiro node pool do cluster.
Por predefinição, este primeiro node pool (conhecido como node pool predefinido) consiste em três nós em cada uma das zonas de computação do cluster, com a imagem do nó predefinida cos_containerd e um tipo de máquina de uso geral. Pode especificar várias propriedades para o conjunto de nós, consoante os requisitos da carga de trabalho. Por exemplo, pode criar um conjunto de nós no cluster com SSDs locais, uma plataforma de CPU mínima, VMs de capacidade instantânea, uma imagem de nó diferente, diferentes tipos de máquinas ou uma interface de rede virtual mais eficiente.
Em seguida, pode adicionar pools de nós adicionais de diferentes tamanhos e tipos ao seu cluster. Todos os nós em qualquer conjunto de nós são idênticos entre si.
Os conjuntos de nós personalizados são úteis quando precisa de agendar pods que requerem mais recursos do que outros, como mais memória ou mais espaço no disco local. Se precisar de mais controlo sobre onde os pods são agendados, pode usar node taints.
Pode criar, atualizar e eliminar pools de nós individualmente sem afetar todo o cluster. Não pode configurar um único nó num conjunto de nós. Quaisquer alterações de configuração afetam todos os nós no conjunto de nós.
Pode redimensionar os conjuntos de nós num cluster adicionando ou removendo nós.
Por predefinição, todos os novos conjuntos de nós executam a mesma versão do Kubernetes que o plano de controlo. Os conjuntos de nós existentes podem ser atualizados manualmente ou atualizados automaticamente. Também pode executar várias versões de nós do Kubernetes em cada node pool no seu cluster, atualizar cada node pool de forma independente e segmentar diferentes node pools para implementações específicas.
Node pools geridos pelo Autopilot
Nos clusters padrão, além dos conjuntos de nós padrão descritos neste documento, também pode ter conjuntos de nós geridos pelo Autopilot, que são criados e geridos pelo GKE para classes de computação do Autopilot. Para mais informações, consulte o artigo Acerca das cargas de trabalho do modo Autopilot no GKE Standard.
Pode atualizar manualmente este tipo de node pool. No entanto, não pode fazer outros tipos de atualizações além das atualizações (alterações de versão). Também não pode eliminar o grupo de nós.
Implementar serviços em node pools específicos
Quando define um serviço, pode controlar indiretamente em que conjunto de nós é implementado. O conjunto de nós não depende da configuração do serviço, mas da configuração do pod.
Pode implementar explicitamente um pod num conjunto de nós específico definindo um
nodeSelectorno manifesto do pod. Isto força a execução de um Pod apenas em nós nesse conjunto de nós. Para ver um exemplo, consulte o artigo Implementar um pod num grupo de nós específico.Pode especificar pedidos de recursos para os contentores. O pod só é executado em nós que satisfazem os pedidos de recursos. Por exemplo, se a definição do agrupamento incluir um contentor que requer quatro CPUs, o serviço não seleciona agrupamentos executados em nós com dois CPUs.
Nós em clusters multizona
Se criou um cluster multizonal, todos os conjuntos de nós são replicados automaticamente para essas zonas. Qualquer novo node pool é criado automaticamente nessas zonas. Da mesma forma, as eliminações também eliminam esses conjuntos de nós das zonas adicionais.
Tenha em atenção que, devido a este efeito multiplicativo, isto pode consumir mais da quota do seu projeto para uma região específica quando cria conjuntos de nós.
Eliminar node pools
Quando elimina um node pool, o GKE esgota todos os nós no node pool, eliminando e reagendando todos os pods. O processo de esgotamento envolve a eliminação de pods por parte do GKE em cada nó no conjunto de nós. O GKE faz o seguinte quando elimina nós:
- O GKE esgota cada nó num conjunto de nós eliminando os pods com um período de encerramento gracioso atribuído de
MAX_POD.MAX_PODé o máximoterminationGracePeriodSecondsdefinido nos agrupamentos agendados no nó, com um limite máximo de uma hora. - Por predefinição, o GKE não respeita as definições de
PodDisruptionBudget(PDB) durante a eliminação de node pools. No entanto, pode atualizar a configuração do conjunto de nós para que o GKE respeite os PDBs durante a eliminação do conjunto de nós, também com um limite de uma hora. O respeito pelos PDBs dá às cargas de trabalho a oportunidade de se moverem para outros nós no cluster. Para mais informações sobre a configuração desta definição, consulte o artigo Atualize um conjunto de nós para respeitar os PDBs durante a eliminação do conjunto de nós.
Se os agrupamentos tiverem seletores de nós específicos, podem permanecer numa condição de não agendamento se nenhum outro nó no cluster satisfizer os critérios.
Quando um cluster é eliminado, o GKE não segue este processo de terminar os nós de forma elegante esvaziando-os. Se as cargas de trabalho em execução num cluster tiverem de ser terminadas corretamente, use kubectl
drain para limpar as cargas de trabalho antes de eliminar o cluster.
Para eliminar um node pool, consulte o artigo Elimine um node pool. Não pode eliminar node pools geridos pelo Autopilot.