Montare i bucket Cloud Storage come volumi permanenti


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:

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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

  1. 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: utilizza gcsfuse.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.
  2. Applica il manifest al cluster:

    kubectl apply -f PV_FILE_PATH
    

    Sostituisci PV_FILE_PATH con il percorso del file YAML.

Crea un PersistentVolumeClaim

  1. 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 a spec.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.
  2. 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

  1. 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:

    Il file manifest di esempio mostra le seguenti impostazioni obbligatorie:

    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.
  2. 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