Esegui la manutenzione dell'host per i nodi che eseguono workload di addestramento e inferenza

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 alcuni tipi di istanze Compute Engine che non eseguono la migrazione live, incluse le istanze con GPU e TPU. Le strategie descritte in questo documento funzionano bene per l'addestramento e i carichi di lavoro di inferenza. Se devi eseguire manualmente la manutenzione dell'host per un singolo nodo o se i tuoi workload possono tollerare la manutenzione automatica dell'host, consulta Informazioni su come eseguire la manutenzione dell'host su GKE.

Queste strategie eseguono la manutenzione dell'host per gruppi di nodi e, facoltativamente, avviano gli upgrade del cluster GKE.

Utilizza la strategia parallela per i nodi dei carichi di lavoro in cui puoi avere un singolo periodo di inattività, ad esempio per i nodi dei carichi di lavoro di addestramento. Utilizza la strategia di aggiornamento in sequenza per i nodi dei carichi di lavoro in cui puoi avere batch di tempi di inattività mantenendo la disponibilità della maggior parte delle risorse, ad esempio per i nodi dei carichi di lavoro 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 carichi di lavoro di addestramento. In alternativa, puoi utilizzarlo per altri tipi di workload in cui il metodo meno distruttivo per apportare modifiche consiste nell'avere un'unica finestra di inattività completa per tutti i nodi del gruppo e i workload in esecuzione.

La strategia segue questi passaggi di alto livello:

  1. Interrompi i workload: seleziona i node pool e interrompi i workload in esecuzione o sposta i workload su altri nodi che rimangono disponibili.
  2. Attiva manutenzione host: applica l'etichetta di manutenzione a tutti i nodi selezionati contemporaneamente e attendi il completamento del processo su tutti i nodi.
  3. Esegui l'upgrade della versione GKE: modifica la versione GKE dei nodi.
  4. Riavvia i carichi di lavoro: al termine di tutta la manutenzione e gli upgrade dell'host, riavvia i carichi di lavoro.

Le istruzioni fornite eseguono modifiche per 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 a disposizione almeno qualche ora 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 di 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 GKE. Tuttavia, puoi eseguire solo la manutenzione dell'host se non vuoi eseguire l'upgrade della versione dei nodi GKE.

Considerazioni preliminari

Esamina le seguenti considerazioni prima di iniziare:

  • Evita di eseguire nuovamente il deployment dei workload: per evitare ritardi non necessari dovuti ai PodDisruptionBudgets, non eseguire nuovamente il deployment di alcun workload finché non avrai completato tutti i passaggi.
  • Pianifica l'interruzione: assicurati che i tuoi carichi di lavoro 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:

  1. Prepara i workload: arresta i workload o assicurati che sia stato creato un checkpoint o uno snapshot recente.
  2. Avvia e monitora la manutenzione dell'host:

    • Blocchi secondari delle prenotazioni che utilizzano la pianificazione della manutenzione raggruppata: attiva la manutenzione per prenotazioni, blocchi di prenotazioni o blocchi secondari di prenotazioni utilizzando il gcloud compute reservations sottocomando corrispondente. Ad esempio, il seguente comando avvia la manutenzione per un sottoblocco:

      gcloud compute reservations sub-blocks perform-maintenance RESERVATION_NAME \
          --block-name=BLOCK_NAME \
          --sub-block-name=SUB_BLOCK_NAME \
          --zone=ZONE
      

      Sostituisci quanto segue:

      • RESERVATION_NAME: il nome della prenotazione.
      • BLOCK_NAME: il nome del blocco di prenotazione.
      • SUB_BLOCK_NAME: il nome del sottoblocco della prenotazione.
      • ZONE: la zona in cui esiste la prenotazione.

      Compute Engine inizia a svuotare e aggiornare contemporaneamente tutte le istanze nel sottoblocco. Questa procedura potrebbe richiedere alcune ore.

      Per monitorare, visualizza lo stato della manutenzione controllando il campo dei metadati upcomingGroupMaintenance nelle risorse di prenotazione. Per saperne di più, consulta Visualizzare lo stato di manutenzione.

    • Istanze che utilizzano la pianificazione della manutenzione indipendente: attiva la manutenzione per le istanze on demand o per le prenotazioni che non utilizzano i blocchi secondari applicando l'etichetta cloud.google.com/perform-maintenance=true ai nodi nel tuo pool di nodi:

      kubectl label nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME cloud.google.com/perform-maintenance=true --overwrite
      

      Compute Engine inizia a svuotare e aggiornare contemporaneamente le istanze sottostanti. Questa procedura potrebbe richiedere alcune ore. Per ulteriori informazioni, consulta Procedura di interruzione controllata.

      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.
      
  3. (Facoltativo) Esegui l'upgrade della versione dei nodi GKE: segui le istruzioni per eseguire l'upgrade della versione GKE dei nodi.

Utilizza una strategia di aggiornamento in sequenza per aggiornare i nodi dei workload di inferenza

Questa strategia delinea un approccio manuale per eseguire la manutenzione dei nodi GKE che eseguono carichi di lavoro di inferenza. Consiste nell'aggiornamento dei nodi in batch per mantenere la disponibilità del servizio. Questo metodo è più adatto per i carichi di lavoro che possono tollerare una certa percentuale di repliche temporaneamente offline.

La strategia segue questi passaggi di alto livello:

  1. Identifica e raggruppa i nodi: scegli i pool di nodi da aggiornare. Raggruppa i nodi in batch dimensionati in base alla tolleranza agli errori del workload.
  2. Itera i batch: per ogni batch, applica l'etichetta di manutenzione e monitora il batch di nodi finché l'etichetta non viene rimossa.
  3. Esegui l'upgrade della versione GKE: dopo che tutti i batch hanno completato la manutenzione dell'host, modifica la versione dei nodi GKE.

Considerazioni preliminari

Esamina le seguenti considerazioni prima di iniziare:

  • Comprendi la tua implementazione: il successo richiede una conoscenza dettagliata di distribuzione del workload, posizionamento delle repliche e domini di errore. Assicurati di mantenere una capacità di servizio sufficiente durante l'intero processo.
  • Pianifica le dimensioni dei batch: aggiorna i nodi in batch. Le dimensioni di ogni batch sono determinate dalla tolleranza agli errori del carico di lavoro. I fattori da considerare includono quanto segue:
    • Il numero di repliche per modello di servizio.
    • La distribuzione delle repliche tra nodi e domini in errore.
    • I PodDisruptionBudgets possono contribuire a imporre il numero massimo di pod che non sono attivi contemporaneamente.
    • Consiglio: per semplificare la gestione, valuta la possibilità di dedicare diversi node pool a diversi set di repliche, in modo da isolare i domini di errore a livello di pool di nodi.
  • Calcola i vincoli di tempo: considera i seguenti fattori di tempistica:
    • Il completamento del passaggio di manutenzione dell'host può richiedere diverse ore per ogni batch.
    • Calcola le dimensioni minime del batch per assicurarti che tutta la manutenzione termini entro le scadenze richieste:
      1. MAINTENANCE_BLOCKS = floor(HOURS_TO_MAINTENANCE / 4) (dove HOURS_TO_MAINTENANCE è il tempo totale disponibile).
      2. MIN_PER_BATCH = TOTAL_NODE_COUNT / MAINTENANCE_BLOCKS
    • La dimensione batch scelta deve essere maggiore o uguale a MIN_PER_BATCH.
  • Rivedi tipi di workload specifici: considera quanto segue per i rispettivi tipi di configurazione:
    • Mixture of Experts (MOE): assicurati che la strategia di batch mantenga il numero minimo richiesto di repliche per ogni modello.
    • Pubblicazione disaggregata: assicurati di monitorare tutte le repliche coinvolte nella configurazione disaggregata durante la pianificazione dei batch.
    • Node pool multi-host (TPU, MNNVL): per queste configurazioni, è probabile che venga rimosso un interopool di nodil alla volta. Pianifica i tuoi domini di errore in più pool di nodi di conseguenza.

Esecuzione di aggiornamenti in sequenza in batch

Per eseguire aggiornamenti di manutenzione 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 set specifici di nodi nel cluster per nome con la pianificazione della manutenzione indipendente.

Scegli la strategia appropriata per le tue risorse:

Aggiorna le prenotazioni in batch di sottoblocchi

Per eseguire la manutenzione degli host in sequenza per le prenotazioni di capacità in batch di sottoblocchi, completa i seguenti passaggi:

  1. Identifica le prenotazioni per la manutenzione: Identifica il nome della prenotazione di capacità e i blocchi di prenotazione o i blocchi secondari di prenotazione utilizzati dal cluster GKE. Per farlo, esegui una ricerca utilizzando le etichette dei nodi GKE e il comando gcloud compute reservations:

    1. Elenca il nome della prenotazione e gli ID della topologia di blocco e sottoblocco fisici dai nodi nelpool di nodil:

      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_NAME con 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 sotto-blocco (ad esempio, e7b91f4a3c2d58069e1a4b7f3d2c8056).

    2. Per identificare il nome della risorsa del blocco di prenotazione, esegui una query sull'elenco dei blocchi di prenotazione Compute Engine utilizzando il nome della prenotazione e filtra per 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 del nodo.

      Registra il nome del blocco dall'output.

    3. Per identificare il nome della risorsa del sottoblocco di prenotazione, esegui una query sull'elenco dei sottoblocchi di prenotazione utilizzando il nome della prenotazione e del blocco e filtra per ID sottoblocco:

      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 blocco secondario recuperato dalle etichette del nodo.

      L'output mostra i dettagli del sottoblocco di prenotazione corrispondente, incluso il nome della risorsa.

  2. Dividi le prenotazioni in batch: dividi i sottoblocchi di prenotazione della capacità identificati in batch uguali. Determina la dimensione del batch utilizzando la formula descritta nell'elemento di elenco Calcola i vincoli di tempo nella sezione precedente Considerazioni preliminari. Ogni batch corrisponde a uno o più sottoblocchi di prenotazione e ogni batch deve avere almeno le dimensioni di un sottoblocco.

  3. Esegui la manutenzione dell'host: Per ogni batch, completa i seguenti passaggi:

    1. Seleziona un batch di sottoblocchi 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=ZONE
      

      Sostituisci quanto segue:

      • RESERVATION_NAME: il nome della prenotazione.
      • BLOCK_NAME: il nome del blocco di prenotazione.
      • SUB_BLOCK_NAME: il nome del sottoblocco della prenotazione.
      • ZONE: la zona in cui esiste la prenotazione.

      Compute Engine inizia a svuotare e aggiornare contemporaneamente tutte le istanze nel sottoblocco. Questa procedura potrebbe richiedere alcune ore.

    2. Monitora lo stato della manutenzione visualizzando lo stato della manutenzione controllando il campo dei metadati upcomingGroupMaintenance nelle risorse di prenotazione. Per saperne di più, consulta Visualizzare lo stato di manutenzione della prenotazione.

    3. Ripeti i passaggi precedenti per ogni batch rimanente finché non avrai completato la manutenzione dell'host per tutti i batch.

  4. (Facoltativo) Esegui l'upgrade della versione dei nodi GKE: esegui questo passaggio solo dopo che la manutenzione dell'host è stata completata per tutti i sottoblocchi di prenotazione, per evitare scenari in cui i nodi GKE vengono implementati su host per i quali la manutenzione non è ancora terminata. Segui le istruzioni per eseguire l'upgrade della versione GKE dei nodi.

Aggiornare i nodi in batch

Per eseguire la manutenzione host in sequenza per le istanze on demand o le prenotazioni che non supportano i sottoblocchi in batch, completa i seguenti passaggi:

  1. Identifica i nodi per la manutenzione: identifica tutti i nodi su 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 nel 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_NAME con il nome del pool di nodi.

    • Ottieni tutti i nodi con un'etichetta specifica:

      kubectl get nodes -l LABEL -o jsonpath='{.items[*].metadata.name}'
      

      Sostituisci LABEL con l'etichetta del nodo.

  2. Dividi i nodi in batch: Dividi i nodi identificati in batch uguali. Determina la dimensione del batch utilizzando la formula descritta nell'elemento di elenco Calcola i vincoli di tempo nella sezione precedente Considerazioni preliminari.

  3. Esegui la manutenzione dell'host: Per ogni batch, completa i seguenti passaggi:

    1. Seleziona un batch di nodi e attiva la manutenzione a livello di istanza utilizzando l'API instances applicando l'etichetta di manutenzione:

      kubectl label nodes LIST_OF_NODES_IN_BATCH cloud.google.com/perform-maintenance=true --overwrite
      

      Sostituisci LIST_OF_NODES_IN_BATCH con un elenco separato da spazi dei nodi del batch. Ad esempio, node-1 node-2 node-3.

      Compute Engine inizia a svuotare e aggiornare contemporaneamente le istanze sottostanti. Questa procedura potrebbe richiedere alcune ore. Per ulteriori informazioni, consulta Procedura di interruzione controllata.

    2. Monitorare 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.
      
    3. Ripeti i passaggi precedenti per ogni batch rimanente finché non avrai completato la manutenzione dell'host per tutti i batch.

  4. (Facoltativo) Esegui l'upgrade della versione dei nodi GKE: esegui questo passaggio solo dopo che la manutenzione dell'host è stata completata per tutti i nodi, per evitare scenari in cui i nodi GKE vengono implementati su host per i quali la manutenzione non è ancora terminata. 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 ciascuno 100 o meno nodi per zona, utilizza gli upgrade di sovraccarico. Se i tuoi pool di nodi hanno più di 100 nodi per zona, elimina e ricrea i pool di nodi.
  • Strategia di implementazione graduale: se i tuoi batch hanno 100 nodi per zona, per node pool o meno, utilizza gli upgrade di sovraccarico. Se i batch hanno più di 100 nodi per zona per pool di nodi, elimina e ricrea i nodi.

Utilizzare gli upgrade di sovraccarico

  1. Configura gli upgrade a ondate, utilizzando l'impostazione maxUnavailable per determinare quanti nodi possono non essere 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 campo maxUnavailable su 18.

    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 Upgrade in un ambiente con risorse limitate.

  2. Esegui l'upgrade del pool di nodi eseguendo il seguente comando. Se vuoi eseguire l'upgrade di più pool di nodi, 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 \
        --quiet
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del tuo cluster.
    • NODE_POOL_NAME: il nome del pool di nodi.
    • VERSION: una destinazione di upgrade automatico consigliata per il pool di nodi. Per saperne di più, consulta Ottenere 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 degli aggiornamenti delle versioni nelle note di rilascio di GKE.
    • CONTROL_PLANE_LOCATION: la posizione del control plane del cluster.

Elimina e ricrea i nodi

Elimina il pool di nodi e ricrealo utilizzando la versione successiva:

  1. Elimina il pool di nodi:

    gcloud container node-pools delete NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location CONTROL_PLANE_LOCATION
    
  2. Ricrea il pool di nodi passando la nuova versione utilizzando il flag --cluster-version. Passa la destinazione di upgrade automatico consigliata per ilpool di nodil. Per saperne di più, consulta Ottenere informazioni sugli upgrade per i pool di nodi dei cluster Standard. Se il cluster non ha una destinazione di upgrade automatico consigliata, controlla le ultime voci degli aggiornamenti delle versioni nelle note di rilascio di GKE.