Questa pagina mostra come aggiungere, gestire, scalare, eseguire l'upgrade ed eliminare i pool di nodi eseguiti nei cluster Google Kubernetes Engine (GKE) Standard. Scopri anche come eseguire il deployment dei pod in pool di nodi specifici e le implicazioni degli upgrade dei pool di nodi sui carichi di lavoro in esecuzione.
Le informazioni contenute in questa pagina ti aiutano a ottimizzare i cluster GKE Standard per prestazioni e scalabilità.
Questa pagina è rivolta a operatori, architetti cloud e sviluppatori che devono creare e configurare cluster ed eseguire il deployment dei carichi di lavoro su GKE. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise. Google Cloud
Prima di leggere questa pagina, assicurati di avere familiarità con i pool di nodi.
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à,
installala e poi
inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo
gcloud components update
.
- Assicurati di avere un cluster standard esistente.
Configura i service account IAM per GKE
GKE utilizza i service account IAM collegati ai nodi per
eseguire attività di sistema come il logging e il monitoraggio. Come minimo, questi service account nodo
devono avere il ruolo
Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount
) sul tuo progetto. Per impostazione predefinita,
GKE utilizza l'account di servizio predefinito di Compute Engine,
che viene creato automaticamente nel tuo progetto, come service account del nodo.
Per concedere il ruolo roles/container.defaultNodeServiceAccount
al account di servizio predefinito di Compute Engine, completa i seguenti passaggi:
console
- Vai alla pagina Benvenuto:
- Nel campo Numero progetto, fai clic su Copia negli appunti.
- Vai alla pagina IAM:
- Fai clic su Concedi l'accesso.
- Nel campo Nuove entità, specifica il seguente valore:
SostituisciPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
con il numero di progetto che hai copiato. - Nel menu Seleziona un ruolo, seleziona il ruolo Kubernetes Engine Default Node Service Account.
- 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 di Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER[email protected]" \ --role="roles/container.defaultNodeServiceAccount"
Sostituisci
PROJECT_NUMBER
con il numero di 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 service account IAM (Identity and Access Management) con privilegi minimi per i tuoi 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 del account di servizio IAM da utilizzare per i nodi.Ti consigliamo vivamente di specificare un account di servizio IAM con privilegi minimi che i nodi possono utilizzare al posto del account di servizio predefinito di Compute Engine. Per scoprire come creare un account di servizio con privilegi minimi, vedi Utilizzare un service account 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 service account con privilegi minimi.
Per un elenco completo dei flag facoltativi che puoi specificare, consulta la documentazione
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 questo output, vengono visualizzati i dettagli del pool di nodi, come 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 invece di segnalare lo stato dal server. Per controllare lo stato di tutti i node pool, inclusi quelli di cui non è ancora stato 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, 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 su add_box Aggiungi pool di nodi.
Configura il pool di nodi.
Nel menu di navigazione, fai clic su Sicurezza.
- (Facoltativo) Specifica un account di servizio IAM personalizzato per i tuoi nodi:
- Nella pagina Impostazioni avanzate, espandi la sezione Sicurezza.
- Nel menu Service account, seleziona il account di servizio che preferisci.
Ti consigliamo vivamente di specificare un account di servizio IAM con privilegi minimi che i nodi possono utilizzare al posto del account di servizio predefinito di Compute Engine. Per scoprire come creare un account di servizio con privilegi minimi, vedi Utilizzare un service account 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, fai riferimento al seguente esempio:
Per scoprire di più sull'utilizzo di Terraform, consulta Supporto di Terraform per GKE.
Visualizza i node pool 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, segui questi 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.
Scalare 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 node pool GKE Standard, puoi scalare un pool di nodi orizzontalmente modificando il numero di nodi nel node pool oppure scalare un pool di nodi verticalmente modificando la configurazione degli attributi della macchina dei nodi.
Scalare orizzontalmente modificando il conteggio dei 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 da ridimensionare.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 multizona 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:
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.
Scalare verticalmente 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 pool di nodiool. Se configuri la strategia di upgrade blue-green, puoi eseguire la migrazione dei carichi di lavoro dai nodi originali a quelli nuovi, con la possibilità di eseguire il rollback dei nodi originali in caso di errore della migrazione. Ispeziona le impostazioni di upgrade del pool di nodi per assicurarti che la strategia configurata sia quella che vuoi per l'aggiornamento dei 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 i flag per gli attributi della macchina che non vuoi modificare. Tuttavia, devi utilizzare almeno un flag di attributo macchina, altrimenti il comando non va a buon fine.
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodi da ridimensionare.CLUSTER_NAME
: il nome del cluster da ridimensionare.MACHINE_TYPE
: il tipo di macchina da utilizzare per i nodi. Per saperne di più, consulta gcloud container node-pools update.DISK_TYPE
: il tipo di disco di avvio della VM nodo, deve essere uno trapd-standard
,pd-ssd
,pd-balanced
.DISK_SIZE
: le dimensioni dei dischi di avvio delle VM nodo in GB. Il valore predefinito è 100 GB.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni ai carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, trova la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare le norme di manutenzione. Per saperne di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni dell'aggiornamento dei nodi.
Esegui l'upgrade di un pool di nodi
Per impostazione predefinita, i nodi di un cluster hanno l'upgrade automatico abilitato. Gli upgrade automatici dei nodi assicurano che la versione del control plane e dei nodi del cluster rimangano sincronizzate e conformi alle norme sul disallineamento delle versioni di Kubernetes, che garantiscono che i control plane siano compatibili con i nodi fino a due versioni secondarie precedenti al control plane. Ad esempio, i control plane 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 upgrade di sovraccarico e upgrade blu/verde.
Scegli una strategia e utilizza i parametri per ottimizzarla in modo che si adatti meglio alle esigenze del tuo ambiente cluster.
Come funzionano gli upgrade dei nodi
Durante l'upgrade di un nodo, GKE smette di pianificare nuovi pod e tenta di pianificare i pod in esecuzione su altri nodi. Questo è simile ad altri eventi che ricreano il nodo, ad esempio l'attivazione o la disattivazione di una funzionalità supool di nodiol.
Durante gli upgrade automatici o manuali dei nodi,
i PodDisruptionBudget (PDB)
e il periodo di tolleranza per l'interruzione dei pod
vengono rispettati per un massimo di 1 ora. Se i pod in esecuzione sul nodo non possono essere
pianificati su nuovi nodi dopo un'ora, GKE avvia comunque
l'upgrade. Questo comportamento si applica anche se configuri i PDB in modo che abbiano sempre
tutte le repliche disponibili impostando il campo maxUnavailable
su
0
o 0%
o 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 possa avvenire l'eliminazione del nodo.
Se un carico di lavoro richiede maggiore flessibilità con l'arresto controllato, utilizza gli upgrade blu/verde, che forniscono impostazioni per un tempo di assorbimento aggiuntivo per estendere i controlli PDB oltre l'ora predefinita.
Per scoprire di più su cosa aspettarsi durante l'interruzione del nodo in generale, consulta l'argomento relativo ai pod.
L'upgrade viene completato 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 control plane, GKE lo contrassegna come pianificabile.
Le nuove istanze dei nodi eseguono la versione di Kubernetes desiderata, nonché:
Affinché l'upgrade di un pool di nodi venga considerato completato, tutti i nodi del pool di nodi devono essere ricreati. Se un upgrade è stato avviato ma non è stato completato e si trova in uno stato di upgrade parziale, la versione del pool di nodi potrebbe non riflettere la versione di tutti i nodi. Per saperne di più, consulta Alcune versioni dei nodi non corrispondono alla versione pool di nodi dopo un upgrade incompleto del node pool. Per determinare che l'upgrade del pool di nodi è stato completato, controlla lo stato dell'upgrade delpool di nodie pool. Se l'operazione di upgrade supera il periodo di conservazione, verifica che la versione di ogni nodo corrisponda alla versione del pool di nodi.
Upgrade manuale di un node pool
Puoi eseguire manualmente l'upgrade della versione di un pool di nodi in modo che corrisponda alla versione del control plane o a una versione precedente ancora disponibile e compatibile con il control plane. Puoi eseguire l'upgrade manuale di più node pool in parallelo, mentre GKE esegue automaticamente l'upgrade di un solo pool di nodi alla volta.
Quando esegui l'upgrade manuale di un pool di nodi, GKE rimuove tutte le etichette che
hai aggiunto 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 presente le seguenti condizioni:
- L'upgrade di un pool di nodi potrebbe interrompere i workload in esecuzione in quel pool di nodi. Per evitare questo problema, puoi creare un nuovo pool di nodi con la versione desiderata ed eseguire la migrazione del workload. Dopo la migrazione, puoi eliminare il vecchio pool di nodi.
- Se esegui l'upgrade di un pool di nodi con un Ingress in stato di errore,
il gruppo di istanze non viene sincronizzato. 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 l'ingresso.
Puoi eseguire manualmente l'upgrade dei tuoi 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 pool di nodi da aggiornare.NODE_POOL_NAME
: il nome del pool di nodi da aggiornare.VERSION
: la versione di Kubernetes a cui vengono eseguiti 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 flag
facoltativo --cluster-version
:
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME \
--cluster-version VERSION
Per saperne di più sulla specifica delle versioni, vedi Controllo delle versioni.
Per saperne di più, consulta la documentazione
gcloud container clusters upgrade
.
Console
Per eseguire l'upgrade di un pool di nodi utilizzando la console Google Cloud , segui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic sul nome del cluster.
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 node pool GKE hanno etichette nel 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 la sezione Assegnazione di 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 mitigare un upgradepool di nodil non riuscito. Consulta le limitazioni prima di eseguire il downgrade di un pool di nodi.
Utilizza la strategia di upgrade dei nodi blu/verde se devi ottimizzare la mitigazione dei rischi per gli upgradepool di nodil che influiscono sui tuoi workload. 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 della manutenzione per il cluster per impedire l'upgrade automatico del pool di nodi da parte di GKE 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 node pool.
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 influisce sui tuoi workload, incluse le interazioni con i selettori di nodi, consulta Eliminazione dei node pool.
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.
Migrare i nodi a un tipo di macchina diverso
Per scoprire diversi approcci per spostare i carichi di lavoro tra i 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 node pool
Per eseguire la migrazione dei carichi di lavoro da un pool di nodi a un altro, consulta la sezione Eseguire la migrazione dei carichi di lavoro tra i node pool. 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 a quelli nuovi.
Risoluzione dei problemi
Per informazioni sulla risoluzione dei problemi, consulta Risoluzione dei problemi dei pool di nodi standard e Risoluzione dei problemi di registrazione dei nodi.
Passaggi successivi
- Scopri di più sui node pool 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.