Montare i bucket Cloud Storage come volumi permanenti


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:

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:

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

  2. Richiamo del driver: quando un PersistentVolumeClaim richiede spazio di archiviazione corrispondente alla specifica di PersistentVolume, GKE richiama il driver CSI di Cloud Storage FUSE.

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

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

  1. 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: utilizza gcsfuse.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.
  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 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 campo spec.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.
  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 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:

    Il file manifest di esempio mostra queste impostazioni obbligatorie:

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