Best practice per l'esecuzione di carichi di lavoro batch su GKE


Questa pagina introduce le best practice per la creazione e l'ottimizzazione delle piattaforme di elaborazione batch con Google Kubernetes Engine (GKE), incluse le best practice per:

  • Architettura
  • Gestione job
  • Multitenancy
  • Sicurezza
  • Accodamento
  • Archiviazione
  • Prestazioni
  • Efficienza in termini di costi
  • Monitoraggio

GKE fornisce un framework potente per l'orchestrazione di carichi di lavoro batch come l'elaborazione dei dati, l'addestramento di modelli di machine learning, l'esecuzione di simulazioni scientifiche e altri carichi di lavoro di computing ad alte prestazioni.

Queste best practice sono destinate ad amministratori di piattaforme, architetti cloud e professionisti delle operazioni interessati al deployment di carichi di lavoro 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 .

Come funzionano i carichi di lavoro 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 per il job. Lo sviluppatore riceve quindi la conferma dell'invio del lavoro e un identificatore univoco. Una volta completato il job, lo sviluppatore riceverà una notifica insieme a qualsiasi output o risultato 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 in modo appropriato 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 è composto da nodi, ovvero macchine virtuali (VM) Compute Engine, raggruppati insieme per formare un cluster.

La tabella seguente elenca i consigli chiave per la pianificazione e la progettazione dell'architettura della piattaforma batch:

Consiglio Risorse
Seleziona una modalità operativa di GKE

GKE offre le seguenti modalità di funzionamento:

  • Con la modalità Autopilot, GKE gestisce automaticamente la configurazione del cluster, inclusi nodi, scalabilità, sicurezza e altre impostazioni preconfigurate, in modo che tu possa concentrarti sul tuo workload. I cluster Autopilot sono a disponibilità elevata per impostazione predefinita.
  • Con la modalità Standard, definisci e gestisci la configurazione del cluster, inclusi nodi, scalabilità, sicurezza e altre impostazioni avanzate.

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:

  • Ottimizzate per i costi, ad esempio E2
  • Bilanciati, ad esempio N2, N2D o N1
  • Ottimizzate per lo scale out, ad esempio Tau T2D o Tau T2A
  • Con ottimizzazione per la memoria, ad esempio M2 o M1
  • Ottimizzate per il calcolo, ad esempio C2 o C2D
  • Ottimizzate per l'acceleratore, ad esempio A4 con GPU NVIDIA B200

Ogni serie di macchine è associata a una o più piattaforme CPU, come i processori Arm e x86 di Intel e AMD.

Scopri le opzioni attualmente disponibili per il tuo carico di lavoro.

Utilizza gli acceleratori hardware per i tuoi 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 time-sharing 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 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 i nodi o eseguire un provisioning eccessivo dei pool di nodi. Invece, devi specificare solo una dimensione minima e massima per il pool di nodi.

Ti consigliamo di impostare il gestore della scalabilità automatica del cluster con la seguente configurazione:

  • Utilizza il profilo optimize-utilization che rimuove i nodi non utilizzati fino a tre volte più velocemente del profilo bilanciato. Per saperne di più, consulta Profili di scalabilità automatica.
  • Imposta i criteri relativi alla posizione su ANY. Il gestore della scalabilità automatica dei cluster GKE dà la priorità all'utilizzo delle prenotazioni inutilizzate e crea nodi in qualsiasi zona disponibile nelle regioni. Per scoprire di più, consulta le norme relative alla posizione.
  • Abilita il provisioning automatico dei nodi per gestire e scalare automaticamente l'infrastruttura. Una volta creato un pool di nodi utilizzando il provisioning automatico, il gestore della scalabilità automatica del cluster può scalare dinamicamente il pool di nodi. Per saperne di più, consulta la pagina Come funziona il provisioning automatico dei nodi.

Con i cluster Autopilot, non devi preoccuparti del provisioning dei nodi o della gestione dei node pool perché questi vengono sottoposti a provisioning automatico 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 tuo cluster

Con una finestra di esclusione dell'ambito di upgrade definita, GKE rispetta il fatto che i workload batch a esecuzione prolungata 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 lavoro

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 finché non viene terminato correttamente un numero specificato di pod. Man mano che i pod vengono completati, il job monitora i 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:

Consiglio 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 pod attivi finché il job non viene ripreso.
Impostare CronJob per azioni pianificate regolari Utilizza CronJob per GKE per eseguire azioni pianificate regolari, come backup, generazione di report o addestramento pianificato per i modelli di machine learning.
Gestire gli errori in un job Definisci i criteri di errore dei pod di Kubernetes e il limite di backoff dei pod per gestire gli errori ripetibili e non ripetibili in un job. Questa definizione migliora il consumo delle risorse del cluster evitando nuovi tentativi non necessari di pod e errori dei job dovuti a interruzioni dei pod. Ad esempio, puoi configurare la preemption, l'espulsione avviata dall'API o l'espulsione basata su 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.
Gestire più job come un'unica unità Utilizza l'API JobSet per gestire più job come unità per gestire i pattern di carico 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 job indicizzato 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 di 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 dei cluster rispetta le regole di rimozione impostate 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 scoprire di più, consulta Considerazioni sulla pianificazione e sull'interruzione dei pod.

Gestire la multitenancy

La 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 di limiti o l'allocazione dei costi.

La tabella seguente elenca i principali consigli per la gestione del multi-tenancy:

Consiglio 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 i criteri per applicare l'isolamento dei tenant Definisci policy per limitare l'accesso alle API, impostare quote, limitare l'utilizzo delle risorse e limitare le operazioni consentite ai container. Queste policy sono delimitate dagli 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 ottimizzare 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

Consiglio Risorse
Imposta la federazione delle identità per i workload per GKE GKE consente ai carichi di lavoro nel tuo cluster GKE di impersonare service account IAM (Identity and Access Management) 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.

Utilizza Shielded GKE Nodes Configura Shielded GKE Nodes per fornire un'identità e un'integrità del nodo solide e verificabili per aumentare la sicurezza dei nodi GKE.
Isolamento fisico Per motivi di sicurezza, i tuoi carichi di lavoro potrebbero richiedere un isolamento più efficace. Controlla la pianificazione con le incompatibilità dei nodi per separare fisicamente i tenant nei node pool utilizzando le incompatibilità dei nodi e le tolleranze dei carichi di lavoro. In questo modo, solo i carichi di lavoro appropriati vengono pianificati su questi pool di nodi.

Accodamento 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 consigli per la gestione della coda e della condivisione equa tra i workload batch:

Consiglio Risorse
Utilizzare 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:

  • Quando un job deve attendere
  • Quando un job deve essere ammesso per l'avvio, ad esempio creando il pod
  • Quando un job deve essere interrotto, ad esempio eliminando il pod

Per scoprire come implementare un sistema di accodamento dei job, consulta Implementare un sistema di accodamento 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 calcolo GKE e di archiviazione può ridurre i costi. Una strategia consiste nel dimensionare e configurare le istanze di calcolo in modo che siano in linea con le 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 del rendimento:

Consiglio Risorse
Utilizza i dischi permanenti di Compute Engine

Ti consigliamo di utilizzare le seguenti configurazioni dei dischi permanenti di Compute Engine:

  • Utilizza i dischi permanenti regionali per consentire ai nodi worker di tutte le zone di una regione di accedere allo stesso spazio di archiviazione durevole sottostante.
  • Per i carichi di lavoro che richiedono un'archiviazione ad alte prestazioni, utilizza gli SSD locali per i dati temporanei o Extreme Persistent Disk per i dati permanenti.
  • Utilizza Persistent Disk Hyperdisk Throughput per eseguire il provisioning in modo indipendente e dinamico del throughput e della capacità ottimizzati per i carichi di lavoro batch.
Utilizzare Network Attached Storage

Utilizza il seguente Network Attached Storage insieme a Persistent Disk per prestazioni di archiviazione ottimali:

  • Utilizza Filestore per consentire a tutti i nodi di lavoro in un pod di accedere allo stesso spazio dei nomi di archiviazione e scalare la capacità.
  • Utilizza Cloud Storage FUSE per accedere a Cloud Storage direttamente da un container come montaggio POSIX locale.
Definisci Pub/Sub

Il carico di lavoro 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:

  • Per l'archiviazione di oggetti gestita, utilizza Cloud Storage.
  • Per l'archiviazione di file di rete gestita, utilizza Filestore.
  • Per i workload che richiedono la semantica del file system, utilizza il driver CSI di Cloud Storage FUSE. Questo driver consente alle applicazioni Kubernetes di montare i bucket Cloud Storage come file system locali
Specifica i parametri di ottimizzazione per il carico di lavoro

Ti consigliamo di utilizzare le seguenti configurazioni:

  • Personalizza la configurazione del sistema di nodi per il tuo workload. Ad esempio, imposta i valori minimo, predefinito e massimo del buffer di ricezione del socket TCP. Utilizza la configurazione del sistema di nodi.
  • Attiva il polling occupato utilizzando i profili di rete. Alcuni carichi di lavoro sensibili alla latenza di rete potrebbero essere migliorati. Utilizzare i profili di rete.
  • Aumenta la larghezza di banda di rete per i nodi GKE attivando Google Virtual NIC (gVNIC), un'interfaccia di rete virtuale progettata specificamente per Compute Engine e consigliata per le applicazioni ad alte prestazioni.
  • Specifica il numero di thread per core per disattivare il multi-threading simultaneo.
Ottimizza il networking e la latenza dei tuoi carichi di lavoro GKE supporta il criterio di posizionamento compatto per i node pool, che specifica che questi nodi (e quindi i carichi di lavoro in esecuzione su di essi) devono essere posizionati più vicini tra loro all'interno di una zona. Ciò è particolarmente utile per i carichi di lavoro strettamente accoppiati 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 posizionamento compatto.
Usa VM Spot

Le VM spot sono istanze di macchina virtuale (VM) di Compute Engine con un prezzo inferiore rispetto alle VM Compute Engine standard e non offrono alcuna garanzia di disponibilità.

Ti consigliamo di utilizzare le seguenti soluzioni:

  • Imposta i pool di nodi di VM spot con scalabilità automatica combinati con location_policy= "ANY" . Con questa policy, le VM spot hanno un rischio inferiore di essere prerilasciate. Questa combinazione è particolarmente utile per i carichi di lavoro che possono sopravvivere alla preemption di singoli nodi worker, ad esempio calcoli piacevolmente paralleli.
  • Se il tuo workload ha un footprint di risorse prevedibile, la combinazione di Google Cloudprenotazioni e sconti per impegno di utilizzo può generare risparmi significativi. Crea un pool di nodi con le dimensioni impostate sul numero di istanze riservate e dai la priorità alla saturazione di questo pool di nodi per il massimo utilizzo.
Utilizzare lo streaming di immagini

Utilizza lo streaming delle immagini per eseguire il pull delle 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:

Consiglio 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 scoprire di più, consulta Managed Service per Prometheus.

Utilizzare le dashboard di Cloud Monitoring

Utilizza le dashboard di monitoraggio per GKE per visualizzare una panoramica di alto livello dell'utilizzo di cluster e risorse, nonché per visualizzare in dettaglio e filtrare varie metriche e dimensioni.

Per scoprire di più, consulta Osservare i cluster GKE.

Passaggi successivi