Questa pagina presenta le best practice per la creazione e l'ottimizzazione di piattaforme di elaborazione batch con Google Kubernetes Engine (GKE), tra cui:
- Architettura
- Gestione job
- Multitenancy
- Sicurezza
- Accodamento
- Archiviazione
- Prestazioni
- Efficienza in termini di costi
- Monitoraggio
GKE fornisce un framework potente per l'orchestrazione di batch workload come l'elaborazione dei dati, l'addestramento di modelli di machine learning, l'esecuzione di simulazioni scientifiche e altri workload di computing ad alte prestazioni.
Queste best practice sono rivolte ad amministratori di piattaforme, cloud architect e professionisti delle operazioni interessati al deployment di workload batch in GKE. L'architettura di riferimento: piattaforma di elaborazione batch su GKE mostra molte delle best practice descritte in questa guida e può essere implementata nel tuo progetto Google Cloud .
Per una panoramica consolidata di tutte le best practice di GKE, consulta Best practice per GKE.Come funzionano i workload batch
Un carico di lavoro batch è un gruppo di attività che vengono eseguite fino al completamento senza l'intervento dell'utente. Per definire le attività, utilizza la risorsa Kubernetes Jobs. Una piattaforma batch riceve i job e li mette in coda nell'ordine in cui vengono ricevuti. La coda nella piattaforma batch applica la logica di elaborazione, come priorità, quota e risorse allocabili. Mettendo in coda e personalizzando i parametri di elaborazione batch, Kubernetes ti consente di ottimizzare l'utilizzo delle risorse disponibili, ridurre al minimo il tempo di inattività per i job pianificati e massimizzare i risparmi sui costi. Il seguente diagramma mostra i componenti di GKE che possono far parte di una piattaforma batch.
Gestione della piattaforma Batch
Tradizionalmente, le piattaforme batch hanno due principali buyer persona, sviluppatori e amministratori della piattaforma:
- Uno sviluppatore invia un job specificando il programma, i dati da elaborare e i requisiti del job. Quindi, lo sviluppatore riceve la conferma dell'invio del job e un identificatore univoco. Una volta completato il job, lo sviluppatore riceverà una notifica insieme a eventuali output o risultati del job.
- Un amministratore della piattaforma gestisce e fornisce agli sviluppatori una piattaforma di elaborazione batch efficiente e affidabile.
Una piattaforma di elaborazione batch deve soddisfare i seguenti requisiti:
- Le risorse della piattaforma vengono sottoposte a provisioning correttamente per garantire che i job vengano eseguiti con un intervento dell'utente minimo o nullo.
- Le risorse della piattaforma sono configurate in base alle best practice di sicurezza e osservabilità dell'organizzazione.
- Le risorse della piattaforma vengono utilizzate nel modo più efficiente possibile. In caso di contesa delle risorse, viene eseguito prima il lavoro più importante.
Prepara l'architettura della piattaforma batch in GKE
Un ambiente GKE è costituito da nodi, ovvero macchine virtuali (VM) di Compute Engine, raggruppati insieme per formare un cluster.
La tabella seguente elenca i suggerimenti principali per la pianificazione e la progettazione dell'architettura della piattaforma batch:
| Suggerimento | Risorse |
|---|---|
| Seleziona una modalità operativa GKE |
GKE offre le seguenti modalità di funzionamento:
Consulta il confronto di alto livello tra la modalità Autopilot e quella Standard. |
| Scegliere il tipo di macchina per i nodi |
GKE supporta le seguenti serie di VM Compute Engine:
Ogni serie di macchine è associata a una o più piattaforme CPU, come processori Arm e processori x86 di Intel e AMD. Scopri le opzioni attualmente disponibili per il tuo workload. |
| Utilizza acceleratori hardware per i nodi |
Puoi anche utilizzare acceleratori hardware come le unità di elaborazione grafica (GPU) e le Tensor Processing Unit (TPU) in GKE. Prendi in considerazione la strategia di condivisione del tempo della GPU, che consente a più container di condividere il tempo sulla stessa GPU fisica. Questo approccio è utile per workload GPU burstable e omogenei con poche richieste. GPU multi-istanza per partizionare le GPU in modo da condividere una singola risorsa GPU tra più container contemporaneamente.
|
| Abilita il gestore della scalabilità automatica dei cluster sui cluster Standard | GKE ridimensiona automaticamente il numero di nodi in un determinato pool di nodi in base alle esigenze dei tuoi carichi di lavoro. Non è necessario aggiungere o rimuovere manualmente nodi o eseguire l'overprovisioning dei node pool. Invece, devi specificare solo una dimensione minima e una dimensione massima per il pool di nodi. Ti consigliamo di impostare il gestore della scalabilità automatica del cluster con la seguente configurazione:
Con i cluster Autopilot, non devi preoccuparti del provisioning dei nodi o della gestione dei node pool perché questi vengono sottoposti automaticamente a provisioning tramite il provisioning automatico dei nodi e vengono scalati automaticamente per soddisfare i requisiti dei tuoi carichi di lavoro. |
| Registra il cluster in un canale di rilascio | GKE può gestire automaticamente la versione e gli upgrade del cluster. In base al tuo modello di adozione delle release, puoi registrare il cluster nei canali GKE disponibili. Per saperne di più, consulta Come scegliere il miglior canale di rilascio per i tuoi cluster. |
| Definisci un ambito di manutenzione da escludere per il cluster | Con un periodo di esclusione dell'ambito di upgrade definito, GKE rispetta il fatto che i workload batch a lunga esecuzione non vengano interrotti per la manutenzione fino al completamento. Per scoprire di più, consulta Ambito della manutenzione da escludere. |
Gestire il ciclo di vita del job
In Kubernetes, esegui i carichi di lavoro in un insieme di pod. I pod sono gruppi di uno o più container, con risorse di archiviazione e di rete condivise. I pod sono definiti da una specifica Kubernetes.
Un job crea uno o più pod e tenta continuamente di eseguirli fino a quando un numero specificato di pod non viene terminato correttamente. Man mano che i pod vengono completati, il job tiene traccia dei completamenti riusciti. Quando viene raggiunto un numero specificato di completamenti riusciti, il job è completato.
La seguente tabella elenca i principali consigli per la progettazione e la gestione dei job:
| Suggerimento | Risorse |
|---|---|
| Seleziona la modalità di completamento del job | Specifica la modalità
di completamento come Indexed. Questa configurazione è utile quando si assegna una partizione dei dati da elaborare in base all'indice del pod. I pod di un job ricevono un indice di completamento associato. L'eliminazione di un job pulisce
i pod che ha creato. La sospensione di un job elimina i suoi pod attivi finché il
job non viene ripreso.
|
| Impostare CronJob per azioni programmate regolari | Utilizza CronJob per GKE per eseguire azioni programmate regolari, come backup, generazione di report o addestramento pianificato per i modelli di machine learning. |
| Gestire gli errori in un job | Definisci il criterio di errore del pod Kubernetes e il limite di backoff del pod per gestire gli errori ripetibili e non ripetibili in un job. Questa definizione migliora il consumo delle risorse del cluster evitando nuovi tentativi dei pod non necessari ed errori dei job dovuti a interruzioni dei pod. Ad esempio, puoi configurare la preemption,
l'espulsione avviata
dall'API o l'espulsione basata
sull'incompatibilità, in cui i pod che non hanno una tolleranza per l'effetto
di incompatibilità NoExecute vengono espulsi. Scopri come gestire
gli errori dei pod ripetibili e non ripetibili con la norma di errore dei pod.
|
| Gestisci più job come un'unità | Utilizza l'API JobSet per gestire più job come un'unica unità per gestire i pattern dei carichi di lavoro, ad esempio un autista (o coordinatore) e più lavoratori (ad esempio MPIJob) durante l'impostazione dei valori predefiniti dei job allineati ai pattern comuni in base ai tuoi casi d'uso. Ad esempio, puoi creare un Indexed Job per impostazione predefinita, creare un servizio headless per nomi di dominio completi (FQDN) prevedibili per i pod e impostare il criterio di errore del pod associato. |
| Estendi il tempo di esecuzione per un pod che non tollera i riavvii | Imposta
l'annotazione cluster-autoscaler.kubernetes.io/safe-to-evict
di Kubernetes su false nella specifica del pod. Il gestore della scalabilità automatica del cluster rispetta i set di regole di rimozione impostati sui pod. Queste limitazioni possono
impedire l'eliminazione di un nodo da parte del gestore della scalabilità automatica se contiene un pod con l'annotazione
cluster-autoscaler.kubernetes.io/safe-to-evict.
Per saperne di più, consulta Considerazioni sulla pianificazione e sull'interruzione dei pod. |
Gestisci la multitenancy
Il multi-tenancy del cluster GKE è un'alternativa alla gestione delle risorse GKE da parte di utenti o workload diversi, denominati tenant, in una singola organizzazione. La gestione delle risorse GKE potrebbe seguire criteri come l'isolamento dei tenant, quote e intervalli limite o l'allocazione dei costi.
La tabella seguente elenca i suggerimenti principali per la gestione della multitenancy:
| Suggerimento | Risorse |
|---|---|
| Utilizza gli spazi dei nomi per gestire l'isolamento dei tenant | Puoi separare ogni tenant e le relative risorse Kubernetes nei propri spazi dei nomi. |
| Utilizzare le policy per applicare l'isolamento dei tenant | Definisci le policy per limitare l'accesso alle API, impostare quote, limitare l'utilizzo delle risorse e limitare le azioni consentite ai container. Queste policy hanno come ambito gli spazi dei nomi. |
| Imposta l'allocazione dei costi di GKE | Utilizza l'allocazione dei costi di GKE per ottenere informazioni sulle richieste di risorse del cluster per ogni tenant in base allo spazio dei nomi. |
Controllare l'accesso alla piattaforma batch
GKE ti consente di perfezionare le autorizzazioni di accesso dei carichi di lavoro in esecuzione sul cluster.
La tabella seguente elenca i suggerimenti chiave per la gestione dell'accesso e della sicurezza
| Suggerimento | Risorse |
|---|---|
| Imposta la federazione delle identità per i workload per GKE | GKE consente ai carichi di lavoro nel tuo cluster GKE di
impersonare i service account Identity and Access Management (IAM) per accedere ai servizi
Google Cloud . Utilizzando la federazione delle identità per i carichi di lavoro per GKE, i workload possono accedere in modo sicuro
ai secret archiviati al di fuori di GKE.
Per saperne di più, consulta Workload Identity Federation for GKE e accedere ai secret archiviati. |
| Imposta l'isolamento della rete del cluster | Configura l'isolamento di rete dei cluster in modo che sia l'endpoint del control plane sia i nodi worker possano avere indirizzi IP interni.
Per saperne di più, consulta Informazioni sulla personalizzazione dell'isolamento di rete. |
| Utilizzare Shielded GKE Nodes | Configura Shielded GKE Nodes per fornire un'identità e un'integrità dei nodi solide e verificabili, in modo da aumentare la sicurezza dei nodi GKE. |
| Isolamento fisico | Per motivi di sicurezza, i tuoi workload potrebbero richiedere un isolamento più efficace. Controlla la pianificazione con incompatibilità dei nodi per separare fisicamente i tenant nei pool di nodi utilizzando incompatibilità dei nodi e tolleranze dei workload. Ciò contribuisce a garantire che solo i carichi di lavoro appropriati vengano pianificati su questi pool di nodi. |
Coda e condivisione equa
Per controllare il consumo di risorse, puoi assegnare limiti di quota delle risorse per ogni tenant, mettere in coda i job in entrata ed elaborare i job nell'ordine in cui sono stati ricevuti.
La seguente tabella elenca i principali suggerimenti per la gestione della coda e della condivisione equa tra i workload batch:
| Suggerimento | Risorse |
|---|---|
| Utilizza Kueue | Kueue è un sistema di accodamento dei job nativo di Kubernetes per applicazioni batch, di computing ad alte prestazioni, di machine learning e simili in un cluster Kubernetes. Per contribuire alla condivisione equa delle risorse del cluster tra i suoi tenant, Kueue gestisce le quote e il modo in cui i job le utilizzano. Kueue prende le seguenti decisioni:
Per scoprire come implementare un sistema di coda dei job, consulta Implementa un sistema di coda dei job con condivisione della quota tra spazi dei nomi su GKE. Per scoprire di più su Kueue, consulta Concetti di Kueue. |
Ottimizza archiviazione, prestazioni ed efficienza in termini di costi
L'utilizzo efficiente delle nostre risorse di computing e archiviazione GKE può ridurre i costi. Una strategia consiste nel dimensionare e configurare le istanze di computing in modo che siano in linea con le tue esigenze di elaborazione batch senza sacrificare le prestazioni.
La tabella seguente elenca i suggerimenti chiave per la progettazione e la gestione dello spazio di archiviazione e l'ottimizzazione delle prestazioni:
| Suggerimento | Risorse |
|---|---|
| Utilizza i dischi permanenti di Compute Engine | Ti consigliamo di utilizzare le seguenti configurazioni dei dischi permanenti di Compute Engine:
|
| Utilizzare Network Attached Storage | Utilizza il seguente Network Attached Storage insieme a Persistent Disk per prestazioni di archiviazione ottimali:
|
| Definisci Pub/Sub | Il workload batch può anche leggere e scrivere dati. Ad esempio, puoi utilizzare Pub/Sub e scrivere i risultati in un data warehouse come BigQuery, da cui vengono aggiornati report e dashboard. Ti consigliamo di utilizzare le seguenti soluzioni di archiviazione:
|
| Specifica i parametri di ottimizzazione per il tuo workload | Ti consigliamo di utilizzare le seguenti configurazioni:
|
| Ottimizza il networking e la latenza dei tuoi workload | GKE supporta la policy di posizionamento compatto per i node pool, che specifica che questi nodi (e quindi i workload in esecuzione su di essi) devono essere posizionati in stretta prossimità fisica tra loro all'interno di una zona. Ciò è particolarmente utile per i carichi di lavoro ad alto accoppiamento e ad alte prestazioni in cui la bassa latenza tra i diversi processi che compongono il carico di lavoro è un problema importante. Per saperne di più, consulta la sezione Posizionamento compatto. |
| Usa VM Spot | Le VM spot sono istanze di macchine virtuali (VM) Compute Engine il cui prezzo è inferiore rispetto alle VM Compute Engine standard e non garantiscono la disponibilità. Ti consigliamo di utilizzare le seguenti soluzioni:
|
| Utilizza lo streaming di immagini | Utilizza lo streaming delle immagini per estrarre le immagini container. GKE trasmette i dati dalle immagini idonee. In questo modo, i carichi di lavoro possono essere inizializzati senza attendere il download dell'intera immagine, il che comporta tempi di inizializzazione notevolmente migliorati e una migliore efficienza in termini di costi. |
Monitorare i cluster
GKE è integrato con strumenti di osservabilità e logging che ti aiutano a monitorare l'affidabilità e l'efficienza del tuo cluster. La tabella seguente elenca i principali consigli per l'attivazione e l'utilizzo degli strumenti di osservabilità GKE:
| Suggerimento | Risorse |
|---|---|
| Utilizzare Prometheus | GKE è integrato con Google Cloud Observability. Personalizza le metriche che vuoi che GKE invii a Cloud Logging e Cloud Monitoring Google Cloud Managed Service per Prometheus è abilitato per i cluster GKE per impostazione predefinita. Ti consigliamo di utilizzare la raccolta gestita per eliminare la complessità della configurazione e della manutenzione dei server Prometheus. Per saperne di più, consulta Managed Service per Prometheus. |
| Utilizzare le dashboard di Cloud Monitoring | Utilizza le dashboard di Monitoring per GKE per visualizzare una panoramica di alto livello dell'utilizzo del cluster e delle risorse, nonché per visualizzare in dettaglio e filtrare varie metriche e dimensioni. Per saperne di più, consulta Osservazione dei cluster GKE. |
| Osserva i tuoi workload AI/ML nella console Google Cloud |
Nella console Google Cloud , vai a Kubernetes Engine > AI/ML > Job per visualizzare JobSet, Job, PyTorchJob e RayJob. Puoi accedere a dettagli come log, eventi e visualizzazioni nelle dashboard di osservabilità. Per visualizzare i job secondari all'interno di un JobSet o i worker appartenenti a un RayJob, nell'interfaccia utente, vai alla risorsa principale. |
Passaggi successivi
- Scopri come eseguire il deployment di un sistema batch utilizzando Kueue
- Consulta le best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.