Scalare lo spazio di archiviazione Managed Lustre su GKE

Questo documento descrive come aumentare dinamicamente la capacità di archiviazione dei volumi Managed Lustre per i workload stateful in Google Kubernetes Engine (GKE) senza interrompere le applicazioni.

Ad esempio, se i tuoi job di addestramento AI/ML a lunga esecuzione hanno requisiti di archiviazione dinamici e imprevedibili, attiva l'espansione del volume di Managed Lustre per aumentare la capacità di archiviazione del PersistentVolume (PV) di Managed Lustre esistente.

Questo documento è rivolto ad amministratori e operatori della piattaforma, DevOps, amministratori dello spazio di archiviazione e ingegneri di machine learning (ML) che gestiscono lo spazio di archiviazione per i workload stateful su GKE.

Quando espandi un volume, i costi aumentano in base alla nuova capacità maggiore, secondo i prezzi standard diGoogle Cloud Managed Lustre.

Prima di iniziare

Prepara l'ambiente.

Requisiti

Assicurati di soddisfare i seguenti requisiti:

  • Devi avere un cluster GKE versione 1.35.0-gke.2331000 o successiva.
  • Devi abilitare il driver CSI Managed Lustre su un cluster esistente. Il driver è disabilitato per impostazione predefinita nei cluster Standard e Autopilot.

Limitazioni

  • Puoi solo aumentare le dimensioni di un volume esistente, non ridurle.
  • Non puoi utilizzare l'espansione del volume con la modalità di accesso ReadOnlyMany.
  • Quando ridimensioni i volumi Lustre, segui i limiti di capacità minima e massima e le dimensioni dei passaggi impostati dal livello di prestazioni del volume. Per ulteriori informazioni, vedi Considerazioni sul rendimento.
  • Specifica le dimensioni del volume Lustre in GiB come multipli di 1000. Kubernetes traduce unità come Ti in valori binari (ad esempio, 18 Ti viene interpretato come 18.432 GiB), il che comporta il rifiuto della richiesta da parte dell'API Lustre.

Abilita l'espansione del volume per una StorageClass

  1. Verifica se la tua StorageClass supporta l'espansione del volume:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    

    Sostituisci STORAGECLASS_NAME con il nome della tua StorageClass.

    Se il comando non restituisce alcun output o restituisce false, devi aggiornare esplicitamente la configurazione di StorageClass per consentire l'espansione.

  2. Apri la configurazione di StorageClass per modificarla:

    kubectl edit storageclass STORAGECLASS_NAME
    
  3. Nell'editor, aggiungi il campo allowVolumeExpansion: true alla configurazione di StorageClass:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: lustre-sc
    provisioner: lustre.csi.storage.gke.io
    ...
    allowVolumeExpansion: true

Espandi un PersistentVolumeClaim

Per avviare l'espansione del volume, modifica il PersistentVolumeClaim (PVC) per richiedere un aumento delle dimensioni del volume.

  1. Identifica la nuova dimensione valida per l'espansione come descritto in Determinare le dimensioni di espansione valide.
  2. Apri la configurazione della PVC per la modifica:

    kubectl edit pvc PVC_NAME
    

    Sostituisci PVC_NAME con il nome della tua PVC.

  3. Nell'editor, aggiorna il campo spec.resources.requests.storage con le dimensioni di espansione valide. Ad esempio, per espandere un volume da 9000Gi a 18000Gi, modifica il campo storage come segue:

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 18000Gi # Changed from 9000Gi
    

Verifica l'espansione del volume

  1. Monitora l'avanzamento dell'espansione esaminando gli eventi della PVC:

    kubectl describe pvc PVC_NAME
    

    I seguenti eventi nell'output della PVC indicano l'avanzamento o il risultato attuale della richiesta di espansione del volume:

    • ExternalExpanding: indica che Kubernetes è in attesa che external-resizer espanda la PVC.
    • Resizing: indica che l'operazione di ridimensionamento è in corso. Questa operazione può richiedere fino a 90 minuti per aumenti di capacità maggiori.
    • VolumeResizeSuccessful: conferma che l'espansione del volume è stata eseguita correttamente.
    • VolumeResizeFailed: indica che si è verificato un errore. Il messaggio dell'evento contiene i dettagli dell'API Google Cloud Managed Lustre. Questo stato potrebbe essere temporaneo e risolversi autonomamente.
  2. Al termine dell'espansione, verifica la configurazione aggiornata della PVC:

    kubectl get pvc PVC_NAME -o yaml
    
  3. Assicurati che il campo status.capacity rifletta le nuove dimensioni incrementate.

Se riscontri problemi durante la procedura di espansione, consulta Risoluzione dei problemi.

Determinare le dimensioni di espansione valide

Per determinare le nuove dimensioni del volume, identifica innanzitutto il livello di prestazioni del volume e la dimensione del passaggio corrispondente.

Identifica il livello di prestazioni del volume

Puoi trovare il livello di prestazioni del volume utilizzando una delle seguenti opzioni:

StorageClass

Esegui il seguente comando e cerca il valore perUnitStorageThroughput (ad esempio, 1000). Questo valore indica il livello di prestazioni in MBps per TiB.

kubectl get sc STORAGECLASS_NAME -o yaml

Sostituisci STORAGECLASS_NAME con il nome della tua StorageClass.

Istanza Lustre

Identifica il livello di prestazioni del volume controllando direttamente le proprietà dell'istanza Managed Lustre sottostante:

  1. Trova il nome del volume permanente associato alla tua PVC:

    kubectl get pvc PVC_NAME
    

    Sostituisci PVC_NAME con il nome della tua PVC.

    L'output è simile al seguente. Prendi nota del nome del PV nella colonna VOLUME, ad esempio pv-lustre.

    NAME         STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-lustre   Bound    pv-lustre   9000Gi     RWX            lustre-rwx     <unset>                 26m
    
  2. Trova la località e il nome dell'istanza del volume nel campo volumeHandle:

    kubectl get pv PV_NAME -o yaml
    

    Sostituisci PV_NAME con il nome del PV del passaggio precedente.

    Il valore volumeHandle è formattato come PROJECT_ID/LOCATION/INSTANCE_NAME. Prendi nota di INSTANCE_NAME e LOCATION per il passaggio successivo.

  3. Controlla le proprietà del livello di prestazioni descrivendo l'istanza Managed Lustre:

    gcloud lustre instances describe INSTANCE_NAME --location=LOCATION
    

    Sostituisci INSTANCE_NAME e LOCATION con i valori del passaggio precedente.

    Nell'output, cerca il campo perUnitStorageThroughput. Questo valore indica il livello di prestazioni in MBps per TiB.

Limiti di capacità e dimensioni dei passaggi

Dopo aver identificato il livello di prestazioni, consulta la tabella seguente per trovare i limiti di capacità associati e la dimensione del passo richiesta.

Livello (perUnitStorageThroughput) Capacità minima Capacità massima Dimensione passo
1000 MBps per TiB 9000 GiB 954.000 GiB (~1 PiB) 9000 GiB
500 MBps per TiB 18.000 GiB 1.908.000 GiB (~2 PiB) 18.000 GiB
250 MBps per TiB 36.000 GiB 3.816.000 GiB (~4 PiB) 36.000 GiB
125 MBps per TiB 72.000 GiB 7.632.000 GiB (~8 PiB) 72.000 GiB

I volumi devono essere aumentati in base alla dimensione del passaggio assegnata al relativo livello. Qualsiasi aumento della capacità deve essere un multiplo di questa dimensione del passaggio specifica. Ad esempio, se il volume del livello da 1000 MBps ha una capacità di 9000 GiB, puoi aumentarla a 18.000 GiB, 27.000 GiB e altri multipli.

Risoluzione dei problemi

Questa sezione fornisce soluzioni ai problemi comuni che potresti riscontrare durante l'espansione dei volumi Lustre.

L'espansione non riesce e viene visualizzato un errore "Argomento non valido"

Sintomo

  • La PVC entra in uno stato Resizing, ma poi non va a buon fine.
  • Quando esegui il comando kubectl describe pvc PVC_NAME, viene visualizzato un errore simile a VolumeResizeFailed: rpc error: code = InvalidArgument desc = ....

Causa

Questo errore in genere indica che la dimensione di archiviazione richiesta non è valida per il livello di prestazioni del volume Lustre per uno dei seguenti motivi:

  • La dimensione richiesta non è un multiplo della dimensione del passaggio richiesta per il livello.
  • La dimensione richiesta è inferiore alla capacità minima o superiore alla capacità massima del livello.

Risoluzione

  1. Consulta Limiti di capacità e dimensioni dei passaggi per trovare le dimensioni dei passaggi e i limiti di capacità validi per il livello di prestazioni del volume.
  2. Modifica nuovamente la PVC per richiedere una dimensione di archiviazione valida che soddisfi i limiti di dimensione e capacità del passaggio.

L'espansione non riesce e viene visualizzato un "Errore interno"

Sintomo

  • Il ridimensionamento della PVC non va a buon fine.
  • Quando esegui il comando kubectl describe pvc PVC_NAME, potresti visualizzare un evento VolumeResizeFailed con un messaggio di errore contenente code = Internal.

Causa

Questo errore indica un problema con il servizio Managed Lustre sottostante.

Risoluzione

  1. Riprova l'espansione applicando nuovamente il manifest PVC con le nuove dimensioni richieste. In questo modo, potresti risolvere problemi temporanei del backend.
  2. Se il nuovo tentativo non va a buon fine, contatta l'assistenza clienti Google Cloud.

L'espansione è bloccata nello stato "Ridimensionamento"

Sintomo

  • La PVC rimane nello stato Resizing per un periodo prolungato (più di 30 minuti per espansioni più piccole o più di 90 minuti per espansioni più grandi).
  • Potresti visualizzare un evento VolumeResizeFailed con un messaggio di errore DEADLINE_EXCEEDED.

Causa

Questo problema può verificarsi con aumenti di capacità di grandi dimensioni, che possono richiedere fino a 90 minuti per essere completati. Il componente csi-external-resizer potrebbe scadere durante l'attesa della risposta dell'API Google Cloud Managed Lustre, anche se l'operazione di espansione sottostante è ancora in corso.

Risoluzione

  • csi-external-resizer riprova automaticamente a eseguire l'operazione dopo un periodo di backoff. Continua a monitorare gli eventi PVC per un evento VolumeResizeSuccessful.
  • Se la PVC rimane nello stato Resizing per più di 90 minuti, contatta l'assistenza clienti Google Cloud.

L'espansione non si avvia o è bloccata in uno stato ExternalExpanding

Sintomo

  • Aggiorni il campo spec.resources.requests.storage nel PVC, ma lo stato del PVC non cambia in Resizing.
  • Quando esegui il comando kubectl describe pvc PVC_NAME, il log eventi mostra solo lo stato ExternalExpanding e non passa allo stato Resizing:
Events:
  Type    Reason             Age                From             Message
  ----    ------             ----               ----             -------
  Normal  ExternalExpanding  21m (x2 over 58m)  volume_expand    waiting for an external controller to expand this PVC

Causa

Questo comportamento in genere indica uno dei seguenti problemi:

  • La classe StorageClass associata alla PVC non consente l'espansione del volume.
  • Si è verificato un problema con il container sidecar csi-external-resizer, ovvero il componente responsabile dell'avvio dell'espansione.

Risoluzione

  1. Controlla la configurazione di StorageClass e verifica che il campo allowVolumeExpansion: true sia impostato:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    
  2. Se allowVolumeExpansion non è presente o è impostato su false, aggiorna StorageClass per consentire l'espansione del volume.

  3. Se la classe StorageClass è configurata correttamente, è probabile che il problema riguardi i componenti del control plane GKE che gestiscono l'operazione di ridimensionamento. Contatta l'assistenza clienti Google Cloud per ricevere supporto.

L'espansione non riesce a causa di un problema di quota o capacità

Sintomo

  • Il ridimensionamento del PVC non va a buon fine e sul PVC viene visualizzato un evento VolumeResizeFailed.
  • Quando esegui il comando kubectl describe pvc PVC_NAME, il messaggio di evento dal backend di Managed Lustre indica un problema di quota o capacità.

Causa

L'espansione valida richiesta non può essere soddisfatta perché supera la capacità o la quota complessiva disponibile per il servizio Managed Lustre nel progetto o nella regione.

Risoluzione

  • Modifica nuovamente la PVC e richiedi un aumento dello spazio di archiviazione inferiore.
  • Contatta l'amministratore Google Cloud della tua organizzazione per richiedere un aumento delle quote o della capacità complessive del servizio Lustre per il tuo progetto.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo documento, elimina la PVC. Questa operazione elimina anche il PV associato e l'istanza Managed Lustre sottostante se reclaimPolicy è impostato su Delete.

kubectl delete pvc PVC_NAME

Sostituisci PVC_NAME con il nome della tua PVC.

Passaggi successivi