Aggiunta e gestione dei pool di nodi


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

  1. Vai alla pagina Welcome (Ti diamo il benvenuto):

    Vai a Benvenuto

  2. Nel campo Numero progetto, fai clic su Copia negli appunti.
  3. Vai alla pagina IAM:

    Vai a IAM

  4. Fai clic su Concedi accesso.
  5. Nel campo Nuove entità, specifica il seguente valore:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Sostituisci PROJECT_NUMBER con il numero del progetto che hai copiato.
  6. Nel menu Seleziona un ruolo, seleziona il ruolo Account di servizio del nodo predefinito Kubernetes Engine.
  7. Fai clic su Salva.

gcloud

  1. 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
    
  2. 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à.

Best practice:

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:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster standard da modificare.

  3. Fai clic su Aggiungi pool di nodi.

  4. Configura il pool di nodi.

  5. Nel menu di navigazione, fai clic su Sicurezza.

  6. Se vuoi, specifica un account di servizio IAM personalizzato per i tuoi nodi:
    1. Nella pagina Impostazioni avanzate, espandi la sezione Sicurezza.
    2. 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.

  7. 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:

resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    service_account = google_service_account.default.email
  }
}

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:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster standard.

  3. Fai clic sulla scheda Nodi.

  4. 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:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster standard da modificare.

  3. Fai clic sulla scheda Nodi.

  4. Nella sezione Pool di nodi, fai clic sul nome del pool di nodi che vuoi ridimensionare.

  5. Fai clic su Ridimensiona.

  6. Nel campo Numero di nodi, inserisci il numero di nodi che vuoi nel pool di nodi, quindi fai clic su Ridimensiona.

  7. 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 valori pd-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.

Best practice:

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.

Best practice:

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 o cluster-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:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Accanto al cluster che vuoi modificare, fai clic su Azioni e poi su Modifica.

  3. Nella pagina Dettagli cluster, fai clic sulla scheda Nodi.

  4. Nella sezione Pool di nodi, fai clic sul nome del pool di nodi di cui vuoi eseguire l'upgrade.

  5. Fai clic su Modifica.

  6. Fai clic su Cambia in Versione nodo.

  7. 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.

Best practice:

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.

  1. Imposta un'esclusione di manutenzione per il cluster per impedire a GKE di eseguire l'upgrade automatico del pool di nodi dopo il downgrade.
  2. 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:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster standard da modificare.

  3. Fai clic sulla scheda Nodi.

  4. Nella sezione Pool di nodi, fai clic su accanto al pool di nodi che vuoi eliminare.

  5. 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