Questa pagina mostra come aggiungere ed eseguire operazioni sui pool di nodi in esecuzione sui tuoi cluster Google Kubernetes Engine (GKE) Standard. Per scoprire come funzionano i pool di nodi, consulta Informazioni sui pool di nodi.
I cluster possono eseguire operazioni, come il provisioning automatico dei nodi, su più node pool in parallelo. Puoi creare, aggiornare o eliminare manualmente un pool di nodi mentre è già in corso la creazione, l'aggiornamento o l'eliminazione di un altro pool di nodi.
Queste istruzioni non si applicano ai cluster Autopilot, in cui GKE gestisce i nodi e non sono presenti pool di nodi da gestire. Per scoprire di più, consulta la panoramica di Autopilot.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Configurare gli account di servizio IAM per GKE
GKE utilizza service account IAM collegati ai tuoi nodi per eseguire attività di sistema come il logging e il monitoraggio. Come minimo, questi account di servizio dei nodi devono avere il ruolo Account di servizio dei nodi predefinito di Kubernetes Engine (roles/container.defaultNodeServiceAccount
) nel progetto. Per impostazione predefinita, GKE utilizza l'account di servizio predefinito di Compute Engine, creato automaticamente nel progetto, come account di servizio del nodo.
Per concedere il ruolo roles/container.defaultNodeServiceAccount
all'account di servizio predefinito di Compute Engine, completa i seguenti passaggi:
console
- Vai alla pagina Welcome (Ti diamo il benvenuto):
- Nel campo Numero progetto, fai clic su Copia negli appunti.
- Vai alla pagina IAM:
- Fai clic su Concedi accesso.
- Nel campo Nuove entità, specifica il seguente valore:
SostituisciPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
con il numero del progetto che hai copiato. - Nel menu Seleziona un ruolo, seleziona il ruolo Account di servizio del nodo predefinito Kubernetes Engine.
- Fai clic su Salva.
gcloud
- Trova il numero del tuo progetto Google Cloud:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Sostituisci
PROJECT_ID
con l'ID progetto.L'output è simile al seguente:
12345678901
- Concedi il ruolo
roles/container.defaultNodeServiceAccount
all'account di servizio predefinito Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Sostituisci
PROJECT_NUMBER
con il numero del progetto del passaggio precedente.
Aggiungi un node pool a un cluster standard
Puoi aggiungere un nuovo pool di nodi a un cluster GKE Standard utilizzando gcloud CLI, la console Google Cloud o Terraform. GKE supporta anche il provisioning automatico dei nodi, che gestisce automaticamente i pool di nodi nel cluster in base ai requisiti di scalabilità.
Crea e utilizza un account di servizio IAM (Identity and Access Management) con privilegi minimi per i pool di nodi da utilizzare al posto dell'account di servizio predefinito di Compute Engine. Per istruzioni su come creare un account di servizio con privilegi minimi, consulta Rafforzare la sicurezza del cluster.
gcloud
Per creare un pool di nodi, esegui il comando gcloud container node-pools create
:
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--service-account SERVICE_ACCOUNT
Sostituisci quanto segue:
POOL_NAME
: il nome del nuovo pool di nodi.CLUSTER_NAME
: il nome del cluster esistente.SERVICE_ACCOUNT
: il nome dell'account di servizio IAM da utilizzare per i tuoi nodi.Ti consigliamo vivamente di specificare un account di servizio IAM con privilegi minimi che i tuoi nodi possano utilizzare al posto dell'account di servizio predefinito di Compute Engine. Per imparare a creare un account di servizio con privilegi minimi, consulta Utilizzare un account di servizio con privilegio minimo minimi.
Per specificare un account di servizio personalizzato in gcloud CLI, aggiungi il seguente flag al comando:
--service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci SERVICE_ACCOUNT_NAME con il nome del tuo account di servizio con privilegi minimi.
Per un elenco completo dei flag facoltativi che puoi specificare, consulta la documentazione di gcloud container node-pools create
.
L'output è simile al seguente:
Creating node pool POOL_NAME...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-central1/clusters/CLUSTER_NAME/nodePools/POOL_NAME].
NAME: POOL_NAME
MACHINE_TYPE: e2-medium
DISK_SIZE_GB: 100
NODE_VERSION: 1.21.5-gke.1302
In questa uscita, vengono visualizzati i dettagli del pool di nodi, ad esempio il tipo di macchina e la versione di GKE in esecuzione sui nodi.
A volte il pool di nodi viene creato correttamente, ma il comando gcloud
scade anziché segnalare lo stato del server. Per controllare lo stato di tutti i pool di nodi, inclusi quelli di cui non è stato ancora eseguito il provisioning completo, utilizza il seguente comando:
gcloud container node-pools list --cluster CLUSTER_NAME
Console
Per aggiungere un pool di nodi a un cluster standard esistente, esegui i seguenti passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster standard da modificare.
Fai clic su add_box Aggiungi pool di nodi.
Configura il pool di nodi.
Nel menu di navigazione, fai clic su Sicurezza.
- Se vuoi, specifica un account di servizio IAM personalizzato per i tuoi nodi:
- Nella pagina Impostazioni avanzate, espandi la sezione Sicurezza.
- Nel menu Account di servizio, seleziona l'account di servizio che preferisci.
Ti consigliamo vivamente di specificare un account di servizio IAM con privilegi minimi che i tuoi nodi possano utilizzare al posto dell'account di servizio predefinito di Compute Engine. Per imparare a creare un account di servizio con privilegi minimi, consulta Utilizzare un account di servizio con privilegio minimo minimi.
Fai clic su Crea per aggiungere il pool di nodi.
Terraform
Per aggiungere un pool di nodi a un cluster standard esistente utilizzando Terraform, consulta il seguente esempio:
Per scoprire di più sull'utilizzo di Terraform, consulta Assistenza di Terraform per GKE.
Visualizzare i pool di nodi in un cluster standard
gcloud
Per elencare tutti i node pool di un cluster standard, esegui il comando
gcloud container node-pools list
:
gcloud container node-pools list --cluster CLUSTER_NAME
Per visualizzare i dettagli di un pool di nodi specifico, esegui il comando
gcloud container node-pools describe
:
gcloud container node-pools describe POOL_NAME \
--cluster CLUSTER_NAME
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del cluster.POOL_NAME
: il nome del pool di nodi da visualizzare.
Console
Per visualizzare i node pool per un cluster standard, svolgi i seguenti passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster standard.
Fai clic sulla scheda Nodi.
In Pool di nodi, fai clic sul nome del pool di nodi che vuoi visualizzare.
Eseguire lo scaling di un pool di nodi
Puoi scalare i pool di nodi verso l'alto o verso il basso per ottimizzare le prestazioni e i costi. Con i pool di nodi GKE Standard, puoi scalare un pool di nodi in orizzontale modificando il numero di nodi nel pool di nodi oppure scalare un pool di nodi in verticale modificando la configurazione dell'attributo della macchina dei nodi.
Eseguire la scalabilità orizzontale modificando il numero di nodi
gcloud
Per ridimensionare i node pool di un cluster, esegui il comando
gcloud container clusters resize
:
gcloud container clusters resize CLUSTER_NAME \
--node-pool POOL_NAME \
--num-nodes NUM_NODES
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del cluster di cui modificare le dimensioni.POOL_NAME
: il nome del pool di nodi da ridimensionare.NUM_NODES
: il numero di nodi nel pool in un cluster zonale. Se utilizzi cluster multi-zonali o regionali, NUM_NODES è il numero di nodi per ogni zona in cui si trova il pool di nodi.
Ripeti questo comando per ogni pool di nodi. Se il cluster ha un solo
pool di nodi, ometti il flag --node-pool
.
Console
Per ridimensionare i pool di nodi di un cluster, segui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster standard da modificare.
Fai clic sulla scheda Nodi.
Nella sezione Pool di nodi, fai clic sul nome del pool di nodi che vuoi ridimensionare.
Fai clic su edit Ridimensiona.
Nel campo Numero di nodi, inserisci il numero di nodi che vuoi nel pool di nodi, quindi fai clic su Ridimensiona.
Ripeti l'operazione per ogni pool di nodi in base alle tue esigenze.
Esegui la scalabilità verticale modificando gli attributi della macchina del nodo
Puoi modificare il tipo di macchina, il tipo di disco e la dimensione del disco configurati del pool di nodi.
Quando modifichi uno o più di questi attributi della macchina, GKE aggiorna i nodi alla nuova configurazione utilizzando la strategia di upgrade configurata per il pool di nodi. Se configuri la strategia di upgrade blue-green, puoi eseguire la migrazione dei carichi di lavoro dai nodi originali ai nuovi nodi, avendo al contempo la possibilità di eseguire il rollback dei nodi originali in caso di fallimento della migrazione. Esamina le impostazioni di upgrade del pool di nodi per assicurarti che la strategia configurata sia quella in base alla quale vuoi aggiornare i nodi.
Aggiorna almeno uno degli attributi della macchina evidenziati nel seguente comando:
gcloud container node-pools update POOL_NAME \
--cluster CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--disk-type DISK_TYPE \
--disk-size DISK_SIZE
Ometti gli indicatori per gli attributi della macchina che non vuoi modificare. Tuttavia, devi utilizzare almeno un flag dell'attributo macchina, altrimenti il comando non andrà a buon fine.
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodi da ridimensionare.CLUSTER_NAME
: il nome del cluster di cui modificare le dimensioni.MACHINE_TYPE
: il tipo di macchina da utilizzare per i nodi. Per scoprire di più, consulta gcloud container node-pools update.DISK_TYPE
: il tipo di disco di avvio della VM del nodo, deve essere uno dei valoripd-standard
,pd-ssd
,pd-balanced
.DISK_SIZE
: le dimensioni dei dischi di avvio delle VM del nodo in GB. Il valore predefinito è 100 GB.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare i criteri di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.
Eseguire l'upgrade di un pool di nodi
Per impostazione predefinita, i nodi di un cluster hanno attivato l'upgrade automatico. Gli upgrade automatici dei nodi assicurano che la versione del piano di controllo e del nodo del cluster rimangano sincronizzate e in conformità con le norme relative al disallineamento delle versioni di Kubernetes, che garantiscono che i piani di controllo siano compatibili con i nodi fino a due versioni secondarie precedenti rispetto al piano di controllo. Ad esempio, i piani di controllo Kubernetes 1.29 sono compatibili con i nodi Kubernetes 1.27.
Evita di disattivare gli upgrade automatici dei nodi in modo che il cluster possa usufruire degli upgrade elencati nel paragrafo precedente.
Con gli upgrade dei pool di nodi GKE, puoi scegliere tra due strategie di upgrade configurabili, ovvero gli upgrade di sovraccarico e gli upgrade blue-green.
Scegli una strategia e utilizza i parametri per ottimizzarla in base alle esigenze del tuo ambiente cluster.
Come funzionano gli upgrade dei nodi
Durante l'upgrade di un nodo, GKE smette di pianificare nuovi pod su di esso e tenta di pianificare i pod in esecuzione su altri nodi. È simile ad altri eventi che ricreano il nodo, ad esempio l'attivazione o la disattivazione di una funzionalità nel pool di nodi.
Durante gli upgrade dei nodi automatici o manuali,
PodDisruptionBudget (PDB)
e il periodo di tolleranza per l'interruzione dei pod
vengono rispettati per un massimo di 1 ora. Se dopo un'ora non è possibile pianificare i pod in esecuzione sul nodo su nuovi nodi, GKE avvia comunque l'upgrade. Questo comportamento si applica anche se configuri i PDB in modo da avere sempre tutte le repliche disponibili impostando il campo maxUnavailable
su 0
o 0%
oppure impostando il campo minAvailable
su 100%
o sul numero di repliche. In tutti questi scenari, GKE elimina i pod dopo un'ora in modo che l'eliminazione del nodo possa avvenire.
Se un carico di lavoro richiede una maggiore flessibilità con l'interruzione controllata, utilizza gli upgrade blue-green che forniscono impostazioni per un tempo di attesa aggiuntivo per estendere i controlli PDB oltre l'ora predefinita.
Per scoprire di più su cosa aspettarti durante l'interruzione del nodo in generale, consulta l'argomento sui pod.
Se un carico di lavoro richiede una maggiore flessibilità con l'interruzione controllata, consigliamo di utilizzare gli upgrade blue-green, che forniscono impostazioni per un tempo di attesa aggiuntivo per estendere i controlli PDB oltre il valore predefinito di 1 ora. Per ulteriori informazioni su cosa aspettarsi durante l'interruzione del nodo in generale, consulta l'argomento relativo ai pod.
L'upgrade è completo solo quando tutti i nodi sono stati ricreati e il cluster è nello stato desiderato. Quando un nodo di cui è stato eseguito l'upgrade si registra con il piano di controllo, GKE lo contrassegna come pianificabile.
Le nuove istanze di nodi eseguono la versione di Kubernetes desiderata, nonché:
Upgrade manuale di un node pool
Puoi eseguire manualmente l'upgrade di una versione del pool di nodi in modo che corrisponda alla versione del piano di controllo o a una versione precedente ancora disponibile e compatibile con il piano di controllo. Puoi eseguire l'upgrade manuale di più pool di nodi in parallelo, mentre GKE esegue l'upgrade automatico di un solo pool di nodi alla volta.
Quando esegui l'upgrade manuale di un pool di nodi, GKE rimuove le etichette aggiunte ai singoli nodi utilizzando kubectl
.
Per evitare questo problema, applica le etichette ai pool di nodi.
Prima di eseguire l'upgrade manuale del pool di nodi, tieni presenti le seguenti condizioni:
- L'upgrade di un pool di nodi potrebbe interrompere i workload in esecuzione in quel pool di nodi. Per evitarlo, puoi creare un nuovo pool di nodi con la versione desiderata ed eseguire la migrazione del carico di lavoro. Dopo la migrazione, puoi eliminare il vecchio pool di nodi.
- Se esegui l'upgrade di un pool di nodi con un Ingress in uno stato di errore, il gruppo di istanze non si sincronizza. Per risolvere il problema, controlla innanzitutto lo stato utilizzando il comando
kubectl get ing
. Se il gruppo di istanze non è sincronizzato, puoi risolvere il problema riapplicando il manifest utilizzato per creare il Ingress.
Puoi eseguire manualmente l'upgrade dei pool di nodi a una versione compatibile con il piano di controllo utilizzando la console Google Cloud o Google Cloud CLI.
gcloud
Nei comandi di questa sezione vengono utilizzate le seguenti variabili:
CLUSTER_NAME
: il nome del cluster del node pool di cui eseguire l'upgrade.NODE_POOL_NAME
: il nome del pool di nodi di cui eseguire l'upgrade.VERSION
: la versione di Kubernetes a cui viene eseguito l'upgrade dei nodi. Ad esempio,--cluster-version=1.7.2
ocluster-version=latest
.
Esegui l'upgrade di un pool di nodi:
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME
Per specificare una versione diversa di GKE sui nodi, utilizza il parametro facoltativo --cluster-version
:
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME \
--cluster-version VERSION
Per ulteriori informazioni sulla specifica delle versioni, vedi Controllo delle versioni.
Per saperne di più, consulta la documentazione di gcloud container clusters upgrade
.
Console
Per eseguire l'upgrade di un pool di nodi utilizzando la console Google Cloud, svolgi i seguenti passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Accanto al cluster che vuoi modificare, fai clic su more_vert Azioni e poi su edit Modifica.
Nella pagina Dettagli cluster, fai clic sulla scheda Nodi.
Nella sezione Pool di nodi, fai clic sul nome del pool di nodi di cui vuoi eseguire l'upgrade.
Fai clic su edit Modifica.
Fai clic su Cambia in Versione nodo.
Seleziona la versione che ti interessa dall'elenco a discesa Versione nodo, quindi fai clic su Cambia.
La modifica della versione del nodo potrebbe richiedere alcuni minuti.
Esegui il deployment di un pod in un pool di nodi specifico
Puoi eseguire il deployment esplicito di un pod in un pool di nodi specifico utilizzando un
nodeSelector
nel manifest del pod. nodeSelector
pianifica i pod sui
nodi con un'etichetta corrispondente.
Tutti i pool di nodi GKE hanno etichette con il seguente formato:
cloud.google.com/gke-nodepool: POOL_NAME
.
Aggiungi questa etichetta al campo nodeSelector
nel pod come mostrato nell'esempio seguente:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
cloud.google.com/gke-nodepool: POOL_NAME
Per ulteriori informazioni, consulta Assegnazione dei pod ai nodi.
In alternativa al selettore di nodi, puoi utilizzare l'affinità dei nodi. Utilizza l'affinità dei nodi se vuoi una regola"soft" in cui il pod tenta di soddisfare il vincolo, ma viene comunque pianificato anche se il vincolo non può essere soddisfatto. Per ulteriori informazioni, consulta la sezione Affinità dei nodi. Puoi anche specificare le richieste di risorse per i contenitori.
Esegui il downgrade di un pool di nodi
Puoi eseguire il downgrade di un pool di nodi, ad esempio per attenuare un upgrade pool di nodi non riuscito. Esamina le limitazioni prima di eseguire il downgrade di un pool di nodi.
Utilizza la strategia di upgrade dei nodi blu-verde se devi ottimizzare per la mitigazione dei rischi per gli upgrade dei pool di nodi che influiscono sui tuoi carichi di lavoro. Con questa strategia, puoi eseguire il rollback di un upgrade in corso ai nodi originali se l'upgrade non va a buon fine.
- Imposta un'esclusione di manutenzione per il cluster per impedire a GKE di eseguire l'upgrade automatico del pool di nodi dopo il downgrade.
- Per eseguire il downgrade di un pool di nodi, specifica una versione precedente seguendo le istruzioni per eseguire l'upgrade manuale di un pool di nodi.
Elimina un node pool
L'eliminazione di un pool di nodi comporta l'eliminazione dei nodi e di tutti i workload in esecuzione, senza rispettare
PodDisruptionBudget
le impostazioni. Per scoprire di più su come questo influisce sui tuoi workload, incluse le interazioni con i selettori di nodi, consulta Eliminare i pool di nodi.
gcloud
Per eliminare un pool di nodi, esegui il comando gcloud container node-pools delete
:
gcloud container node-pools delete POOL_NAME \
--cluster CLUSTER_NAME
Console
Per eliminare un pool di nodi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster standard da modificare.
Fai clic sulla scheda Nodi.
Nella sezione Pool di nodi, fai clic su delete accanto al pool di nodi che vuoi eliminare.
Quando ti viene richiesto di confermare, fai clic su Elimina.
Eseguire la migrazione dei nodi a un tipo di macchina diverso
Per scoprire i diversi approcci per spostare i workload tra tipi di macchine, ad esempio per eseguire la migrazione a un tipo di macchina più recente, consulta Eseguire la migrazione dei nodi a un tipo di macchina diverso.
Esegui la migrazione dei carichi di lavoro tra i pool di nodi
Per eseguire la migrazione dei workload da un pool di nodi a un altro, consulta Eseguire la migrazione dei workload tra i pool di nodi. Ad esempio, puoi utilizzare queste istruzioni se stai sostituendo un pool di nodi esistente con un nuovo pool di nodi e vuoi assicurarti che i carichi di lavoro vengano spostati dai nodi esistenti ai nuovi nodi.
Risoluzione dei problemi
Per informazioni sulla risoluzione dei problemi, consulta Risolvere i problemi relativi ai pool di nodi standard e Risolvere i problemi relativi alla registrazione dei nodi.
Passaggi successivi
- Scopri come funzionano i pool di nodi.
- Scopri di più sui pool di nodi con provisioning automatico.
- Scopri come GKE può riparare automaticamente i nodi non integri.
- Scopri come configurare
kubelet
esysctl
utilizzando la configurazione del sistema di nodi.