Questa guida mostra come utilizzare i volumi permanenti Kubernetes basati sui 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 conosci già i PersistentVolume e vuoi mantenere la coerenza con i deployment esistenti che si basano su questo tipo di risorsa.
Questa guida è rivolta agli amministratori e agli 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 Kubernetes, i pod Kubernetes e i bucket Cloud Storage.
Se vuoi un'interfaccia basata su pod semplificata che non richiede esperienza precedente con i volumi permanenti Kubernetes, consulta Montare i bucket Cloud Storage come volumi effimeri CSI.
Prima di iniziare
Assicurati di aver completato i seguenti prerequisiti:
- Scopri 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
- Configurare 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 gli PersistentVolumeClaims.
L'utilizzo di un volume permanente basato su un bucket Cloud Storage prevede le seguenti operazioni:
Definizione dello spazio di archiviazione: definisci un volume permanente nel cluster GKE, incluso il driver CSI da utilizzare e gli eventuali parametri richiesti. Per il driver CSI di Cloud Storage FUSE, specifica il nome del bucket e altri dettagli pertinenti.
Facoltativamente, puoi ottimizzare il rendimento del driver CSI utilizzando la funzionalità di 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 del modello, in particolare per le letture di dimensioni superiori a 1 GB.
Richiesta di avocazione del driver: quando un PersistentVolumeClaim richiede spazio di archiviazione corrispondente alla specifica del PersistentVolume, GKE richiama il driver CSI Cloud Storage FUSE.
Montaggio del bucket: il driver CSI monta il bucket sul nodo su cui è pianificato il pod richiedente. Ciò rende i contenuti del bucket accessibili al pod come directory nel file system locale del pod. Per perfezionare il modo in cui i bucket vengono montati 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.
Riaggancio: se il pod viene riavviato o viene riprogrammato su un altro nodo, il driver CSI rimonta lo stesso bucket sul nuovo nodo, garantendo l'accessibilità ai dati.
Crea un PersistentVolume
Crea un manifest del 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 specificato durante la configurazione dell'accesso ai bucket Cloud Storage. Puoi
specificare un'underscore (
_
) per montare tutti i bucket a cui può accedere il servizio account Kubernetes. Per scoprire di più, consulta Montaggio dinamico nella documentazione di Cloud Storage FUSE.
Il file manifest di esempio mostra le seguenti impostazioni obbligatorie:
spec.csi.driver
: utilizzagcsfuse.csi.storage.gke.io
come nome del driver CSI.
Se vuoi, puoi modificare le seguenti 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 specificato durante la configurazione dell'accesso ai bucket Cloud Storage.
Puoi specificare un'underscore (
_
) per montare tutti i bucket a cui può accedere il servizio account Kubernetes. Per scoprire di più, consulta 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 specificato durante la configurazione dell'accesso ai bucket Cloud Storage.
Puoi specificare un'underscore (
_
) per montare tutti i bucket a cui può accedere il servizio account Kubernetes. Per scoprire di più, consulta 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 PersistentVolume a un PersistentVolumeClaim, controlla queste impostazioni di configurazione:
- I campi
spec.storageClassName
nei manifest di PersistentVolume e PersistentVolumeClaim devono corrispondere. Il valore 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 aspec.resources.requests.storage
nel manifest del PersistentVolumeClaim. Poiché i bucket Cloud Storage non hanno limiti di dimensione, puoi inserire qualsiasi numero per la capacità, che però 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 del pod con la seguente specifica:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-static-pvc namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/ephemeral-storage-limit: "50Gi" 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 dell'account ServiceAccount Kubernetes che hai creato durante la configurazione dell'accesso ai bucket Cloud Storage.
Il file manifest di esempio mostra le seguenti impostazioni obbligatorie:
metadata.annotations
: l'annotazionegke-gcsfuse/volumes: "true"
è obbligatoria. Consulta Configurare il contenitore sidecar per le annotazioni facoltative.
Se vuoi, puoi modificare le seguenti variabili:
spec.containers[n].volumeMonts[n].readOnly
: specifica true se solo i mount dei volumi specifici sono in sola lettura.spec.volumes[n].persistentVolumeClaim.readOnly
: specifica true se tutti i mount dei volumi sono in sola lettura.
Applica il manifest al cluster:
kubectl apply -f POD_FILE_PATH
Sostituisci POD_FILE_PATH con il percorso del file YAML.
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
della specifica del contenitore del driver nel file YAML del deployment. Di conseguenza, l'attributo volumegcsfuseLoggingSeverity
viene impostato automaticamente su traccia.
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 per il driver CSI di Cloud Storage FUSE.
- Esplora altri esempi per l'utilizzo del driver CSI su GitHub.
- Scopri di più su Cloud Storage FUSE.