Durante il ciclo di vita di un cluster GKE a lunga esecuzione, si verificano interruzioni periodiche dei carichi di lavoro a causa di interruzioni dell'infrastruttura cheGoogle Cloud problemi. Questi eventi automatici possono verificarsi per rispondere a decisioni di pianificazione (eventi di preemption), aggiornamenti del control plane o dei nodi, che includono upgrade automatici dei nodi GKE (eventi di manutenzione) o correzione di problemi rilevati (eventi di terminazione).
Questa pagina ti aiuta a capire cosa significa interruzione dei nodi in GKE, a monitorare le notifiche di manutenzione e a ridurre al minimo l'impatto dell'interruzione nei nodi GKE con GPU e TPU collegate.
Questo documento è rivolto agli amministratori e agli operatori della piattaforma che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. 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
Che cosa significa interruzione dell'infrastruttura in GKE?
I tuoi cluster GKE gestiscono il ciclo di vita dei nodi GKE. Il provisioning di questi nodi viene eseguito su VM di Compute Engine, che periodicamente subiscono le seguenti interruzioni:
Correzione dei problemi rilevati (
TerminationEvent
): questi eventi si verificano perché Google Cloud rileva un problema e interrompe l'infrastruttura del cluster. Gli eventiTerminationEvent
non supportano l'arresto normale. Gli eventiTerminationEvent
vengono attivati dai seguenti problemi:- La riparazione automatica si verifica quando GKE ripara un nodo dopo ripetuti controlli di integrità non riusciti.
- HostError si verifica quando un errore hardware o software sulla macchina fisica causa l'arresto della VM.
Eventi di manutenzione o upgrade (
MaintenanceEvent
): questi eventi si verificano quando Google Cloud deve interrompere una VM per eseguire la manutenzione. Gli eventiMaintenanceEvent
vengono attivati dalle seguenti attività di manutenzione:- Gli eventi di manutenzione si verificano quando Google Cloud esegue l'upgrade dell'host sottostante.
- Gli aggiornamenti dei nodi, che includono gli upgrade automatici dei nodi, si verificano quando GKE aggiorna la versione di Kubernetes in esecuzione sul nodo.
Per saperne di più su come tu e GKE gestite le modifiche durante il ciclo di vita di un cluster, consulta Tipi di modifiche.
Risposta alle decisioni di pianificazione (
PreemptionEvent
): si verificano quando Google Cloud deve eseguire il preempt delle VM per rendere disponibile la capacità per le risorse con priorità più elevata. Gli eventiPreemptionEvent
possono essere:- Eviction:si verifica quando l'infrastruttura preemptible o Spot viene prerilasciata per ospitare una VM con priorità più alta.
- Defragmentazione:si verifica quando GKE prerilascia una sezione TPU più piccola per ospitare una sezione TPU più grande. La deframmentazione si verifica solo sulle sezioni TPU.
Durante il ciclo di vita di un cluster GKE a esecuzione prolungata, i nodi potrebbero subire interruzioni periodiche dei carichi di lavoro di addestramento o di pubblicazione. Quando questi disservizi interessano i nodi GKE che eseguono workload AI/ML, GKE deve riavviare sia i workload in esecuzione sia il nodo sottostante.
Perché GPU e TPU richiedono la gestione delle interruzioni
La maggior parte delle VM di Compute Engine, con alcune eccezioni, ha il criterio di manutenzione host impostato su migrazione live, il che significa che i carichi di lavoro in esecuzione in genere subiscono interruzioni minime o nulle. Tuttavia, alcune classi di VM non supportano la migrazione live, incluse le VM con GPU e TPU collegate. Quando si verifica un evento host nella VM all'interno di uno slice TPU, l'intero slice viene interrotto e poi riprogrammato perché tutti gli eventi di manutenzione sono coordinati a livello di slice. Pertanto, se crei uno slice TPU con centinaia di VM, tutte riceveranno lo stesso programma di eventi di manutenzione.
Quando si verifica un evento host, GKE termina il nodo e i relativi pod. Se i pod vengono sottoposti a deployment nell'ambito di un workload più grande, come un Job o un Deployment, GKE riavvia i pod sul nodo interessato.
Spetta a te o ai framework che utilizzi gestire la configurazione del workload per reagire in modo appropriato agli eventi di manutenzione. Ad esempio, puoi salvare lo stato del job di addestramento dell'AI per ridurre la perdita di dati.
Per gestire le interruzioni sui carichi di lavoro AI/ML, puoi:
- Monitorare le interruzioni di nodi e node pool
- Monitorare le notifiche di manutenzione
- Ridurre al minimo l'impatto delle interruzioni del servizio
Monitorare le interruzioni dei nodi
La seguente metrica di sistema GKE riporta il conteggio delle interruzioni per un nodo GKE dall'ultimo campione (la metrica viene campionata ogni 60 secondi):
kubernetes.io/node/interruption_count
I campi interruption_type
(ad esempio TerminationEvent
, MaintenanceEvent
o PreemptionEvent
) e interruption_reason
(ad esempio HostError
, Eviction
o AutoRepair
) possono contribuire a fornire il motivo per cui
un nodo è stato interrotto.
Per ottenere una suddivisione delle interruzioni e delle relative cause nei nodi TPU nei cluster del tuo progetto, utilizza la seguente query PromQL:
sum by (interruption_type,interruption_reason)(
sum_over_time(
kubernetes_io:node_interruption_count{monitored_resource="k8s_node"}[${__interval}]))
Per visualizzare solo gli
eventi di manutenzione dell'host,
aggiorna la query per filtrare il valore HW/SW Maintenance
per interruption_reason
. Utilizza la seguente query PromQL:
```promql
sum by (interruption_type,interruption_reason)(
sum_over_time(
kubernetes_io:node_interruption_count{monitored_resource="k8s_node", interruption_reason="HW/SW Maintenance"}[${__interval}]))
```
Per visualizzare il conteggio delle interruzioni aggregato per pool di nodi, utilizza la seguente query PromQL:
```promql
sum by (node_pool_name,interruption_type,interruption_reason)(
sum_over_time(
kubernetes_io:node_pool_interruption_count{monitored_resource="k8s_node_pool", interruption_reason="HW/SW Maintenance", node_pool_name=NODE_POOL_NAME }[${__interval}]))
```
Monitorare le notifiche relative alla manutenzione
Compute Engine invia notifiche quando i nodi e le relative VM sono pianificati per eventi host distruttivi e quando questi eventi diventano attivi. Le notifiche includono informazioni su l'ora di inizio pianificata, il tipo di evento e altri dettagli.
Su GKE versione 1.31.1-gke.2008000 e successive, puoi monitorare gli eventi di manutenzione imminenti, inclusi quelli descritti in questa sezione.
La manutenzione imminente è pianificata, ma non attiva
Prima che una VM con GPU o TPU collegate abbia un
evento di manutenzione
pianificato, Compute Engine invia notifiche a tutte le sue VM. Queste
notifiche segnalano l'inizio del periodo di manutenzione. Quando una manutenzione
imminente è pianificata dalla VM ma non è attiva, GKE aggiunge
scheduled-maintenance-time
all'etichetta del nodo.
Per eseguire query su queste notifiche a livello di nodo, esegui questo comando:
kubectl get nodes -l cloud.google.com/scheduled-maintenance-time \
-L cloud.google.com/scheduled-maintenance-time
L'output è simile al seguente:
NAME STATUS SCHEDULED-MAINTENANCE-TIME
<gke-accelerator-node-name> Ready 1733083200
<gke-accelerator-node-name> Ready 1733083200
[...]
La colonna SCHEDULED-MAINTENANCE-TIME
rappresenta
i secondi, visualizzati nel formato di ora Unix.
Per eseguire query su queste notifiche a livello di metadati del nodo, controlla le istanze per una notifica di evento di manutenzione.
Inizio della manutenzione pianificata
Per le famiglie di macchine ottimizzate per l'acceleratore che supportano la
manutenzione avanzata, puoi
accedere all'endpoint upcoming-maintenance
che fornisce informazioni sugli
eventi di manutenzione pianificata e avviata.
Quando inizia la manutenzione pianificata, Compute Engine aggiorna i metadati
nella directory http://metadata.google.internal/computeMetadata/v1/instance/attributes/
. Compute Engine aggiorna le etichette dei metadati nel seguente modo:
- Imposta
maintenance-event
suTERMINATE_ON_HOST_MAINTENANCE
. - In
upcoming-maintenance
, impostamaintenance_status
suONGOING
.
GKE rimuoverà i pod e terminerà i carichi di lavoro entro il tempo massimo predefinito limitato della finestra di notifica della manutenzione.
Ridurre al minimo l'impatto delle interruzioni
Per ridurre al minimo l'impatto dell'interruzione del nodo, puoi avviare manualmente un evento di manutenzione dell'host.
Se non avvii un evento di manutenzione, Compute Engine completerà la manutenzione pianificata regolarmente.
Avvia manualmente un evento di manutenzione dell'host
Quando Compute Engine invia una notifica relativa a un evento di manutenzione pianificato, puoi avviare manualmente la manutenzione in un momento in linea con la tua pianificazione operativa, ad esempio durante i periodi di attività ridotta.
Su un nodo nel pool di nodi, imposta l'etichetta nodo
cloud.google.com/perform-maintenance
su true
. Ad esempio:
kubectl label nodes <node-name> cloud.google.com/perform-maintenance=true
GKE espelle i pod in modo controllato e termina i carichi di lavoro prima dell'inizio dell'evento di manutenzione con l'azione perform-maintenance. La durata tra l'applicazione dell'etichetta e l'inizio della manutenzione varia.
Configura GKE per terminare i carichi di lavoro in modo controllato
In questa sezione, configurerai GKE per gestire il ciclo di vita dell'applicazione e ridurre al minimo l'interruzione del workload. Se non configuri un periodo di tolleranza, il valore predefinito è 30 secondi.
GKE fa del suo meglio per terminare questi pod in modo controllato ed eseguire l'azione di terminazione che definisci, ad esempio il salvataggio di uno stato di addestramento. GKE invia un segnale SIGTERM
ai pod all'inizio del periodo di tolleranza. Se i pod non vengono chiusi entro la fine del periodo di tolleranza, GKE
invia un segnale SIGKILL
di follow-up a tutti i processi ancora in esecuzione in qualsiasi
container del pod.
Per configurare il periodo di interruzione normale, imposta il periodo di tolleranza per l'interruzione
(in secondi) nel campo spec.terminationGracePeriodSeconds
del manifest
del pod. Ad esempio, per ricevere una notifica dopo 10 minuti, imposta il campo
spec.terminationGracePeriodSeconds
nel manifest del pod su 600 secondi,
come segue:
spec:
terminationGracePeriodSeconds: 600
Ti consigliamo di impostare un periodo di tolleranza per la chiusura sufficientemente lungo da consentire il completamento di eventuali
attività in corso entro il periodo di tempo della notifica.
Se il tuo carico di lavoro utilizza un framework ML come MaxText, Pax o JAX con
Orbax, i carichi di lavoro
possono acquisire il segnale di arresto SIGTERM
e avviare un processo di creazione di checkpoint.
Per saperne di più, consulta TPU Autocheckpoint.
Procedura di arresto controllato
Quando inizia un evento di interruzione, attivato manualmente o automaticamente
dalla VM, Compute Engine segnala l'arresto imminente della macchina
aggiornando la chiave di metadati maintenance-event
. In entrambi i casi di arresto imminente
del nodo, GKE avvierà l'arresto controllato.
Il seguente flusso di lavoro mostra come GKE esegue l'arresto normale del nodo quando è imminente un arresto del nodo:
- Entro 60 secondi, si verifica quanto segue:
- I componenti di sistema applicano il set di etichette dei nodi
cloud.google.com/active-node-maintenance
impostato suONGOING
per indicare che i carichi di lavoro vengono arrestati. - GKE applica l'incompatibilità del nodo per impedire la pianificazione di nuovi pod sul nodo. L'incompatibilità ha la chiave
cloud.google.com/impending-node-termination:NoSchedule
. Ti consigliamo di non modificare i tuoi workload per tollerare questa contaminazione a causa dell'interruzione nota che si verifica.
- I componenti di sistema applicano il set di etichette dei nodi
- Il componente maintenance-handler inizia a eliminare i pod eliminando prima i pod del workload e poi i pod di sistema (ad esempio kube-system).
- GKE invia un segnale di arresto
SIGTERM
ai pod del workload in esecuzione sul nodo per avvisarli di un arresto imminente. I pod possono utilizzare questo avviso per completare le attività in corso. GKE fa del suo meglio per terminare questi pod in modo controllato. - Al termine dell'espulsione, GKE aggiorna il valore dell'etichetta
cloud.google.com/active-node-maintenance
aterminating
per indicare che il nodo è pronto per la terminazione.
Successivamente, si verifica la terminazione del nodo e viene allocato un nodo di sostituzione. GKE cancella le etichette e i taint al termine della procedura. Per aumentare la finestra di terminazione per i tuoi carichi di lavoro che utilizzano GPU o TPU, completa i passaggi descritti nella sezione Avviare manualmente un evento di manutenzione dell'host.
Monitorare l'avanzamento di una chiusura normale attiva
Puoi filtrare i log GKE in base ai seguenti eventi di terminazione controllata:
- Quando la VM rileva un'interruzione dovuta a un'imminente terminazione del nodo, ad esempio
l'evento di manutenzione dell'host Compute Engine, GKE imposta
cloud.google.com/active-node-maintenance
suONGOING
quando i carichi di lavoro vengono arrestati e suterminating
quando i carichi di lavoro sono terminati e il nodo è pronto per la terminazione. - Quando impedisce la pianificazione di nuovi workload, GKE
applica il
taint
cloud.google.com/impending-node-termination:NoSchedule
.
Passaggi successivi
- Scopri come selezionare le GPU nei pod Autopilot.
- Scopri come eseguire il deployment dei carichi di lavoro TPU su GKE Autopilot.