Questo documento descrive come ottimizzare automaticamente le prestazioni del driver CSI di Cloud Storage FUSE e accelerare l'accesso ai dati dei tuoi workload AI/ML utilizzando i profili Cloud Storage FUSE su Google Kubernetes Engine (GKE).
I profili Cloud Storage FUSE automatizzano il processo critico di ottimizzazione delle prestazioni. Invece di modificare manualmente le impostazioni, puoi applicare profili predefiniti che configurano il driver CSI per te. Per le tue applicazioni AI/ML, l'utilizzo di questi profili può portare a tempi di addestramento e inferenza più rapidi con un overhead operativo ridotto.
Questo documento è destinato a sviluppatori di applicazioni e ingegneri di machine learning (ML) che vogliono migliorare le prestazioni delle loro applicazioni senza competenze approfondite di ottimizzazione dello spazio di archiviazione. Per scoprire di più sui ruoli comuni, consulta Ruoli utente e attività comuni di GKE.
Prima di leggere questo documento, assicurati di conoscere le nozioni di base di Cloud Storage, Kubernetes e del driver CSI di Cloud Storage FUSE. Inoltre, esamina i requisiti per l'utilizzo del driver CSI di Cloud Storage FUSE.
Vantaggi dell'utilizzo dei profili Cloud Storage FUSE
Per automatizzare l'ottimizzazione delle prestazioni per i carichi di lavoro AI/ML, i profili Cloud Storage FUSE utilizzano configurazioni Cloud Storage FUSE predefinite e applicano impostazioni aggiuntive specifiche di GKE. Queste impostazioni si basano sulle best practice di ottimizzazione delle prestazioni di Cloud Storage FUSE. L'utilizzo di profili predefiniti offre i seguenti vantaggi:
- Ottimizzazione semplificata delle prestazioni: utilizza profili Cloud Storage FUSE predefiniti per applicare le configurazioni ottimizzate per i workload AI/ML comuni, come training, serving e checkpoint.
- Ottimizzazione dinamica e consapevole delle risorse: l'utilizzo dei profili Cloud Storage FUSE consente al driver CSI di regolare automaticamente le dimensioni della cache e selezionare il mezzo di memorizzazione nella cache ottimale, ad esempio RAM o SSD locale, in base alle caratteristiche del bucket o della sottodirectory, come dimensioni, numero di oggetti e tipo di posizione, limiti dei file collaterali e risorse disponibili del nodo.
- Prestazioni di lettura accelerate: quando utilizzi il profilo
gcsfusecsi-serving, GKE abilita automaticamente Rapid Cache per migliorare le prestazioni di lettura per i tuoi carichi di lavoro di pubblicazione. - Approfondimenti sull'ottimizzazione del rendimento: ottieni informazioni sulle decisioni di ottimizzazione automatica tramite log strutturati che descrivono in dettaglio gli indicatori di input del tuo ambiente e le configurazioni risultanti applicate dal driver. Per saperne di più, consulta Visualizzare gli approfondimenti sui consigli.
Man mano che le best practice di Cloud Storage FUSE si evolvono, i profili vengono aggiornati nel tempo tramite le nuove release di GKE.
Limitazioni
- Non puoi utilizzare i profili Cloud Storage FUSE con i volumi effimeri CSI di Cloud Storage FUSE.
- I profili non supportano il montaggio dinamico, in cui specifichi un trattino basso (_) per montare tutti i bucket a cui può accedere il ServiceAccount Kubernetes.
- L'override dell'immagine sidecar con un'immagine sidecar privata personalizzata non è supportato. Per saperne di più, consulta Configurare un'immagine privata per il container sidecar.
Requisiti
- Il cluster GKE deve eseguire la versione 1.35.1-gke.1616000 o successive.
- Nel cluster deve essere abilitato il driver CSI di Cloud Storage FUSE. Se stai creando un nuovo cluster o attivando il driver su uno esistente, fai riferimento ai seguenti passaggi del documento per configurare il driver CSI Cloud Storage FUSE per GKE:
Costi
Oltre ai costi standard di GKE e Cloud Storage associati al driver CSI di Cloud Storage FUSE, l'utilizzo dei profili Cloud Storage FUSE comporta i seguenti costi.
Costi di scansione dei bucket
I profili Cloud Storage FUSE eseguono una scansione in background del bucket o della sottodirectory. Per impostazione predefinita, questa scansione viene eseguita ogni sette giorni. La scansione dei bucket comporta costi per le operazioni di classe A di Cloud Storage per l'elenco degli oggetti.
Costi di Rapid Cache
Il profilo gcsfusecsi-serving attiva automaticamente Rapid Cache,
che viene fatturato in base ai prezzi di Cloud Storage Rapid Cache. Per evitare
di sostenere addebiti per le istanze della cache quando non sono più necessarie, consulta Controlli
dei costi.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Cloud Storage e l'API Google Kubernetes Engine. Abilita le API
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Scegli una Google Cloud regione adatta alle tue esigenze. Sebbene consigliamo di creare il cluster GKE e il bucket Cloud Storage nella stessa regione per ottimizzare le prestazioni e i costi, è obbligatorio farlo quando utilizzi il profilo
gcsfusecsi-servingo prevedi di attivare Rapid Cache. - Assicurati di avere un bucket Cloud Storage esistente contenente il set di dati, il modello o i checkpoint per il tuo carico di lavoro AI/ML. Se devi creare un bucket, consulta Crea un bucket.
Seleziona un profilo delle prestazioni
Scegli un profilo che corrisponda al meglio al tuo workload. Ogni profilo corrisponde a una StorageClass preinstallata sul cluster. Per definizioni dettagliate dei profili FUSE di Cloud Storage, consulta il riferimento alla configurazione di StorageClass corrispondente.
| Profilo | Nome StorageClass | Ottimizzato per | Funzionalità principali |
|---|---|---|---|
| Formazione | gcsfusecsi-training |
Letture ad alta velocità effettiva | Ottimizza la latenza dei dati per GPU e TPU durante l'addestramento su set di dati di grandi dimensioni. |
| Checkpoint | gcsfusecsi-checkpointing |
Scritture con velocità effettiva elevata | Riduce al minimo il tempo necessario per salvare checkpoint di grandi dimensioni, riducendo le pause di addestramento. |
| Pubblicazione | gcsfusecsi-serving |
Accesso ai dati e memorizzazione nella cache | Abilita Rapid Cache per impostazione predefinita per accelerare le operazioni di lettura. |
Puoi verificare le StorageClass installate nel cluster eseguendo il comando seguente:
kubectl get sc -l gke-gcsfuse/profile=true
Configurare le autorizzazioni IAM
Concedi le autorizzazioni service agent GKE per analizzare il bucket Cloud Storage e gestire Rapid Cache.
Sostituisci i seguenti segnaposto quando esegui i comandi in questa sezione:
GCS_PROJECT: l'ID progetto contenente il bucket Cloud Storage.PROJECT_NUMBER: il numero del progetto del cluster GKE.BUCKET_NAME: il nome del bucket Cloud Storage.
Scegli una delle seguenti opzioni in base al tuo profilo e alle tue esigenze di utilizzo.
Opzione A: ruolo personalizzato (consigliata)
Questa opzione è obbligatoria per il profilo Serving o se viene utilizzato Rapid Cache. Se utilizzi il profilo di pubblicazione o prevedi di attivare manualmente Rapid Cache per altri profili, devi concedere le autorizzazioni per gestire la cache.
Crea un ruolo IAM personalizzato che consenta di eseguire la scansione degli oggetti e creare cache Rapid Cache:
gcloud iam roles create gke.gcsfuse.profileUser \ --project=GCS_PROJECT \ --title="GKE GCSFuse Profile User" \ --description="Allows scanning Cloud Storage buckets for objects, retrieving bucket metadata, and creating caches." \ --permissions="storage.objects.list,storage.buckets.get,storage.anywhereCaches.create,storage.anywhereCaches.get,storage.anywhereCaches.list,storage.anywhereCaches.update"Associa il ruolo personalizzato al service agent GKE per il tuo bucket specifico:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --project=GCS_PROJECT \ --member="serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role="projects/GCS_PROJECT/roles/gke.gcsfuse.profileUser"
Opzione B: ruolo standard per i profili di addestramento e checkpoint
Se utilizzi solo i profili Training o Checkpointing e non prevedi di utilizzare Rapid Cache, esegui questo comando:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--project=GCS_PROJECT \
--member="serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
--role="roles/storage.legacyBucketReader"
Esegui il deployment di un carico di lavoro con un profilo Cloud Storage FUSE
Segui questi passaggi per eseguire il deployment di un carico di lavoro con un profilo Cloud Storage FUSE.
Crea un manifest PersistentVolume (PV) che faccia riferimento a una delle StorageClass del profilo Cloud Storage FUSE:
apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi persistentVolumeReclaimPolicy: Retain storageClassName: STORAGECLASS_NAME mountOptions: - only-dir=BUCKET_DIR_PATH # Optional csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAMESostituisci quanto segue:
STORAGECLASS_NAME: il nome StorageClass del profilo che vuoi utilizzare. Il valore deve esseregcsfusecsi-training,gcsfusecsi-checkpointingogcsfusecsi-serving.BUCKET_DIR_PATH: (facoltativo) il percorso all'interno del bucket Cloud Storage, se stai montando una directory specifica. Se specificato, GKE esegue la scansione di questo percorso per l'ottimizzazione. Se omesso, GKE esegue la scansione dell'intero bucket.BUCKET_NAME: il nome del bucket Cloud Storage che hai specificato durante la configurazione dell'accesso ai bucket Cloud Storage.
Crea un PersistentVolumeClaim (PVC) che richieda la stessa StorageClass del tuo PV:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi volumeName: my-pv storageClassName: STORAGECLASS_NAMESostituisci quanto segue:
NAMESPACE: lo spazio dei nomi in cui vuoi eseguire il deployment del pod.STORAGECLASS_NAME: il nome di StorageClass come elencato nel PV.
Utilizza il PVC nel deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment namespace: NAMESPACE spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app annotations: gke-gcsfuse/volumes: "true" spec: serviceAccountName: KSA_NAME containers: - name: my-container image: busybox volumeMounts: - name: my-gcs-volume mountPath: "/data" volumes: - name: my-gcs-volume persistentVolumeClaim: claimName: my-pvcSostituisci quanto segue:
NAMESPACE: lo spazio dei nomi in cui vuoi eseguire il deployment del pod.KSA_NAME: il nome del service account Kubernetes che hai creato durante la configurazione dell'accesso ai bucket Cloud Storage.
Una volta distribuito, il driver CSI calcola automaticamente le dimensioni ottimali della cache e le opzioni di montaggio in base alle risorse del nodo, come GPU o TPU, memoria, SSD locale, dimensioni del bucket o della sottodirectory e limiti delle risorse sidecar.
Verificare l'ottimizzazione automatica
I processi in background di GKE analizzano automaticamente il bucket e sincronizzano Rapid Cache (se in uso).
Controlla lo stato della scansione del bucket e della cache
Dopo aver creato la PV, segui questi passaggi per controllare lo stato sia della scansione del bucket sia della cache. Non devi attendere il deployment del pod.
Controlla lo stato del PV:
kubectl describe pv my-pvNell'output, verifica che venga visualizzato l'evento
ScanOperationSucceeded. L'output è simile al seguente:Normal ScanOperationSucceeded gke-gcsfuse-scanner Bucket scan completed successfully for bucket "my-bucket", directory "my-dir": "526893" objects, "57690897566" bytesSe utilizzi il profilo
gcsfusecsi-serving, verifica che l'eventoAnywhereCacheSyncSucceededvenga visualizzato dopo che il livello di memorizzazione nella cache è pronto. L'output è simile al seguente:Normal AnywhereCacheSyncSucceeded gke-gcsfuse-scanner Anywhere Cache sync succeeded for PV "my-pv": us-central1-c:runningVerifica che le annotazioni PV siano aggiornate con il risultato della scansione:
gke-gcsfuse/bucket-scan-status: completed gke-gcsfuse/bucket-scan-num-objects: 526893 gke-gcsfuse/bucket-scan-total-size-bytes: 57690897566 gke-gcsfuse/bucket-scan-location-type: multi-region gke-gcsfuse/bucket-scan-hns-enabled: true gke-gcsfuse/bucket-scan-last-updated-time: 2025-12-10T22:48:38Z
Controllare lo stato del pod
Dopo aver eseguito il deployment del pod, esegui questo comando:
kubectl get pods -n NAMESPACE
Sostituisci NAMESPACE con lo spazio dei nomi in cui hai eseguito il deployment dei pod.
I tuoi pod ora dovrebbero essere in stato RUNNING, con le best practice per il rendimento
applicate automaticamente. Se i pod mostrano lo stato SchedulingGated, significa che GKE sta ancora analizzando il bucket o la sottodirectory. I pod rimangono in questo stato finché il controller CSI non completa
la scansione e aggiorna il PV.
Per comprendere le decisioni di ottimizzazione specifiche registrate dal conducente dopo l'avvio del Pod, consulta Visualizzare gli approfondimenti sui consigli.
Se riscontri errori, consulta la sezione Risoluzione dei problemi.
Riferimento alla configurazione di StorageClass
Questa sezione fornisce i manifest StorageClass per i profili Cloud Storage FUSE preinstallati e un riferimento dettagliato per le opzioni di montaggio e i parametri utilizzati dai profili. Queste configurazioni consentono al driver
gcsfuse.csi.storage.gke.io di automatizzare la regolazione delle prestazioni e la gestione delle risorse
per i tuoi workload AI/ML.
Formazione
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcsfusecsi-training
labels:
gke-gcsfuse/profile: "true"
provisioner: gcsfuse.csi.storage.gke.io
mountOptions:
- profile:aiml-training
parameters:
skipCSIBucketAccessCheck: "true"
gcsfuseMetadataPrefetchOnMount: "true"
fuseFileCacheMediumPriority: "gpu:ram|lssd,tpu:ram,general_purpose:ram|lssd"
fuseMemoryAllocatableFactor: "0.7"
fuseEphemeralStorageAllocatableFactor: "0.85"
bucketScanResyncPeriod: "168h"
bucketScanTimeout: "2m"
Checkpoint
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcsfusecsi-checkpointing
labels:
gke-gcsfuse/profile: "true"
provisioner: gcsfuse.csi.storage.gke.io
mountOptions:
- profile:aiml-checkpointing
- read_ahead_kb=1024
parameters:
skipCSIBucketAccessCheck: "true"
gcsfuseMetadataPrefetchOnMount: "true"
fuseFileCacheMediumPriority: "gpu:ram|lssd,tpu:ram,general_purpose:ram|lssd"
fuseMemoryAllocatableFactor: "0.7"
fuseEphemeralStorageAllocatableFactor: "0.85"
bucketScanResyncPeriod: "168h"
bucketScanTimeout: "2m"
Pubblicazione
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcsfusecsi-serving
labels:
gke-gcsfuse/profile: "true"
provisioner: gcsfuse.csi.storage.gke.io
mountOptions:
- profile:aiml-serving
- read_ahead_kb=131072
- file-cache:max-size-mb:0
- read:enable-buffered-read:true
- read:global-max-blocks:80
parameters:
anywhereCacheZones: "*"
anywhereCacheAdmissionPolicy: "admit-on-first-miss"
anywhereCacheTTL: "1h"
skipCSIBucketAccessCheck: "true"
gcsfuseMetadataPrefetchOnMount: "true"
fuseFileCacheMediumPriority: "gpu:ram|lssd,tpu:ram,general_purpose:ram|lssd"
fuseMemoryAllocatableFactor: "0.7"
fuseEphemeralStorageAllocatableFactor: "0.85"
bucketScanResyncPeriod: "168h"
bucketScanTimeout: "2m"
I profili utilizzano le seguenti opzioni di montaggio e parametri per il driver gcsfuse.csi.storage.gke.io:
mountOptions:profile: applica un insieme predefinito di ottimizzazioni di Cloud Storage FUSE personalizzate per i carichi di lavoro AI/ML. I valori validi per i profili preinstallati sonoaiml-training,aiml-checkpointingeaiml-serving.read_ahead_kb: specifica le dimensioni del buffer di lettura anticipata in kilobyte (KB). Questa opzione consente a Cloud Storage FUSE di eseguire il prefetch dei dati da Cloud Storage, migliorando potenzialmente le prestazioni di lettura per pattern di accesso sequenziali.file-cache:max-size-mb: per il profilo di pubblicazione, specifica le dimensioni massime in mebibyte (MiB) per la cache dei file. Nel servizio dei carichi di lavoro, in cui i modelli vengono in genere caricati nella memoria della GPU o della TPU una sola volta, questo parametro è impostato su0per disattivare la cache dei file di Cloud Storage FUSE locale, il che contribuisce a evitare I/O del disco ridondanti e a risparmiare spazio di archiviazione locale.read:enable-buffered-read: per il profilo di pubblicazione, consente a Cloud Storage FUSE di gestire i propri buffer interni, il che contribuisce a ridurre il numero di chiamate di sistema piccole e costose tra l'applicazione e il kernel.read:global-max-blocks: per il profilo di pubblicazione, limita il numero totale di blocchi di memoria simultanei utilizzati per le letture bufferizzate. Questa opzione consente di impedire al processo FUSE di consumare tutta la RAM disponibile durante la gestione di più richieste.
parameters:skipCSIBucketAccessCheck: se impostato su"true", il driver CSI salta il controllo iniziale dell'accesso al bucket. Questo parametro consente di ridurre le chiamate al Security Token Service per evitare potenziali problemi di quota.gcsfuseMetadataPrefetchOnMount: se impostato su"true", indica al driver CSI di avviare il prefetching dei metadati degli oggetti da Cloud Storage nella cache locale non appena viene montato il volume. Questo parametro può accelerare il primo accesso ai file.fuseFileCacheMediumPriority: definisce l'ordine di priorità per i supporti di archiviazione utilizzati dalla cache dei file di Cloud Storage FUSE. Consente di specificare preferenze diverse per i nodi con GPU, TPU o per i nodi per uso generico. Le opzioni multimediali includonoramelssd(SSD locale, se disponibile e abilitato).fuseMemoryAllocatableFactor: specifica in formato stringa una frazione che limita la memoria massima che le cache di Cloud Storage FUSE possono consumare, rispetto alla memoria allocabile totale del nodo e al limite di memoria del sidecar.fuseEphemeralStorageAllocatableFactor: limita l'utilizzo della cache Cloud Storage FUSE dello spazio di archiviazione temporanea sul nodo (ad esempio SSD locale per la memorizzazione nella cache dei file), rispetto allo spazio di archiviazione temporanea allocabile del nodo o allo spazio di archiviazione temporanea del sidecar limitato per la memorizzazione nella cache.bucketScanResyncPeriod: imposta l'intervallo di tempo in cui viene eseguita nuovamente la scansione del PV per rilevare le modifiche apportate al bucket Cloud Storage.bucketScanTimeout: la durata massima consentita per una singola operazione di scansione del bucket. Se la scansione supera questo tempo, potrebbero essere utilizzati risultati parziali.anywhereCacheZones: specifica un elenco separato da virgole di zone supportate in cui vengono create le cache Rapid Cache, ad esempio"us-central1-a,us-central1-b". Per utilizzare tutte le zone disponibili per il cluster, utilizza"*"come valore. Se questa impostazione viene impostata su"none"o non viene specificata, Rapid Cache viene disattivata.anywhereCacheTTL: la durata (TTL) dei dati memorizzati nella cache Rapid Cache, misurata dall'ultimo accesso. Se modifiche questo valore, le istanze Rapid Cache esistenti vengono aggiornate con il nuovo TTL.anywhereCacheAdmissionPolicy: determina quando inserire i dati nella Rapid Cache dopo un errore di lettura (quando i dati richiesti non vengono trovati nella cache). Le opzioni includono"admit-on-first-miss", che ammette i dati al primo errore di lettura, oppure"admit-on-second-miss", che ammette i dati solo al secondo errore di lettura per lo stesso oggetto. Se modifichi questo valore, le istanze Rapid Cache esistenti vengono aggiornate con il nuovo criterio.
(Facoltativo) Perfeziona le configurazioni dei profili
Puoi personalizzare impostazioni specifiche in un profilo, beneficiando comunque della sua configurazione di base. Utilizza le seguenti opzioni per modificare un profilo senza creare una nuova StorageClass.
Eseguire l'override delle opzioni e dei parametri di montaggio
Per modificare comportamenti specifici, aggiungi opzioni di montaggio al campo spec.mountOptions o parametri CSI al campo spec.csi.volumeAttributes nel PV.
GKE applica le impostazioni manuali in aggiunta a quelle predefinite del profilo.
L'esempio seguente mostra come eseguire l'override dell'opzione di montaggio read_ahead_kb e disattivare il parametro gcsfuseMetadataPrefetchOnMount nel profilo di pubblicazione.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-override
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: gcsfusecsi-serving
mountOptions:
- read_ahead_kb=2048 # Overrides the profile's default.
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: my-gcs-bucket
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "false" # Overrides the profile's default.
I casi d'uso comuni includono:
- Per attivare Rapid Cache per un profilo Training, aggiungi il parametro
anywhereCacheZonesdirettamente alla specifica PV. - Per modificare comportamenti specifici di Cloud Storage FUSE, ad esempio aumentare le dimensioni di
read_ahead_kb, per soddisfare i requisiti unici di un particolare workload.
Quando configuri manualmente le dimensioni della cache, tieni presente quanto segue:
- La specifica di una dimensione della cache manuale sostituisce il dimensionamento dinamico automatico solo per quel componente specifico. Il dimensionamento dinamico continua per tutti gli altri componenti in base al massimo impegno possibile all'interno del budget delle risorse rimanente.
- L'impostazione di un'opzione
metadata-cacheofile-cache, ad esempiometadata-cache:stat-cache-max-size-mb, non disattiva il calcolo automatico per altri tipi di cache. - Se specifichi manualmente
file-cache:max-size-mb, devi anche configurare un volume della cache di lettura personalizzato. Ciò contribuisce a garantire che un supporto di archiviazione con capacità sufficiente sia definito in modo esplicito per le dimensioni della cache personalizzata.
Ignorare la scansione dei bucket con le annotazioni
Puoi ignorare il processo di scansione automatica dei bucket fornendo le tue metriche relative al conteggio e alle dimensioni degli oggetti utilizzando le annotazioni. Il driver CSI utilizza questi valori per calcolare le configurazioni di rendimento ottimali senza eseguire la scansione del bucket.
L'esempio seguente mostra come aggiungere l'annotazione gke-gcsfuse/bucket-scan-status:
"override" alla visualizzazione di pagina, insieme alle annotazioni delle metriche specifiche.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-override
annotations:
gke-gcsfuse/bucket-scan-status: "override"
gke-gcsfuse/bucket-scan-num-objects: 19238
gke-gcsfuse/bucket-scan-total-size-bytes: 94837465
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: STORAGECLASS_NAME
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: BUCKET_NAME
I casi d'uso comuni includono:
- Se conosci già le dimensioni e il conteggio degli oggetti del bucket, soprattutto per i carichi di lavoro di inferenza in cui i dati cambiano raramente, puoi ignorare la scansione all'avvio.
- Se l'API Storage Cloud non è temporaneamente disponibile, queste annotazioni possono aiutarti a mantenere le prestazioni mentre i servizi sottostanti vengono corretti.
Risoluzione dei problemi
Utilizza le seguenti informazioni per monitorare lo stato dei profili Cloud Storage FUSE e risolvere i problemi comuni riscontrati durante la scansione dei bucket e la sincronizzazione della cache.
Parametro di configurazione non valido (InvalidArgument)
Le attività di ottimizzazione in background non sono state avviate perché uno o più parametri forniti nel manifest non erano validi.
Sintomo
Il PV mostra un evento ScanOperationStartError o AnywhereCacheSyncError con
un messaggio contenente rpc error: code = InvalidArgument. Ecco alcuni esempi:
Bucket scan timeout configuration error: rpc error: code = InvalidArgument desc = invalid duration format for "INVALID_DURATION".Anywhere Cache sync failed for PV "PV_NAME": rpc error: code = InvalidArgument desc = failed to get anywhere cache "CACHE_NAME" ... invalid anywhere cache "CACHE_NAME" provided.
Causa
Uno o più parametri nel campo spec.csi.volumeAttributes della tua PV sono
formattati in modo errato o contengono valori che il sistema non può analizzare.
Risoluzione
Correggi i valori dei parametri non validi nel file manifest del PV e implementa nuovamente il PV.
Assicurati che tutti i valori di durata (ad es. bucketScanTimeout) utilizzino il formato
corretto (ad es. 2m o 10m) e che tutte le impostazioni specifiche del profilo corrispondano
ai valori supportati validi.
Autorizzazione negata durante la scansione del bucket Cloud Storage
GKE non può accedere al bucket Cloud Storage specificato per eseguire l'analisi delle prestazioni richiesta.
Sintomo
Il PV mostra un evento ScanOperationStartError con un messaggio Error 403: Forbidden
che indica che il chiamante non dispone dell'accesso storage.buckets.get.
Causa
L'agente di servizio GKE non dispone delle autorizzazioni IAM necessarie o il nome del bucket non è corretto.
Risoluzione
- Verifica che il nome del bucket nel campo
volumeHandledella tua PV sia corretto e che il bucket esista. - Assicurati che le autorizzazioni dell'agente di servizio GKE siano concesse all'identità
service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.comper il bucket specifico. Per saperne di più, consulta Configurare le autorizzazioni IAM.
Posizione di Rapid Cache non corrispondente
Impossibile creare la cache Rapid Cache perché la zona richiesta non è compatibile con la località del bucket.
Sintomo
Il PV mostra un evento AnywhereCacheSyncWarning con il messaggio: Invalid
zone. Rapid Cache isn't available in the requested zone.
Causa
Le cache Rapid Cache devono essere create in zone che si trovano all'interno della località regionale del bucket. Questo errore si verifica in genere quando il cluster GKE e il bucket Cloud Storage si trovano in regioni diverse.
Risoluzione
Sposta il bucket Cloud Storage in una regione che corrisponda alla località del cluster GKE ed esegui nuovamente il deployment del PV.
Scansione del bucket scaduta
L'analisi del bucket Cloud Storage ha richiesto più tempo del timeout configurato, con conseguenti risultati di ottimizzazione parziali.
Sintomo
Il PV mostra un evento ScanOperationTimedOut. Il PV è annotato con risultati
parziali per il conteggio degli oggetti e le dimensioni totali.
Causa
Il bucket contiene un numero eccezionalmente elevato di oggetti (in genere diversi milioni) che non possono essere elencati completamente entro il timeout predefinito di due minuti.
Risoluzione
- Imposta un valore maggiore per il campo
bucketScanTimeoutnella sezionespec.csi.volumeAttributesdel PV, ad esempio10m. - Se le dimensioni del bucket sono statiche, ignora la scansione fornendo manualmente il conteggio e le dimensioni degli oggetti.
Cache dei metadati limitata dal budget di memoria
Il driver ha limitato le dimensioni della cache dei metadati per adattarsi alle risorse disponibili del nodo, il che potrebbe ridurre le prestazioni.
Sintomo
I log contengono un messaggio che indica che la dimensione della cache delle statistiche dei metadati richiesta è stata limitata al budget di memoria di Cloud Storage FUSE disponibile.
Causa
La cache dei metadati per il numero di oggetti nel bucket supera la memoria allocata al sidecar Cloud Storage FUSE o la memoria disponibile del nodo.
Risoluzione
- Utilizza l'opzione di montaggio
only-dirper limitare il volume a una sottodirectory più piccola con meno oggetti. - Aumenta il limite di memoria per il container sidecar Cloud Storage FUSE.
- Se i limiti dei sidecar sono già sufficienti, utilizza un tipo di nodo con più memoria allocabile.
Cache dei file disattivata a causa dei limiti delle risorse
GKE ha disattivato la cache dei file locali perché non è stato possibile trovare un supporto di archiviazione adatto con spazio sufficiente.
Sintomo
I log mostrano l'avviso: No suitable file cache medium found or requirement
exceeded limits for all options.
Causa
Le dimensioni della cache dei file calcolate superano sia la RAM del nodo disponibile sia lo spazio di archiviazione SSD locale disponibile.
Risoluzione
- Utilizza l'opzione di montaggio
only-dirper limitare il volume a una sottodirectory più piccola con meno oggetti. - Aumenta i limiti delle risorse del sidecar Cloud Storage FUSE.
- Utilizza un tipo di nodo con più memoria o abilita gli SSD locali nel pool di nodi.
Monitorare lo stato utilizzando gli eventi PersistentVolume
GKE registra gli eventi e gli errori di configurazione chiave nel PV. Per controllare questi eventi, esegui questo comando:
kubectl describe pv PV_NAME
Al termine della scansione del bucket, viene visualizzato un evento ScanOperationSucceeded. Se utilizzi il profilo gcsfusecsi-serving, visualizzi un evento AnywhereCacheSyncSucceeded dopo che il livello di memorizzazione nella cache è operativo.
Monitorare lo stato utilizzando i log del driver CSI
Il driver CSI di Cloud Storage FUSE registra decisioni di configurazione dettagliate e informazioni sul rendimento. Per visualizzare questi log in Cloud Logging, utilizza la seguente query:
resource.type="k8s_container"
resource.labels.pod_name=~"gcsfusecsi-node-.*"
Visualizzare gli approfondimenti sui suggerimenti
Per comprendere gli indicatori di input specifici e le decisioni prese dalla logica di ottimizzazione automatica, cerca la stringa GCSFuseCSIRecommendation nei log del driver CSI. Il payload JSON risultante fornisce metriche dettagliate, tra cui
le seguenti:
inputSignals: il conteggio degli oggetti bucket, le dimensioni totali dei dati e le risorse del nodo disponibili (RAM e archiviazione temporanea).decision: le dimensioni della cache calcolate finali e il supporto di archiviazione selezionato (ramolssd).
{
"insertId": "INSERT_ID",
"jsonPayload": {
"decision": {
"fileCacheBytes": 300000000,
"fileCacheMedium": "lssd",
"metadataStatCacheBytes": 4500,
},
"target": {
"nodeName": "NODE_NAME",
"pvName": "PV_NAME",
"podName": "POD_NAME"
},
"message": "GCSFuseCSIRecommendation: Recommended cache configs for PV PV_NAME and Pod POD_NAME: FileCache: 287MiB (lssd) | MetadataStatCache: 1MiB | Expand for full details",
"inputSignals": {
"requiredFileCacheBytes": 300000000,
"fuseBudgetMemoryBytes": 187904819,
"sidecarLimitMemoryBytes": 268435456,
"nodeType": "gpu",
"bucketTotalObjects": 3,
"nodeAllocatableMemoryBytes": 191291998208,
"bucketTotalDataSizeBytes": 300000000,
"bucketLocationType": "multi-region",
"bucketHNSEnabled": true,
"sidecarLimitEphemeralStorageBytes": 0,
"requiredMetadataStatCacheBytes": 4500,
"nodeAllocatableEphemeralStorageBytes": 1317908854882,
"nodeHasEphemeralStorageLSSD": true,
"fuseBudgetEphemeralStorageBytes": 1120222526649
}
},
...
}
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse create in questa guida, segui questi passaggi:
Elimina il deployment:
kubectl delete deployment my-deployment -n NAMESPACESostituisci
NAMESPACEcon lo spazio dei nomi Kubernetes in cui hai creato il deployment.Elimina PersistentVolumeClaim:
kubectl delete pvc my-pvc -n NAMESPACESostituisci
NAMESPACEcon lo spazio dei nomi Kubernetes in cui hai creato il PVC.Elimina PersistentVolume:
kubectl delete pv my-pvSe hai utilizzato il profilo
gcsfusecsi-servingo hai attivato manualmente Rapid Cache, segui le istruzioni per disattivare una cache per non incorrere più in addebiti per le istanze di cache.
Passaggi successivi
- Scopri di più sul driver CSI di Cloud Storage FUSE.
- Scopri come ottimizzare manualmente il driver CSI di Cloud Storage FUSE per le prestazioni.