Questo documento spiega come funzionano i node pool in Google Kubernetes Engine (GKE). Un node pool è un gruppo di nodi all'interno di un cluster Standard che condividono la stessa configurazione. In modalità GKE Standard, puoi scegliere tra diverse opzioni per i node pool per soddisfare le esigenze dei tuoi workload. Se scegli di utilizzare Autopilot, non devi configurare i pool di nodi: GKE gestisce i nodi per te, anche se puoi eseguire l'upgrade manuale dei pool di nodi gestiti da Autopilot nei cluster Standard, se necessario.
Per scoprire di più sulla creazione di cluster in modalità Standard, consulta Crea un cluster regionale e Crea un cluster di zona. Per scoprire come gestire i node pool nei cluster Standard esistenti, consulta Aggiunta e gestione dei node pool.
Panoramica
Un pool di nodi è un gruppo di nodi all'interno di un cluster che condividono la stessa configurazione. I node pool usano una specifica NodeConfig. Ogni nodo nel pool ha un'etichetta nodo Kubernetes, cloud.google.com/gke-nodepool, il cui valore è il nome del pool di nodi.
Quando crei un cluster in modalità Standard, il numero e il tipo di nodi che specifichi vengono utilizzati per creare il primo pool di nodi del cluster.
Per impostazione predefinita, questo primo pool di nodi (noto come node pool predefinito) è composto da tre nodi in ciascuna delle zone di computing del cluster, con l'immagine nodo predefinita cos_containerd e un tipo di macchina per uso generico. Puoi specificare una serie di proprietà per il pool di nodi, a seconda dei requisiti del workload. Ad esempio, puoi creare un pool di nodi nel cluster con SSD locali, una piattaforma CPU minima, VM spot, un'immagine del nodo diversa, tipi di macchine diversi o un'interfaccia di rete virtuale più efficiente. Se specifichi il flag --num-nodes=0 quando crei un cluster, GKE salta la creazione del pool di nodi predefinito in modo che tu possa aggiungere node pool personalizzati in un secondo momento. Questa operazione richiede GKE 1.36.4-gke.1469000 o versioni successive, 1.37.1-gke.1153000 o versioni successive oppure 1.38.0-gke.2352000 o versioni successive.
Puoi quindi aggiungere al cluster ulteriori pool di nodi di dimensioni e tipi diversi. Tutti i nodi in un dato pool di nodi sono identici tra loro.
I node pool personalizzati sono utili quando devi pianificare pod che richiedono più risorse di altri, ad esempio più memoria o più spazio su disco locale. Se hai bisogno di un maggiore controllo sulla posizione in cui vengono pianificati i pod, puoi utilizzare le incompatibilità dei nodi.
Puoi creare, eseguire l'upgrade ed eliminare i pool di nodi singolarmente senza influire sull'intero cluster. Non puoi configurare un singolo nodo in un pool di nodi; qualsiasi modifica alla configurazione influisce su tutti i nodi del pool di nodi.
Puoi ridimensionare i node pool in un cluster aggiungendo o rimuovendo nodi.
Per impostazione predefinita, tutti i nuovi node pool eseguono la stessa versione di Kubernetes del control plane. I node pool esistenti possono essere aggiornati manualmente o automaticamente. Puoi anche eseguire più versioni dei nodi Kubernetes su ciascun pool di nodi del cluster, eseguire l'upgrade di ciascun pool di nodi in modo indipendente e scegliere come target node pool diversi per deployment specifici.
Node pool gestiti da Autopilot
Nei cluster Standard, oltre ai pool di nodi Standard descritti in questo documento, puoi anche avere pool di nodi gestiti da Autopilot, creati e gestiti da GKE per le classi di computing di Autopilot. Per saperne di più, consulta Informazioni sui workload in modalità Autopilot in GKE Standard.
Puoi eseguire l'upgrade manuale di questo tipo di pool di nodi. Tuttavia, non puoi eseguire altri tipi di aggiornamenti oltre agli upgrade (modifiche della versione). Inoltre, non puoi eliminare il node pool.
Deployment dei servizi in pool di nodi specifici
Quando definisci un servizio, puoi controllare indirettamente il pool di nodi in cui viene eseguito il deployment. Il pool di nodi non dipende dalla configurazione del servizio, ma dalla configurazione del pod.
Puoi eseguire esplicitamente il deployment di un pod in un pool di nodi specifico impostando un
nodeSelectornel manifest del pod. In questo modo, un pod viene eseguito solo sui nodi di quel pool di nodi. Per un esempio, consulta Deployment di un pod in un pool di nodi specifico.Puoi specificare le richieste di risorse per i container. Il pod viene eseguito solo sui nodi che soddisfano le richieste di risorse. Ad esempio, se la definizione del pod include un container che richiede quattro CPU, il servizio non seleziona i pod in esecuzione su nodi con due CPU.
Nodi in cluster multizona
Se hai creato un cluster multizona, tutti i node pool vengono replicati automaticamente in queste zone. Qualsiasi nuovo pool di nodi viene creato automaticamente in queste zone. Allo stesso modo, le eliminazioni rimuovono i pool di nodi anche dalle zone aggiuntive.
Tieni presente che, a causa di questo effetto moltiplicativo, la creazione di node pool potrebbe consumare una parte maggiore della quota del progetto per una regione specifica.
Eliminazione dei node pool
Quando elimini un node pool, GKE svuota tutti i nodi nel pool di nodi, eliminando e ripianificando tutti i pod. Il processo di svuotamento prevede l'eliminazione dei pod su ciascun nodo del pool di nodi da parte di GKE. GKE esegue entrambe le seguenti operazioni quando elimina i nodi:
- GKE svuota ogni nodo in un pool di nodi eliminando i pod con un periodo di terminazione controllata assegnato di
MAX_POD.MAX_PODè il valore massimo diterminationGracePeriodSecondsimpostato sui pod pianificati sul nodo, con un limite di un'ora. - Per impostazione predefinita, GKE non rispetta le impostazioni
PodDisruptionBudget(PDB) durante l'eliminazione pool di nodi. Tuttavia, puoi aggiornare la configurazione del pool di nodi in modo che GKE rispetti i PDB durante l'eliminazione pool di nodi, anche con un limite di un'ora. Il rispetto dei PDB offre ai workload l'opportunità di spostarsi su altri nodi del cluster. Per saperne di più sulla configurazione di questa impostazione, consulta Aggiorna un pool di nodi per rispettare i PDB durante lpool di nodi pool.
Se i pod hanno selettori di nodi specifici, potrebbero rimanere in una condizione non pianificabile se nessun altro nodo nel cluster soddisfa i criteri.
Quando un cluster viene eliminato, GKE non segue questa procedura di terminazione controllata dei nodi tramite svuotamento. Se i workload in esecuzione su un cluster devono essere terminati in modo controllato, utilizza kubectl
drain per eseguire la pulizia dei workload prima di eliminare il cluster.
Per eliminare un pool di nodi, consulta Elimina un node pool. Non puoi eliminare i node pool gestiti da Autopilot.
Passaggi successivi
- Scopri di più sull'architettura dei cluster in GKE.
- Scopri come eseguire il provisioning automatico dei nodi.