Acerca dos node pools

Esta página explica como funcionam os node pools no Google Kubernetes Engine (GKE). Um conjunto de nós é um grupo de nós num cluster que têm todos a mesma configuração. No modo Standard do GKE, pode escolher entre várias opções para os seus conjuntos de nós de forma a satisfazer as necessidades da sua carga de trabalho. Se optar por usar o Autopilot, não precisa de configurar conjuntos de nós: o GKE gere os nós por si.

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 conjunto tem uma etiqueta de nó do Kubernetes, cloud.google.com/gke-nodepool, que tem o nome do conjunto de nós como valor.

Quando cria um cluster no modo padrão, 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 pool de nós no cluster com SSDs locais, uma plataforma de CPU mínima, VMs Spot, 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 num determinado 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 cluster, atualizar cada node pool de forma independente e segmentar diferentes node pools para implementações específicas.

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 sim da configuração do pod.

  • Pode implementar explicitamente um pod num conjunto de nós específico definindo um nodeSelector no 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 em execução em nós com duas 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 conjunto de nós é 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 drenagem envolve a eliminação de pods por parte do GKE em cada nó no conjunto de nós. Cada nó num conjunto de nós é esvaziado através da eliminação de pods com um período de encerramento elegante atribuído de MAX_POD. MAX_POD é o máximo terminationGracePeriodSeconds definido nos agrupamentos agendados no nó, com um limite máximo de uma hora. PodDisruptionBudget As definições não são respeitadas durante a eliminação do conjunto de nós.

Se os pods tiverem seletores de nós específicos, os pods 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 graciosa 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.

O que se segue?