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


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

  • architettura
  • Gestione job
  • multitenancy
  • sicurezza
  • coda
  • spazio di archiviazione
  • prestazioni
  • efficienza in termini di costi
  • monitoraggio

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

Queste best practice sono destinate ad amministratori della piattaforma, architetti del cloud e professionisti delle operazioni interessati al deployment di carichi di lavoro batch in GKE. L'architettura di riferimento per una piattaforma di elaborazione batch su GKE mostra molte delle best practice discusse 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 intervento dell'utente. Per definire le attività, utilizza la risorsa Jobs di Kubernetes. Una piattaforma batch riceve i job e li mette in coda nell'ordine di ricezione. 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 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 GKE che possono far parte di una piattaforma batch.

Gestione della piattaforma batch

Tradizionalmente, le piattaforme batch hanno due principali profili utente: 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 conferma dell'invio del job e un identificatore univoco. Al termine del 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 provisionate correttamente per garantire che i job vengano eseguiti con un intervento minimo o nullo da parte dell'utente.
  • 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 competizione per le risorse, viene svolto per primo il lavoro più importante.

Prepara l'architettura della piattaforma batch in GKE

Un ambiente GKE è costituito da nodi, ovvero macchine virtuali (VM) Compute Engine, raggruppati per formare un cluster.

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

Consiglio Risorse
Seleziona una modalità di funzionamento 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 carico di lavoro. I cluster Autopilot sono altamente disponibili per impostazione predefinita.
  • Con la modalità Standard, puoi definire e gestire la configurazione del cluster, inclusi nodi, scalabilità, sicurezza e altre impostazioni avanzate.

Consulta il confronto di alto livello tra la modalità Autopilot e la modalità Standard.

Scegli il tipo di macchina per i tuoi nodi

GKE supporta le seguenti serie di VM Compute Engine:

  • Ottimizzazione dei costi, ad esempio E2
  • Equilibrato, ad esempio N2, N2D o N1
  • Ottimizzate per lo scale out, ad esempio Tau T2D o Tau T2A
  • Ottimizzate per la memoria, ad esempio M2 o M1
  • Ottimizzate per il calcolo, ad esempio C2 o C2D
  • Ottimizzate per l'acceleratore, ad esempio A2 con GPU NVIDIA A100, G2 con GPU NVIDIA L4, A3 con GPU NVIDIA H100 (disponibile in anteprima privata).

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

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

Utilizzare gli acceleratori hardware per i nodi

In GKE puoi anche utilizzare acceleratori hardware come le unità di elaborazione grafica (GPU) e le Tensor Processing Unit (TPU). Valuta 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 i carichi di lavoro GPU omogenei e con picchi con richieste ridotte. GPU a più istanze per partizionare le GPU in modo da condividere una singola risorsa GPU su più container contemporaneamente.

Attivare 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 i nodi o eseguire un provisioning eccessivo dei pool di nodi. Specifica solo le dimensioni minime e massime per il pool di nodi.

Ti consigliamo di impostare cluster autoscaler con la seguente configurazione:

  • Utilizza il profilo optimize-utilization che rimuove i nodi inutilizzati fino a tre volte più velocemente del profilo bilanciato. Per scoprire di più, consulta la sezione Profili di scalabilità automatica.
  • Imposta il criterio di località 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 approfondire, consulta le norme relative alla località.
  • Abilita il provisioning automatico dei nodi per gestire automaticamente e scalare automaticamente l'infrastruttura. Dopo aver creato un pool di nodi utilizzando il provisioning automatico, il gestore della scalabilità automatica del cluster può scalare dinamicamente il pool di nodi. Per scoprire di più, consulta Come funziona il provisioning automatico dei nodi.

Con i cluster Autopilot, non devi preoccuparti di eseguire il provisioning dei nodi o di gestire i pool di nodi perché il provisioning dei pool di nodi viene eseguito automaticamente 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 tuo cluster nei canali GKE disponibili.

Per scoprire di più, consulta Come scegliere il canale di rilascio migliore per i tuoi cluster

Definisci un ambito di manutenzione da escludere per il tuo cluster

Con una finestra di esclusione dell'ambito dell'upgrade definita, GKE rispetta il fatto che i carichi di lavoro batch di lunga durata non vengono interrotti per la manutenzio ne fino al completamento.

Per scoprire di più, consulta Ambito della manutenzione da escludere.

Gestire il ciclo di vita dei 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 rete e di archiviazione condivisi. I pod sono definiti da una specifica Kubernetes.

Un job crea uno o più pod e continua a riprovare a 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 tabella seguente elenca i consigli principali 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 per assegnare 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 comporta la pulizia dei pod creati. La sospensione di un job elimina i relativi pod attivi finché il job non viene ripreso.
Impostare i CronJob per le azioni programmate 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 il criterio di errore del pod Kubernetes e il limite di errori di backoff del pod per gestire gli errori recuperabili e non recuperabili in un job. Questa definizione migliora il consumo delle risorse del cluster evitando ripetuti tentativi di pod e arresti anomali dei job dovuti a interruzioni dei pod. Ad esempio, puoi configurare la prenotazione, l'espulsione avviata dall'API o l'espulsione basata su contaminazioni in cui i pod che non hanno una tolleranza per l'effetto di incompatibilità NoExecute vengono espulsi. Scopri come gestire gli errori dei pod recuperabili e non recuperabili con le norme relative agli errori dei pod.
Gestire più job come un'unità Utilizza l'API JobSet per gestire più job come un'unità per gestire i pattern di carico di lavoro, ad esempio un driver (o un coordinatore) e più worker (ad esempio MPIJob), impostando al contempo parametri predefinite per i job in linea con i 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.
Estendere 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 del cluster rispetta le regole di espulsione 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 Pianificazione e interruzione dei pod.

Gestire la multitenancy

La multi-tenancy dei cluster GKE è un'alternativa alla gestione delle risorse GKE da parte di utenti o carichi di lavoro diversi, denominati tenant, in un'unica organizzazione. La gestione delle risorse GKE potrebbe seguire criteri come l'isolamento del tenant, le quote e gli intervalli di limite o l'allocazione dei costi.

La tabella seguente elenca i principali consigli per la gestione del multitenancy:

Consiglio Risorse
Utilizza gli spazi dei nomi per gestire l'isolamento dei tenant Puoi separare ogni tenant e le relative risorse Kubernetes in spazi dei nomi distinti.
Utilizzare i criteri per applicare l'isolamento del tenant Definisci i criteri per limitare l'accesso alle API, impostare quote, limitare l'utilizzo delle risorse e limitare le operazioni consentite ai contenitori. Questi criteri hanno come ambito gli spazi dei nomi.
Impostare l'allocazione dei costi di GKE Utilizza l'allocazione dei costi di GKE per ottenere informazioni sulle richieste di risorse del cluster per ciascun 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 principali consigli per la gestione dell'accesso e della sicurezza

Consiglio Risorse
Impostare Workload Identity Federation per GKE GKE consente ai carichi di lavoro nel tuo cluster GKE di rubare l'identità degli account di servizio Identity and Access Management (IAM) per accedere ai servizi Google Cloud. Utilizzando la federazione delle identità per i carichi di lavoro per GKE, i carichi di lavoro possono accedere in modo sicuro ai secret memorizzati al di fuori di GKE.

Per scoprire di più, consulta Workload Identity Federation for GKE e accedere ai segreti archiviati.

Impostare l'isolamento della rete del cluster Configura l'isolamento della rete dei cluster in modo che sia l'endpoint del piano di controllo sia i nodi worker possano avere indirizzi IP interni.

Per scoprire 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 verificabili e sicuri al fine di aumentare la sicurezza dei nodi GKE.
Isolamento fisico Per motivi di sicurezza, i tuoi carichi di lavoro potrebbero necessitare di un isolamento più efficace. Controlla la pianificazione con le incompatibilità dei nodi per separare fisicamente i tenant nei pool di nodi utilizzando le incompatibilità dei nodi e le tolleranze dei carichi di lavoro. In questo modo, viene garantito che solo i carichi di lavoro appropriati vengano pianificati su questi pool di nodi.

Coda e condivisione equa

Per controllare il consumo delle risorse, puoi assegnare limiti di quota delle risorse per ogni tenant, mettere in coda i job in arrivo ed elaborarli nell'ordine in cui sono stati ricevuti.

La seguente tabella elenca i consigli principali per la gestione delle code e della condivisione equa tra i carichi di lavoro batch:

Consiglio Risorse
Utilizzare Kueue

Kueue è un sistema di coda dei job nativo di Kubernetes per il calcolo ad alte prestazioni, il batch, il machine learning e applicazioni simili in un cluster Kubernetes. Per contribuire alla condivisione equa delle risorse del cluster tra i propri tenant, Kueue gestisce le quote e il modo in cui i job le consumano. Kueue prende le seguenti decisioni:

  • Quando un job deve attendere
  • Quando un job deve essere autorizzato all'avvio, ad esempio creando il pod
  • Quando un job deve essere prelevato, ad esempio eliminando il pod

Per scoprire come implementare un sistema di coda dei job, consulta Implementare un sistema di coda dei job con condivisione della quota tra gli spazi dei nomi su GKE.

Per scoprire di più su Kueue, consulta Concetti di Kueue.

Spazio di archiviazione, prestazioni ed efficienza dei costi

L'utilizzo efficiente delle risorse di archiviazione e di calcolo di GKE può ridurre i costi. Una strategia consiste nel dimensionare e configurare correttamente le istanze di calcolo in base alle tue esigenze di elaborazione batch senza sacrificare le prestazioni.

La tabella seguente elenca i consigli principali per progettare e gestire lo spazio di archiviazione e ottimizzare il rendimento:

Consiglio Risorse
Utilizzare 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 le SSD locali per i dati temporanei o i dischi permanenti Extreme per i dati permanenti.
  • Utilizza Hyperdisk Throughput Persistent Disk per eseguire il provisioning in modo indipendente e dinamico della velocità effettiva e della capacità ottimizzate per i carichi di lavoro batch.
Utilizzare un Network Attached Storage

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

  • Utilizza Filestore per consentire a tutti i nodi di lavoro di un pod di accedere allo stesso spazio dei nomi di archiviazione e di scalare la capacità.
  • Utilizza Cloud Storage FUSE per accedere a Cloud Storage direttamente da un contenitore come montaggio POSIX locale.
Definire 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 i report e le 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 carichi di lavoro che richiedono la semantica del filesystem, 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 carico di lavoro. Ad esempio, imposta i valori minimo, predefinito e massimo del buffer di ricezione della socket TCP. Utilizza la configurazione del sistema di nodi.
  • Attiva il polling per occupato utilizzando i profili di rete. Alcuni carichi di lavoro sensibili alla latenza della 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 la latenza e il networking dei carichi di lavoro GKE supporta il criterio di posizionamento compatto per i pool di nodi che specifica che questi nodi (e quindi i carichi di lavoro in esecuzione su di essi) devono essere posizionati in una maggiore vicinanza fisica all'interno di una zona. Questo è particolarmente utile per i carichi di lavoro ad accoppiamento stretto e ad alte prestazioni, in cui la latenza ridotta tra i diversi processi che compongono il carico di lavoro è un problema importante. Per saperne di più, consulta il posizionamento compatto.
Usa VM Spot

Le VM spot sono istanze di macchine virtuali (VM) di Compute Engine il cui prezzo è inferiore rispetto alle VM Compute Engine standard e che non forniscono 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 questo criterio, le VM spot hanno un rischio inferiore di essere prerilasciate. Questa combinazione è particolarmente utile per i carichi di lavoro che possono sopravvivere alla preemption dei singoli nodi worker, come i calcoli paralleli.
  • Se il tuo carico di lavoro ha un'impronta di risorse prevedibile, la combinazione di prenotazioni Google Cloud e sconti per l'utilizzo vincolato può generare risparmi significativi. Crea un pool di nodi con la dimensione impostata sul numero di istanze riservate e dai la priorità alla saturazione di questo pool di nodi per un utilizzo massimo.
Utilizzare lo streaming di immagini

Utilizza il flusso di immagini per eseguire il pull delle immagini container. GKE invia i flussi di dati dalle immagini idonee. In questo modo, i carichi di lavoro possono essere inizializzati senza dover attendere il download dell'intera immagine, migliorando in modo significativo i tempi di inizializzazione e l'efficienza in termini di costi.

Monitoraggio

GKE è integrato con strumenti di logging e osservabilità che ti aiutano a monitorare l'affidabilità e l'efficienza del tuo cluster. Nella tabella seguente sono elencati i consigli principali per attivare e utilizzare gli strumenti di osservabilità di 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 gestione 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 generale dell'utilizzo del cluster e delle risorse ed eseguire drill-down e filtrare in base a varie metriche e dimensioni.

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

Passaggi successivi