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 i PersistentVolume e vuoi 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 applicazioni GKE.
Prima di leggere questa pagina, assicurati di avere familiarità con i volumi permanenti di Kubernetes, i pod 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 questi 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 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 dello spazio di 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, devi specificare il nome del bucket e altri dettagli pertinenti.
Facoltativamente, puoi ottimizzare le prestazioni 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 Cloud Storage a cui si accede di frequente su un disco locale più veloce.
Inoltre, puoi utilizzare la funzionalità di download parallelo per velocizzare 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 del 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 ottimizzare 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.
Riassociazione: se il pod viene riavviato o riprogrammato su un altro nodo, il driver CSI rimonta lo stesso bucket sul nuovo nodo, garantendo l'accessibilità ai dati.
Creare 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: NAMESPACESostituisci 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 trattino basso (
_) per montare tutti i bucket a cui l'account di servizio Kubernetes può accedere. Per saperne di più, consulta Montaggio dinamico nella documentazione di Cloud Storage FUSE.
Il manifest di esempio mostra queste impostazioni obbligatorie:
spec.csi.driver: utilizzagcsfuse.csi.storage.gke.iocome nome del driver CSI.
Facoltativamente, puoi modificare queste variabili:
spec.mountOptions: passa le opzioni di montaggio a Cloud Storage FUSE. Specifica i flag come elenco. Per ulteriori dettagli, consulta Opzioni di montaggio dei volumi permanenti.spec.csi.volumeAttributes: passa attributi di 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: NAMESPACESostituisci 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 trattino basso (
_) per montare tutti i bucket a cui l'account di servizio Kubernetes può accedere. Per saperne 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: NAMESPACESostituisci 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 trattino basso (
_) per montare tutti i bucket a cui l'account di servizio Kubernetes può accedere. Per saperne di più, consulta Montaggio dinamico nella documentazione di Cloud Storage FUSE.
Applica il manifest al cluster:
kubectl apply -f PV_FILE_PATHSostituisci PV_FILE_PATH con il percorso del file YAML.
Creare 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-classSostituisci 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:
spec.storageClassName: il valore distorageClassNamenei manifest PersistentVolume e PersistentVolumeClaim deve corrispondere affinché la richiesta venga associata al volume. Il driver CSI di Cloud Storage FUSE non utilizza oggettiStorageClass. Devi solo assicurarti che il campostorageClassNamesia identico in entrambe le risorse. Puoi utilizzare una stringa vuota o non vuota per questo campo; non deve fare riferimento a un oggetto StorageClass esistente e funge solo da etichetta di associazione tra PV e PVC.- I campi
spec.accessModesnei manifest PersistentVolume e PersistentVolumeClaim devono corrispondere. - Il campo
spec.capacity.storagenel manifest PersistentVolume deve corrispondere aspec.resources.requests.storagenel manifest PersistentVolumeClaim. Poiché i bucket Cloud Storage non hanno limiti di dimensioni, puoi inserire qualsiasi numero per la capacità, ma non può essere vuoto.
Applica il manifest al cluster:
kubectl apply -f PVC_FILE_PATHSostituisci 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" 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: trueSostituisci i seguenti valori:
- NAMESPACE: lo spazio dei nomi Kubernetes in cui vuoi eseguire il deployment del pod.
- KSA_NAME: il nome dell'account di servizio Kubernetes che hai creato durante la configurazione dell'accesso ai bucket Cloud Storage.
Il manifest di esempio mostra queste impostazioni obbligatorie:
metadata.annotations: l'annotazionegke-gcsfuse/volumes: "true"è obbligatoria. Consulta Configurare il container sidecar per le annotazioni facoltative.
Facoltativamente, puoi modificare queste variabili:
spec.containers[n].volumeMounts[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 di volumi sono di sola lettura.
Applica il manifest al cluster:
kubectl apply -f POD_FILE_PATHSostituisci POD_FILE_PATH con il percorso del file YAML.
(Facoltativo) Montare lo stesso bucket Cloud Storage con PersistentVolume diversi
A partire dalla versione 1.33.0-gke.1932000 di GKE, puoi utilizzare più PersistentVolume supportati dallo stesso bucket Cloud Storage. In ogni oggetto PersistentVolume, devi utilizzare un volumeHandle univoco nel formato BUCKET_NAME:UNIQUE_SUFFIX.
Un caso d'uso di esempio potrebbe essere il montaggio di PersistentVolume diversi con opzioni di montaggio diverse sullo stesso pod, in cui ogni PersistentVolume fa riferimento allo stesso bucket Cloud Storage.
Risoluzione dei problemi
Per ulteriori informazioni sulla risoluzione dei problemi del driver CSI di Cloud Storage FUSE, 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 di utilizzo del driver CSI su GitHub.
- Scopri di più su Cloud Storage FUSE.