Questa guida mostra come utilizzare i volumi permanenti di Kubernetes supportati dai bucket Cloud Storage per gestire le risorse di archiviazione per i pod Kubernetes su Google Kubernetes Engine (GKE). Valuta la possibilità di utilizzare questa opzione di archiviazione se hai già familiarità con PersistentVolume e vuoi coerenza con i deployment esistenti che si basano su questo tipo di risorsa.
Questa guida è rivolta agli utenti amministratori e operatori della piattaforma che vogliono semplificare la gestione dello spazio di archiviazione per le loro applicazioni GKE.
Prima di leggere questa pagina, assicurati di conoscere i volumi permanenti di Kubernetes, i pod di Kubernetes e i bucket Cloud Storage.
Se vuoi un'interfaccia basata sui pod semplificata che non richieda esperienza precedente con i volumi permanenti di Kubernetes, consulta Montare i bucket Cloud Storage come volumi effimeri CSI.
Prima di iniziare
Assicurati di aver completato i seguenti prerequisiti:
- Comprendi i requisiti e le limitazioni del driver CSI di Cloud Storage FUSE.
- Crea il bucket Cloud Storage
- Abilita il driver CSI di Cloud Storage FUSE
- Configura l'accesso ai bucket Cloud Storage
Come funzionano i volumi permanenti per i bucket Cloud Storage
Con il provisioning statico, crei uno o più oggetti PersistentVolume contenenti i dettagli del sistema di archiviazione sottostante. I pod nei tuoi cluster possono quindi utilizzare lo spazio di archiviazione tramite PersistentVolumeClaims.
L'utilizzo di un volume permanente supportato da un bucket Cloud Storage comporta le seguenti operazioni:
Definizione dell'archiviazione: definisci un PersistentVolume nel tuo cluster GKE, incluso il driver CSI da utilizzare e tutti i parametri richiesti. Per il driver CSI di Cloud Storage FUSE, specifica il nome del bucket e altri dettagli pertinenti.
Se vuoi, puoi ottimizzare il rendimento del driver CSI utilizzando la funzionalità di memorizzazione nella cache dei file. La memorizzazione nella cache dei file può migliorare le prestazioni delle app GKE memorizzando nella cache i file di Cloud Storage a cui si accede di frequente su un disco locale più veloce.
Inoltre, puoi utilizzare la funzionalità di download parallelo per accelerare la lettura di file di grandi dimensioni da Cloud Storage per i download multithread. Puoi utilizzare questa funzionalità per migliorare i tempi di caricamento dei modelli, soprattutto per le letture di dimensioni superiori a 1 GB.
Richiamo del driver: quando un PersistentVolumeClaim richiede spazio di archiviazione corrispondente alla specifica di PersistentVolume, GKE richiama il driver CSI di Cloud Storage FUSE.
Montaggio del bucket: il driver CSI monta il bucket sul nodo in cui è pianificato il pod richiedente. In questo modo, i contenuti del bucket sono accessibili al pod come directory nel file system locale del pod. Per perfezionare la modalità di montaggio dei bucket nel file system, puoi utilizzare le opzioni di montaggio. Puoi anche utilizzare gli attributi del volume per configurare un comportamento specifico del driver CSI di Cloud Storage FUSE.
Riassegnazione: se il pod viene riavviato o riprogrammato su un altro nodo, il driver CSI rimonta lo stesso bucket sul nuovo nodo, garantendo l'accessibilità dei dati.
Crea un PersistentVolume
Crea un manifest PersistentVolume con la seguente specifica:
Pod
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Sostituisci i seguenti valori:
- NAMESPACE: lo spazio dei nomi Kubernetes in cui vuoi eseguire il deployment del pod.
- BUCKET_NAME: il nome del bucket Cloud Storage
che hai specificato durante la configurazione dell'accesso ai bucket Cloud Storage. Puoi specificare un carattere di sottolineatura (
_
) per montare tutti i bucket a cui può accedere il ServiceAccount Kubernetes. Per saperne di più, consulta la sezione Montaggio dinamico nella documentazione di Cloud Storage FUSE.
Il file manifest di esempio mostra queste impostazioni obbligatorie:
spec.csi.driver
: utilizzagcsfuse.csi.storage.gke.io
come nome del driver CSI.
(Facoltativo) Puoi modificare queste variabili:
spec.mountOptions
: passa le opzioni di montaggio a Cloud Storage FUSE. Specifica i flag in una stringa separata da virgole, senza spazi.spec.csi.volumeAttributes
: passa attributi del volume aggiuntivi a Cloud Storage FUSE.
Pod (memorizzazione nella cache dei file)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Sostituisci i seguenti valori:
- NAMESPACE: lo spazio dei nomi Kubernetes in cui vuoi eseguire il deployment del pod.
- BUCKET_NAME: il nome del bucket Cloud Storage
che hai specificato durante la configurazione dell'accesso ai bucket Cloud Storage.
Puoi specificare un carattere di sottolineatura (
_
) per montare tutti i bucket a cui può accedere il service account Kubernetes. Per saperne di più, consulta la sezione Montaggio dinamico nella documentazione di Cloud Storage FUSE.
Pod (download parallelo)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:enable-parallel-downloads:true - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Sostituisci i seguenti valori:
- NAMESPACE: lo spazio dei nomi Kubernetes in cui vuoi eseguire il deployment del pod.
- BUCKET_NAME: il nome del bucket Cloud Storage
che hai specificato durante la configurazione dell'accesso ai bucket Cloud Storage.
Puoi specificare un carattere di sottolineatura (
_
) per montare tutti i bucket a cui può accedere il service account Kubernetes. Per saperne di più, consulta la sezione Montaggio dinamico nella documentazione di Cloud Storage FUSE.
Applica il manifest al cluster:
kubectl apply -f PV_FILE_PATH
Sostituisci PV_FILE_PATH con il percorso del file YAML.
Crea un PersistentVolumeClaim
Crea un manifest PersistentVolumeClaim con la seguente specifica:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: example-storage-class
Sostituisci NAMESPACE con lo spazio dei nomi Kubernetes in cui vuoi eseguire il deployment del pod.
Per associare il tuo PersistentVolume a un PersistentVolumeClaim, controlla queste impostazioni di configurazione:
- I campi
spec.storageClassName
nei manifest di PersistentVolume e PersistentVolumeClaim devono corrispondere. Il valore di storageClassName non deve fare riferimento a un oggetto StorageClass esistente. Per associare la rivendicazione a un volume, puoi utilizzare qualsiasi nome, ma non può essere vuoto. - I campi
spec.accessModes
nei manifest di PersistentVolume e PersistentVolumeClaim devono corrispondere. - Il campo
spec.capacity.storage
nel manifest del PersistentVolume deve corrispondere al campospec.resources.requests.storage
nel manifest PersistentVolumeClaim. Poiché i bucket Cloud Storage non hanno limiti di dimensioni, puoi inserire qualsiasi numero per la capacità, ma non può essere vuoto.
- I campi
Applica il manifest al cluster:
kubectl apply -f PVC_FILE_PATH
Sostituisci PVC_FILE_PATH con il percorso del file YAML.
Utilizzare il volume in un pod
Crea un manifest di pod con la seguente specifica:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-static-pvc namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" spec: containers: - image: busybox name: busybox command: ["sleep"] args: ["infinity"] volumeMounts: - name: gcs-fuse-csi-static mountPath: /data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-static persistentVolumeClaim: claimName: gcs-fuse-csi-static-pvc readOnly: true
Sostituisci i seguenti valori:
- NAMESPACE: lo spazio dei nomi Kubernetes in cui vuoi eseguire il deployment del pod.
- KSA_NAME: il nome di Kubernetes ServiceAccount che hai creato durante la configurazione dell'accesso ai bucket Cloud Storage.
Il file manifest di esempio mostra queste impostazioni obbligatorie:
metadata.annotations
: l'annotazionegke-gcsfuse/volumes: "true"
è obbligatoria. Consulta Configurare il contenitore sidecar per le annotazioni facoltative.
(Facoltativo) Puoi modificare queste variabili:
spec.containers[n].volumeMonts[n].readOnly
: specifica true se solo determinati montaggi di volumi sono di sola lettura.spec.volumes[n].persistentVolumeClaim.readOnly
: specifica true se tutti i montaggi dei volumi sono di sola lettura.
Applica il manifest al cluster:
kubectl apply -f POD_FILE_PATH
Sostituisci POD_FILE_PATH con il percorso del file YAML.
(Facoltativo) Monta lo stesso bucket Cloud Storage con volumi permanenti diversi {:#mount-same-bucket-different-pv}. Disponibile a partire dalla versione 1.33.0-gke.1932000 di GKE
Per montare lo stesso bucket Cloud Storage utilizzando diversi volumi permanenti, devi utilizzare un volumeHandle
univoco per ogni volume permanente. Nell'oggetto PersistentVolume, utilizza il formato BUCKET_NAME:UNIQUE_SUFFIX
per il campo volumeHandle
. Sostituisci BUCKET_NAME
con il nome del tuo bucket e UNIQUE_SUFFIX
con l'identificatore univoco che preferisci. Ad esempio: myBucket:xyz123
.
Un caso d'uso di esempio potrebbe essere il montaggio dello stesso bucket Cloud Storage sullo stesso nodo più volte, ognuna con il proprio insieme distinto di opzioni di montaggio.
Risoluzione dei problemi
Se devi risolvere i problemi di Cloud Storage FUSE, puoi impostare il
flag log-severity
su TRACE
. Imposta il flag nella sezione args
delle specifiche del container del driver nel file YAML di deployment. In questo modo, l'attributo
gcsfuseLoggingSeverity
volume viene impostato automaticamente su trace.
Per altri suggerimenti per la risoluzione dei problemi, consulta la Guida alla risoluzione dei problemi nella documentazione del progetto GitHub.
Passaggi successivi
- Scopri come ottimizzare le prestazioni del driver CSI di Cloud Storage FUSE.
- Esplora altri esempi di utilizzo del driver CSI su GitHub.
- Scopri di più su Cloud Storage FUSE.