Aggiunta e gestione dei node pool


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.

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

  1. Vai alla pagina 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 l'accesso.
  5. Nel campo Nuove entità, specifica il seguente valore:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Sostituisci PROJECT_NUMBER con il numero di progetto che hai copiato.
  6. Nel menu Seleziona un ruolo, seleziona il ruolo Kubernetes Engine Default Node Service Account.
  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 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à.

Best practice:

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:

  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. (Facoltativo) Specifica un account di servizio IAM personalizzato per i tuoi nodi:
    1. Nella pagina Impostazioni avanzate, espandi la sezione Sicurezza.
    2. 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.

  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, fai riferimento al 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 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:

  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.

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:

  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.

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

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

Best practice:

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

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

    Vai a Google Kubernetes Engine

  2. Fai clic sul nome del cluster.

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

Best practice:

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.

  1. Imposta un'esclusione della manutenzione per il cluster per impedire l'upgrade automatico del pool di nodi da parte di GKE 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 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:

  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.

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