Accedi alle istanze Filestore con il driver CSI Filestore

Il driver CSI Filestore è il modo principale per utilizzare le istanze di Filestore con Google Kubernetes Engine (GKE). Il driver CSI Filestore fornisce un'esperienza completamente gestita grazie al driver CSI Google Cloud Filestore open source.

La versione del driver CSI Filestore è legata ai numeri di versione secondari di Kubernetes. La versione del driver CSI di Filestore è in genere il driver più recente disponibile al momento del rilascio della versione secondaria di Kubernetes. I driver vengono aggiornati automaticamente quando viene eseguito l'upgrade del cluster alla patch GKE più recente.

Vantaggi

Il driver CSI Filestore offre i seguenti vantaggi:

  • Hai accesso all'archiviazione NFS completamente gestita tramite le API Kubernetes (kubectl).

  • Puoi utilizzare il driver CSI di GKE Filestore per eseguire dinamicamente il provisioning dei PersistentVolume.

  • Puoi utilizzare snapshot di volumi con il driver CSI GKE Filestore. Gli snapshot di volumi CSI possono essere utilizzati per creare backup Filestore.

    Un backup di Filestore crea una copia differenziale della condivisione file, che include tutti i dati e i metadati dei file, e la archivia separatamente dall'istanza. Puoi ripristinare questa copia solo in una nuova istanza Filestore. Il ripristino in un'istanza Filestore esistente non è supportato. Puoi utilizzare l'API CSI Volume Snapshot per attivare i backup di Filestore, aggiungendo un campo type:backup nella classe di snapshot del volume.

  • Puoi utilizzare l'espansione del volume con il driver CSI di GKE Filestore. L'espansione del volume consente di ridimensionare la capacità del volume.

  • Puoi accedere alle istanze Filestore esistenti utilizzando le istanze Filestore di cui è stato eseguito il pre-provisioning nei carichi di lavoro Kubernetes. Puoi anche creare o eliminare dinamicamente le istanze Filestore e utilizzarle nei carichi di lavoro Kubernetes con un elemento StorageClass o un deployment.

  • Supporta Multishares Filestore per GKE. Questa funzionalità consente di creare un'istanza Filestore e allocare contemporaneamente più oggetti PersistentVolume montati su NFS più piccoli su un numero qualsiasi di cluster GKE.

Requisiti

  • Per utilizzare il driver CSI Filestore, i cluster devono utilizzare GKE versione 1.21 o successiva.
  • Per utilizzare la funzionalità di condivisione multipla di Filestore, i cluster devono utilizzare GKE versione 1.23 o successiva.
  • Il driver CSI Filestore è supportato per i cluster che utilizzano solo Linux. I nodi di Windows Server non sono supportati.
  • La dimensione minima dell'istanza per Filestore è di almeno 1 TiB. La dimensione minima dell'istanza dipende dal livello di servizio Filestore selezionato. Per saperne di più, consulta Livelli di servizio.
  • Filestore utilizza il protocollo del file system NFSv3 sull'istanza Filestore e supporta qualsiasi client compatibile con NFSv3.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Cloud Filestore e l'API Google Kubernetes Engine.
  • Abilita le API
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Abilita il driver CSI Filestore su un nuovo cluster

Per abilitare il driver CSI del driver CSI Filestore quando crei un nuovo cluster Standard, segui questi passaggi con Google Cloud CLI o con la console Google Cloud.

gcloud

gcloud container clusters create CLUSTER_NAME \
    --addons=GcpFilestoreCsiDriver \
    --cluster-version=VERSION

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del tuo cluster.
  • VERSION: il numero di versione di GKE. Per utilizzare questa funzionalità, devi selezionare una versione 1.21 o successiva. In alternativa, puoi utilizzare il flag --release-channel e specificare un canale di rilascio.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Scegli la modalità cluster Standard, quindi fai clic su Configura.

  4. Configura il cluster come preferisci.

  5. Nel riquadro di navigazione, in Cluster, fai clic su Funzionalità.

  6. Seleziona la casella di controllo Abilita il driver CSI Filestore.

  7. Fai clic su Crea.

Se vuoi utilizzare Filestore su una rete VPC condivisa, consulta Abilitare il driver CSI Filestore su un nuovo cluster con VPC condiviso.

Dopo aver abilitato il driver CSI Filestore, puoi utilizzarlo nei volumi Kubernetes utilizzando il nome del driver e del provisioner: filestore.csi.storage.gke.io.

Abilita il driver CSI Filestore su un cluster esistente

Per abilitare il driver CSI Filestore nei cluster esistenti, utilizza Google Cloud CLI o la console Google Cloud.

Per abilitare il driver su un cluster esistente, completa i seguenti passaggi:

gcloud

gcloud container clusters update CLUSTER_NAME \
   --update-addons=GcpFilestoreCsiDriver=ENABLED

Sostituisci CLUSTER_NAME con il nome del cluster esistente.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. In Funzionalità, accanto al campo Driver CSI Filestore, fai clic su Modifica driver CSI Filestore.

  4. Seleziona la casella di controllo Abilita il driver CSI Filestore.

  5. Fai clic su Salva modifiche.

Disabilita il driver CSI Filestore

Puoi disabilitare il driver CSI Filestore su un cluster Autopilot o Standard esistente utilizzando Google Cloud CLI o la console Google Cloud.

gcloud

gcloud container clusters update CLUSTER_NAME \
    --update-addons=GcpFilestoreCsiDriver=DISABLED \
    --region REGION

Sostituisci i seguenti valori:

  • CLUSTER_NAME: il nome del cluster esistente.
  • REGION: la regione del cluster (ad esempio us-central1).

Console

  1. Nella console Google Cloud, vai al menu di Google Kubernetes Engine.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. In Funzionalità, accanto al campo Driver CSI Filestore, fai clic su Modifica driver CSI Filestore.

  4. Deseleziona la casella di controllo Abilita il driver CSI Filestore.

  5. Fai clic su Salva modifiche.

Accedi alle istanze Filestore preesistenti utilizzando il driver CSI Filestore

Questa sezione descrive il processo tipico per utilizzare un volume Kubernetes per accedere a istanze Filestore preesistenti utilizzando il driver CSI Filestore in GKE:

Crea un PersistentVolume e un PersistentVolumeClaim per accedere all'istanza

  1. Crea un file manifest come quello mostrato nell'esempio seguente e assegnagli il nome preprov-filestore.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: PV_NAME
    spec:
      storageClassName: ""
      capacity:
        storage: 1Ti
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: filestore.csi.storage.gke.io
        volumeHandle: "modeInstance/FILESTORE_INSTANCE_LOCATION/FILESTORE_INSTANCE_NAME/FILESTORE_SHARE_NAME"
        volumeAttributes:
          ip: FILESTORE_INSTANCE_IP
          volume: FILESTORE_SHARE_NAME
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      volumeName: PV_NAME
      resources:
        requests:
          storage: 1Ti
    
  2. Per creare le risorse PersistentVolumeClaim e PersistentVolume in base al file manifest preprov-filestore.yaml, esegui questo comando:

    kubectl apply -f preprov-filestore.yaml
    

Quindi, passa alla creazione di un deployment che utilizzi il volume.

Crea un volume utilizzando il driver CSI Filestore

Le seguenti sezioni descrivono il processo tipico per l'utilizzo di un volume Kubernetes supportato da un driver CSI Filestore in GKE:

Creazione di un oggetto StorageClass

Dopo aver abilitato il driver CSI Filestore, GKE installa automaticamente le seguenti StorageClasses per il provisioning delle istanze Filestore:

Puoi trovare il nome della StorageClass installata eseguendo questo comando:

kubectl get sc

Puoi anche installare un StorageClass diverso che utilizzi il driver CSI Filestore aggiungendo filestore.csi.storage.gke.io nel campo provisioner.

  1. Salva il seguente manifest con il nome filestore-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: filestore-example
    provisioner: filestore.csi.storage.gke.io
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    parameters:
      tier: standard
      network: default
    

    Dal file manifest, considera la seguente configurazione dei parametri:

    • L'impostazione di volumeBindingMode su Immediate consente di iniziare immediatamente il provisioning del volume. Questo è possibile perché le istanze Filestore sono accessibili da qualsiasi zona. Pertanto, GKE non ha bisogno di conoscere la zona in cui è pianificato il pod, a differenza del disco permanente di Compute Engine. Se il criterio è impostato su WaitForFirstConsumer, GKE inizia il provisioning solo dopo la pianificazione del pod. Per ulteriori informazioni, consulta VolumeBindingMode.
    • Qualsiasi livello può essere specificato nel parametro tier (ad esempio standard, premium, zonal o enterprise). + Il parametro network può essere utilizzato durante il provisioning delle istanze Filestore su VPC non predefiniti. I VPC non predefiniti richiedono la configurazione di regole firewall speciali.
  2. Per creare una risorsa StorageClass basata sul file manifest filestore-example-class.yaml, esegui questo comando:

    kubectl create -f filestore-example-class.yaml
    

Se vuoi utilizzare Filestore su una rete VPC condivisa, consulta Creare un oggetto StorageClass quando si utilizza il driver CSI Filestore con VPC condiviso.

Usa un oggetto PersistentVolumeClaim per accedere al volume

Puoi creare una risorsa PersistentVolumeClaim che fa riferimento al driver CSI Filestore StorageClass.

Puoi usare un StorageClass preinstallato o personalizzato.

Il seguente file manifest di esempio crea un PersistentVolumeClaim che fa riferimento al StorageClass denominato filestore-example.

  1. Salva il seguente file manifest con il nome pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: filestore-example
      resources:
        requests:
          storage: 1Ti
    
  2. Per creare una risorsa PersistentVolume basata sul file manifest pvc-example.yaml, esegui questo comando:

    kubectl create -f pvc-example.yaml
    

crea un deployment che consuma il volume

Il seguente manifest di deployment di esempio consuma la risorsa PersistentVolume denominata pvc-example.yaml.

Più pod possono condividere la stessa risorsa PersistentVolumeClaim.

  1. Salva il seguente manifest con il nome filestore-example-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: podpvc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: filestore-example
      resources:
        requests:
          storage: 1Ti
    
  2. Per creare un deployment basato sul file manifest filestore-example-deployment.yaml, esegui questo comando:

    kubectl apply -f filestore-example-deployment.yaml
    
  3. Verifica che il deployment sia stato creato correttamente:

    kubectl get deployment
    

    Il completamento del provisioning delle istanze Filestore potrebbe richiedere un po' di tempo. Prima di questa data, i deployment non mostreranno lo stato READY. Puoi controllare l'avanzamento monitorando lo stato della PVC eseguendo questo comando:

    kubectl get pvc
    

    Una volta completato il provisioning del volume, dovresti vedere che la PVC raggiunge lo stato BOUND.

Etichetta le istanze Filestore

Puoi utilizzare le etichette per raggruppare le istanze correlate e archiviare i metadati relativi a un'istanza. Un'etichetta è una coppia chiave-valore che ti aiuta a organizzare le istanze Filestore. Puoi associare un'etichetta a ogni risorsa, quindi filtrare le risorse in base alle etichette.

Puoi fornire le etichette utilizzando la chiave labels in StorageClass.parameters. Un'istanza Filestore può essere etichettata con informazioni sullo scopo PersistentVolumeClaim/PersistentVolume per cui è stata creata l'istanza. Le chiavi e i valori delle etichette personalizzate devono essere conformi alla convenzione di denominazione delle etichette. Vedi l'esempio di classe di archiviazione Kubernetes per applicare etichette personalizzate all'istanza Filestore.

Utilizza fsgroup con i volumi Filestore

Kubernetes utilizza fsGroup per modificare le autorizzazioni e la proprietà del volume in modo che corrisponda a un valore fsGroup richiesto dall'utente nel campo SecurityContext del pod. Un fsGroup è un gruppo supplementare che si applica a tutti i container in un pod. Puoi applicare un fsgroup ai volumi di cui è stato eseguito il provisioning dal driver CSI Filestore.

Utilizza Filestore con VPC condiviso

Questa sezione illustra come utilizzare un'istanza Filestore su una rete VPC condiviso da un progetto di servizio.

Configura un cluster con VPC condiviso

Per configurare i cluster con una rete VPC condiviso, segui questi passaggi:

  1. Crea un progetto host e di servizio.
  2. Abilita l'API Google Kubernetes Engine sui progetti host e di servizio.
  3. Nel progetto host, crea una rete e una subnet.
  4. Abilita il VPC condiviso nel progetto host.
  5. Nel progetto host, concedi l'associazione del ruolo utente HostServiceAgent per l'account di servizio GKE del progetto di servizio.
  6. Abilita l'accesso privato ai servizi nella VPC condiviso condivisa.

Abilita il driver CSI Filestore su un nuovo cluster con VPC condiviso

Per abilitare il driver CSI Filestore su un nuovo cluster con VPC condiviso, segui questi passaggi:

  1. Verifica le subnet utilizzabili e gli intervalli secondari. Quando crei un cluster, devi specificare una subnet e gli intervalli di indirizzi IP secondari da utilizzare per i pod e il servizio del cluster.

    gcloud container subnets list-usable \
       --project=SERVICE_PROJECT_ID \
       --network-project=HOST_PROJECT_ID
    

    L'output è simile al seguente:

    PROJECT                   REGION       NETWORK     SUBNET  RANGE
    HOST_PROJECT_ID  us-central1  shared-net  tier-1  10.0.4.0/22
    ┌──────────────────────┬───────────────┬─────────────────────────────┐
    │ SECONDARY_RANGE_NAME │ IP_CIDR_RANGE │            STATUS           │
    ├──────────────────────┼───────────────┼─────────────────────────────┤
    │ tier-1-pods          │ 10.4.0.0/14   │ usable for pods or services │
    │ tier-1-services      │ 10.0.32.0/20  │ usable for pods or services │
    └──────────────────────┴───────────────┴─────────────────────────────┘
    
  2. Creare un cluster GKE. Gli esempi seguenti mostrano come utilizzare gcloud CLI per creare un cluster Autopilot o Standard configurato per il VPC condiviso. Gli esempi seguenti utilizzano i nomi di rete, subnet e intervalli descritti nella sezione Creazione di una rete e due subnet.

    Autopilot

    gcloud container clusters create-auto tier-1-cluster \
       --project=SERVICE_PROJECT_ID \
       --region=COMPUTE_REGION \
       --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \
       --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \
       --cluster-secondary-range-name=tier-1-pods \
       --services-secondary-range-name=tier-1-services
    

    Standard

    gcloud container clusters create tier-1-cluster \
       --project=SERVICE_PROJECT_ID \
       --zone=COMPUTE_REGION \
       --enable-ip-alias \
       --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \
       --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \
       --cluster-secondary-range-name=tier-1-pods \
       --services-secondary-range-name=tier-1-services \
       --addons=GcpFilestoreCsiDriver
    
  3. Crea regole firewall per consentire la comunicazione tra nodi, pod e servizi nel cluster. L'esempio seguente mostra come creare una regola firewall denominata my-shared-net-rule-2.

    gcloud compute firewall-rules create my-shared-net-rule-2 \
       --project HOST_PROJECT_ID \
       --network=NETWORK_NAME \
       --allow=tcp,udp \
       --direction=INGRESS \
       --source-ranges=10.0.4.0/22,10.4.0.0/14,10.0.32.0/20
    

    Nell'esempio, i valori IP degli intervalli di origine provengono dal passaggio precedente in cui hai verificato le subnet utilizzabili e gli intervalli secondari.

Crea un oggetto StorageClass quando utilizzi il driver CSI Filestore con VPC condiviso

L'esempio seguente mostra come creare un oggetto StorageClass quando si utilizza il driver CSI di Filestore con un VPC condiviso:

cat <<EOF | kubectl apply -f -

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: filestore-sharedvpc-example
provisioner: filestore.csi.storage.gke.io
parameters:
  network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
  connect-mode: PRIVATE_SERVICE_ACCESS
  reserved-ip-range: RESERVED_IP_RANGE_NAME
allowVolumeExpansion: true

EOF

Sostituisci quanto segue:

  • HOST_PROJECT_ID: l'ID o il nome del progetto host della rete VPC condiviso.
  • SHARED_VPC_NAME: il nome della rete VPC condiviso che hai creato in precedenza.
  • RESERVED_IP_RANGE_NAME: il nome dello specifico intervallo di indirizzi IP riservati in cui eseguire il provisioning dell'istanza Filestore. Questo campo è facoltativo. Se viene specificato un intervallo di indirizzi IP riservati, deve essere un intervallo di indirizzi denominato anziché un valore CIDR diretto.

Se vuoi eseguire il provisioning di un volume supportato dalle istanze multishare di Filestore sui cluster GKE in esecuzione 1.23 o versioni successive, consulta Ottimizzare l'archiviazione con le condivisioni multiple di Filestore per GKE.

Riconnetti i volumi a condivisione singola di Filestore

Se utilizzi Filestore con il livello HDD di base, SSD di base o aziendale (condivisione singola), puoi seguire queste istruzioni per riconnettere l'istanza Filestore esistente ai carichi di lavoro GKE.

  1. Trova i dettagli dell'istanza Filestore di cui è stato eseguito il pre-provisioning seguendo le istruzioni riportate in Ottenere informazioni su un'istanza specifica.

  2. Esegui nuovamente il deployment della specifica del PersistentVolume. Nel campo volumeAttributes, modifica i seguenti campi in modo da utilizzare gli stessi valori dell'istanza Filestore del passaggio 1:

    • ip: modifica questo valore impostando l'indirizzo IP dell'istanza Filestore di cui è stato eseguito il pre-provisioning.
    • volume: modifica questo valore impostando il nome di condivisione dell'istanza Filestore di cui è stato eseguito il pre-provisioning.
  3. Esegui nuovamente il deployment della specifica PersistentVolumeClaim. In volumeName assicurati di fare riferimento allo stesso nome del PersistentVolume del passaggio 2.

  4. Controlla lo stato di associazione dell'oggetto PersistentVolumeClaim e del PersistentVolume eseguendo kubectl get pvc.

  5. Esegui nuovamente il deployment della specifica del pod e assicurati che il pod sia in grado di accedere di nuovo alla condivisione di Filestore.

Passaggi successivi