Questo documento spiega come eseguire la manutenzione dell'host delle istanze Compute Engine sottostanti per i nodi nei cluster Google Kubernetes Engine (GKE). Devi gestire attivamente questa manutenzione solo per determinati tipi di istanze di Compute Engine che non eseguono la migrazione live, incluse le istanze con GPU e TPU. Le strategie descritte in questo documento funzionano bene per i workload di addestramento e inferenza. Se devi eseguire manualmente la manutenzione dell'host solo per un singolo nodo o se i tuoi workload possono tollerare la manutenzione automatica dell'host, consulta Scopri come eseguire la manutenzione dell'host su GKE.
Queste strategie eseguono la manutenzione dell'host per i gruppi di nodi e, facoltativamente, avviano gli upgrade dei cluster GKE.
Utilizza la strategia parallela per i nodi dei workload in cui puoi avere un singolo periodo di inattività, ad esempio per i nodi dei workload di addestramento. Utilizza la strategia di aggiornamento in sequenza per i nodi dei workload in cui puoi avere batch di tempi di inattività mantenendo la disponibilità della maggior parte delle risorse, ad esempio per i nodi dei workload di inferenza.
Utilizza una strategia parallela per aggiornare i nodi dei workload di addestramento
Questa strategia esegue le modifiche contemporaneamente per un gruppo di nodi che utilizzano acceleratori. Puoi utilizzare questa strategia per i workload di addestramento. In alternativa, puoi utilizzarla per altri tipi di workload in cui il metodo meno invasivo per eseguire le modifiche consiste nell'avere un unico periodo di inattività completo per tutti i nodi del gruppo e i workload eseguiti su di essi.
La strategia segue questi passaggi di alto livello:
- Interrompi i workload: seleziona i node pool e interrompi i workload in esecuzione su di essi o spostali su altri nodi che rimangono disponibili.
- Attiva la manutenzione dell'host: applica l'etichetta di manutenzione a tutti i nodi selezionati contemporaneamente e attendi il completamento del processo su tutti i nodi.
- Esegui l'upgrade della versione di GKE: modifica la versione di GKE dei nodi.
- Riavvia i workload: al termine di tutte le operazioni di manutenzione e upgrade dell'host, riavvia i workload.
Le istruzioni fornite apportano modifiche a un singolo pool di nodi. Tuttavia, puoi adattare i passaggi per apportare modifiche a più pool di nodi contemporaneamente. Prima di iniziare questi passaggi, assicurati di avere almeno alcune ore in cui questo workload non deve essere eseguito su questi nodi.
Per ridurre al minimo le interruzioni durante la ricezione di modifiche critiche sia per le istanze Compute Engine sottostanti sia per i nodi GKE, utilizza questo periodo di inattività per eseguire sia la manutenzione dell'host sia gli upgrade della versione di GKE. Tuttavia, puoi eseguire solo la manutenzione dell'host se non vuoi eseguire l'upgrade della versione dei nodi GKE.
Considerazioni preliminari
Prima di iniziare, esamina le seguenti considerazioni:
- Evita di rifare il deployment dei workload: per evitare ritardi non necessari dovuti ai PodDisruptionBudgets, non rifare il deployment dei workload finché non hai completato tutti i passaggi.
- Pianifica le interruzioni: assicurati che i tuoi workload possano essere interrotti per un periodo di tempo. Il completamento di questi passaggi richiede diverse ore, principalmente a causa del tempo necessario per la manutenzione dell'host.
Esegui gli aggiornamenti per tutti i nodi contemporaneamente
Per eseguire la manutenzione dell'host e, facoltativamente, gli upgrade della versione di GKE, completa i seguenti passaggi:
- Prepara i workload: interrompi i workload o assicurati che abbiano acquisito uno snapshot o un checkpoint recente.
Avvia e monitora la manutenzione dell'host:
Blocchi secondari di prenotazioni che utilizzano la pianificazione della manutenzione raggruppata: attiva la manutenzione tra prenotazioni, blocchi di prenotazioni o blocchi secondari di prenotazioni utilizzando il sottocomando
gcloud compute reservationscorrispondente. Ad esempio, il seguente comando avvia la manutenzione per un blocco secondario:gcloud compute reservations sub-blocks perform-maintenance RESERVATION_NAME \ --block-name=BLOCK_NAME \ --sub-block-name=SUB_BLOCK_NAME \ --zone=ZONESostituisci quanto segue:
RESERVATION_NAME: il nome della prenotazione.BLOCK_NAME: il nome del blocco di prenotazione.SUB_BLOCK_NAME: il nome del blocco secondario della prenotazione.ZONE: la zona in cui esiste la prenotazione.
Compute Engine inizia a svuotare e aggiornare contemporaneamente tutte le istanze nel blocco secondario. Questo processo potrebbe richiedere alcune ore.
Per monitorare, visualizza lo stato della manutenzione controllando il campo dei metadati
upcomingGroupMaintenancenelle risorse della prenotazione. Per saperne di più, consulta Visualizza lo stato della manutenzione.Istanze che utilizzano la pianificazione della manutenzione indipendente: attiva la manutenzione per le istanze on demand o per le prenotazioni che non utilizzano blocchi secondari applicando l'etichetta
cloud.google.com/perform-maintenance=trueai nodi nel pool di nodi:kubectl label nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME cloud.google.com/perform-maintenance=true --overwriteCompute Engine inizia a svuotare e aggiornare contemporaneamente le istanze sottostanti. Questo processo potrebbe richiedere alcune ore. Per saperne di più, consulta Processo di terminazione normale.
Per monitorare lo stato della manutenzione, controlla i nodi. GKE rimuove l'etichetta di manutenzione al termine della manutenzione, se è stata applicata. Al termine della manutenzione, puoi trovare un log con il seguente messaggio in Cloud Logging:
Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed.
(Facoltativo) Esegui l'upgrade della versione dei nodi GKE: segui le istruzioni per eseguire l'upgrade della versione GKE dei nodi.
Utilizza una strategia in sequenza per aggiornare i nodi dei workload di inferenza
Questa strategia delinea un approccio manuale per eseguire la manutenzione sui nodi GKE che eseguono workload di inferenza. Questo processo prevede l'aggiornamento dei nodi in batch per mantenere la disponibilità del servizio. Questo metodo è più adatto per i workload che possono tollerare una determinata percentuale di repliche temporaneamente offline.
La strategia segue questi passaggi di alto livello:
- Identifica e raggruppa i nodi: scegli i node pool da aggiornare. Raggruppa i nodi in batch di dimensioni adeguate alla tolleranza ai guasti del tuo workload.
- Esegui l'iterazione dei batch: per ogni batch, applica l'etichetta di manutenzione e monitora il batch di nodi finché l'etichetta non viene rimossa.
- Esegui l'upgrade della versione di GKE: dopo che tutti i batch hanno completato la manutenzione dell'host, modifica la versione dei nodi GKE.
Considerazioni preliminari
Prima di iniziare, esamina le seguenti considerazioni:
- Comprendi il tuo deployment: il successo richiede una conoscenza dettagliata della distribuzione del workload, del posizionamento delle repliche e dei domini in errore. Assicurati di mantenere una capacità di gestione sufficiente durante tutto il processo.
- Pianifica le dimensioni dei batch: aggiorna i nodi in batch. La dimensione di ogni batch è determinata dalla tolleranza di errore del workload. I fattori da considerare includono:
- Il numero di repliche per modello di distribuzione.
- La distribuzione delle repliche tra nodi e domini in errore.
- I PodDisruptionBudgets possono aiutare ad applicare il numero massimo di pod non attivi contemporaneamente.
- Suggerimento: per semplificare la gestione, valuta la possibilità di dedicare pool di nodi diversi a set di repliche diversi, in modo da isolare i domini in errore a livello di pool di nodi.
- Calcola i vincoli di tempo: considera i seguenti fattori relativi alle tempistiche:
- Il completamento del passaggio di manutenzione dell'host per ogni batch può richiedere diverse ore.
- Calcola la dimensione minima del batch per assicurarti che tutte le operazioni di manutenzione vengano completate entro le scadenze richieste:
MAINTENANCE_BLOCKS = floor(HOURS_TO_MAINTENANCE / 4)(doveHOURS_TO_MAINTENANCEè il tempo totale disponibile).MIN_PER_BATCH = TOTAL_NODE_COUNT / MAINTENANCE_BLOCKS
- La dimensione del batch scelta deve essere maggiore o uguale a
MIN_PER_BATCH.
- Esamina tipi di workload specifici: considera quanto segue per i rispettivi tipi di configurazione:
- Mixture of Experts (MoE): assicurati che la strategia di raggruppamento mantenga il numero minimo di repliche richiesto per ogni modello.
- Disaggregated serving: assicurati di monitorare tutte le repliche coinvolte nella configurazione disaggregata quando pianifichi i batch.
- Node pool multi-host (TPU, MNNVL): per queste configurazioni, è probabile che tu debba disattivare un intero pool di nodi alla volta. Pianifica i domini in errore su più pool di nodi di conseguenza.
Esegui aggiornamenti in sequenza in batch
Per eseguire aggiornamenti di manutenzione dell'host in sequenza, puoi aggiornare la capacità dalle prenotazioni che utilizzano la pianificazione della manutenzione raggruppata in batch di uno o più blocchi secondari oppure puoi aggiornare insiemi specifici di nodi nel cluster in base al nome con la pianificazione della manutenzione indipendente.
Scegli la strategia appropriata per le tue risorse:
Aggiorna le prenotazioni in batch di blocchi secondari
Per eseguire la manutenzione dell'host in sequenza per le prenotazioni di capacità in batch di blocchi secondari, completa i seguenti passaggi:
Identifica le prenotazioni per la manutenzione: identifica il nome della prenotazione della capacità e i blocchi o i sottoblocchi di prenotazione utilizzati dal cluster GKE. Per farlo, esegui una ricerca utilizzando le etichette dei nodi GKE e il comando
gcloud compute reservations:Elenca il nome della prenotazione e gli ID della topologia del blocco fisico e del sottoblocco dei nodi nel pool di nodi:
kubectl get nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME \ -o custom-columns='NAME:.metadata.name,RESERVATION:.metadata.labels.cloud\.google\.com/reservation-name,BLOCK_ID:.metadata.labels.cloud\.google\.com/gce-topology-block,SUBBLOCK_ID:.metadata.labels.cloud\.google\.com/gce-topology-subblock'Sostituisci
NODE_POOL_NAMEcon il nome del pool di nodi.Prendi nota dei valori di output: il nome della prenotazione (ad esempio,
nvidia-gb300-m7kp2xq9vd4j1), l'ID blocco (ad esempio,3f2a8c9b1d4e0756f8a2b3c1d9e4f0a5) e l'ID blocco secondario (ad esempio,e7b91f4a3c2d58069e1a4b7f3d2c8056).Per identificare il nome della risorsa del blocco di prenotazione, esegui una query sull'elenco dei blocchi di prenotazione di Compute Engine utilizzando il nome della prenotazione e filtrando in base all'ID blocco:
gcloud compute reservations blocks list RESERVATION_NAME \ --zone=ZONE \ --project=PROJECT_ID \ --filter="physicalTopology.block=BLOCK_ID"Sostituisci quanto segue:
RESERVATION_NAME: il nome della prenotazione.ZONE: la zona in cui esiste la prenotazione.PROJECT_ID: l'ID progetto in cui esiste la prenotazione.BLOCK_ID: l'ID blocco recuperato dalle etichette dei nodi.
Annota il nome del blocco dall'output.
Per identificare il nome della risorsa del blocco secondario di prenotazione, esegui una query sull'elenco dei blocchi secondari di prenotazione utilizzando il nome della prenotazione e il nome del blocco e filtra in base all'ID del blocco secondario:
gcloud compute reservations sub-blocks list RESERVATION_NAME \ --block-name=BLOCK_NAME \ --zone=ZONE \ --project=PROJECT_ID \ --filter="physicalTopology.subBlock=SUBBLOCK_ID"Sostituisci quanto segue:
RESERVATION_NAME: il nome della prenotazione.BLOCK_NAME: il nome della risorsa del blocco di prenotazione.ZONE: la zona in cui esiste la prenotazione.PROJECT_ID: l'ID progetto in cui esiste la prenotazione.SUBBLOCK_ID: l'ID del blocco secondario recuperato dalle etichette dei nodi.
L'output mostra i dettagli del blocco secondario di prenotazione corrispondente, incluso il nome della risorsa.
Dividi le prenotazioni in batch: suddividi i blocchi secondari di prenotazione della capacità identificati in batch uguali. Determina le dimensioni del batch utilizzando la formula descritta nella voce dell'elenco Calcola i vincoli di tempo nella sezione precedente Considerazioni prima di iniziare. Ogni batch corrisponde a uno o più blocchi secondari di prenotazione e ogni batch deve avere almeno le dimensioni di un blocco secondario.
Esegui la manutenzione dell'host: per ogni batch, completa i seguenti passaggi:
Seleziona un gruppo di blocchi secondari di prenotazione e attiva la manutenzione dell'host. Puoi attivare la manutenzione per le prenotazioni, i blocchi di prenotazione o i blocchi secondari di prenotazione. Per i tipi di macchine come A4X, A4X Max, TPU v6e e TPU7x, devi attivare la manutenzione in questo modo. La manutenzione viene eseguita su gruppi di blocchi secondari. Utilizza il comando
gcloud compute reservations sub-blocks perform-maintenance:gcloud compute reservations sub-blocks perform-maintenance RESERVATION_NAME \ --block-name=BLOCK_NAME \ --sub-block-name=SUB_BLOCK_NAME \ --zone=ZONESostituisci quanto segue:
RESERVATION_NAME: il nome della prenotazione.BLOCK_NAME: il nome del blocco di prenotazione.SUB_BLOCK_NAME: il nome del blocco secondario della prenotazione.ZONE: la zona in cui esiste la prenotazione.
Compute Engine inizia a svuotare e aggiornare contemporaneamente tutte le istanze nel blocco secondario. Questo processo potrebbe richiedere alcune ore.
Monitora lo stato della manutenzione visualizzando lo stato della manutenzione controllando il campo dei metadati
upcomingGroupMaintenancenelle risorse della prenotazione. Per saperne di più, consulta Visualizza lo stato di manutenzione della prenotazione.Ripeti i passaggi precedenti per ogni batch rimanente fino a completare la manutenzione dell'host per tutti i batch.
(Facoltativo) Esegui l'upgrade della versione dei nodi GKE: esegui questo passaggio solo dopo aver completato la manutenzione dell'host per tutti i blocchi secondari della prenotazione, per evitare scenari in cui i nodi GKE vengono distribuiti su host per i quali la manutenzione non è ancora stata completata. Segui le istruzioni per eseguire l'upgrade della versione GKE dei nodi.
Aggiorna i nodi in batch
Per eseguire la manutenzione dell'host in sequenza per le istanze on demand o le prenotazioni che non supportano i blocchi secondari in batch, completa i seguenti passaggi:
Identifica i nodi per la manutenzione: identifica tutti i nodi in cui vuoi eseguire la manutenzione e salva questo elenco. Per identificare i nodi, utilizza uno dei seguenti metodi o selezionali manualmente:
Recupera tutti i nodi del cluster che utilizzano acceleratori (TPU o GPU):
kubectl get nodes -o json | jq -r '.items[] | select(.spec.taints[]? | select(.key=="nvidia.com/gpu" or .key=="google.com/tpu")) | .metadata.name'Recupera tutti i nodi in un pool di nodi specifico:
kubectl get nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME --no-headers -o custom-columns=":metadata.name"Sostituisci
NODE_POOL_NAMEcon il nome del pool di nodi.Recupera tutti i nodi con un'etichetta specifica:
kubectl get nodes -l LABEL -o jsonpath='{.items[*].metadata.name}'Sostituisci
LABELcon l'etichetta del nodo.
Suddividi i nodi in gruppi: suddividi i nodi identificati in gruppi uguali. Determina le dimensioni del batch utilizzando la formula descritta nella voce dell'elenco Calcola i vincoli di tempo nella sezione precedente Considerazioni prima di iniziare.
Esegui la manutenzione dell'host: per ogni batch, completa i seguenti passaggi:
Seleziona un gruppo di nodi e attiva la manutenzione a livello di istanza utilizzando l'API
instancesapplicando l'etichetta di manutenzione:kubectl label nodes LIST_OF_NODES_IN_BATCH cloud.google.com/perform-maintenance=true --overwriteSostituisci
LIST_OF_NODES_IN_BATCHcon un elenco di nodi del batch separati da spazi. Ad esempio,node-1 node-2 node-3.Compute Engine inizia a svuotare e aggiornare contemporaneamente le istanze sottostanti. Questo processo potrebbe richiedere alcune ore. Per saperne di più, consulta Processo di terminazione normale.
Monitora lo stato della manutenzione dell'host. GKE rimuove l'etichetta di manutenzione al termine della manutenzione, se è stata applicata. Al termine della manutenzione, puoi trovare un log con il seguente messaggio in Logging:
Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed.Ripeti i passaggi precedenti per ogni batch rimanente fino a completare la manutenzione dell'host per tutti i batch.
(Facoltativo) Esegui l'upgrade della versione dei nodi GKE: esegui questo passaggio solo dopo aver completato la manutenzione dell'host per tutti i nodi, per evitare scenari in cui i nodi GKE vengono distribuiti su host per i quali la manutenzione non è ancora stata completata. Segui le istruzioni per eseguire l'upgrade della versione GKE dei nodi.
Esegui l'upgrade della versione GKE dei nodi
Considera il numero di nodi di cui vuoi eseguire l'upgrade contemporaneamente. Con la strategia parallela, hai eseguito la manutenzione dell'host per l'intero pool di nodi o per più pool di nodi contemporaneamente. Con la strategia di aggiornamento graduale, hai eseguito la manutenzione dell'host in batch. Determina il metodo di upgrade da utilizzare in base alle dimensioni dei gruppi di nodi:
- Strategia parallela: se i tuoi node pool hanno 100 o meno nodi per zona, utilizza gli upgrade di sovraccarico. Se i tuoi node pool hanno più di 100 nodi per zona, eliminali e ricreali.
- Strategia in sequenza: se i tuoi batch hanno 100 nodi per zona, per node pool o meno, utilizza gli upgrade di sovraccarico. Se i tuoi batch hanno più di 100 nodi per zona, per pool di nodi, elimina e ricrea i nodi.
Utilizza gli upgrade di sovraccarico
Configura gli upgrade surge, utilizzando l'impostazione
maxUnavailableper determinare quanti nodi possono essere non disponibili contemporaneamente, per zona, in un pool di nodi. Ad esempio, se hai 18 nodi in una zona in un pool di nodi, imposta il valore del campomaxUnavailablesu18.Questa impostazione funziona meglio quando utilizzi la capacità di una prenotazione in cui non hai capacità in eccesso. Per saperne di più sul motivo per cui utilizzare questa impostazione, consulta Esegui l'upgrade in un ambiente con risorse limitate.
Esegui l'upgrade del pool di nodi eseguendo questo comando. Se vuoi eseguire l'upgrade di più node pool, esegui questo comando per ogni pool di nodi:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool NODE_POOL_NAME \ --cluster-version VERSION \ --location CONTROL_PLANE_LOCATION \ --quietSostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.NODE_POOL_NAME: il nome del pool di nodi.VERSION: un target di upgrade automatico consigliato per il pool di nodi. Per saperne di più, consulta Ottieni informazioni sugli upgrade per i pool di nodi dei cluster Standard. Se il tuo cluster non ha un target di upgrade automatico consigliato, controlla le ultime voci di Aggiornamenti della versione nelle note di rilascio di GKE.CONTROL_PLANE_LOCATION: la località del control plane del tuo cluster.
Elimina e ricrea i nodi
Elimina il pool di nodi e ricrealo utilizzando la versione successiva:
Elimina il pool di nodi:
gcloud container node-pools delete NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location CONTROL_PLANE_LOCATIONRicrea il pool di nodi, passando la nuova versione tramite il flag
--cluster-version. Passa il target di upgrade automatico consigliato per il pool di nodi. Per saperne di più, consulta Ottieni informazioni sugli upgrade per i pool di nodi dei cluster Standard. Se il tuo cluster non ha un target di upgrade automatico consigliato, controlla le ultime voci di Aggiornamenti della versione nelle note di rilascio di GKE.