Accedi alle istanze Filestore con il driver CSI Filestore


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

La versione del driver CSI di Filestore è legata ai numeri di versione minori 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 usare il driver CSI di GKE Filestore per eseguire dinamicamente il provisioning dei tuoi PersistentVolume.

  • Puoi utilizzare gli 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 del file, e la archivia separatamente dall'istanza. Puoi ripristinare questa copia solo in una nuova istanza Filestore. Il ripristino su 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 snapshot 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 istanze Filestore e utilizzarle nei carichi di lavoro Kubernetes con un StorageClass o un Deployment.

  • Supporta Multishares di Filestore per GKE. Questa funzionalità consente di creare un'istanza Filestore e di allocare più piccoli oggetti PersistentVolume montati su NFS contemporaneamente 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 di 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 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à è necessario 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 utilizzare il driver 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 alle 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, procedi con la 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 i seguenti StorageClasses per il provisioning delle istanze Filestore:

Puoi trovare il nome del dispositivo StorageClass installato 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 come 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 viene pianificato il pod, a differenza del disco permanente di Compute Engine. Se il criterio viene impostato su WaitForFirstConsumer, GKE avvia il provisioning solo dopo la pianificazione del pod. Per ulteriori informazioni, consulta VolumeBindingMode.
    • Qualsiasi livello Filestore può essere specificato nel parametro tier (ad esempio, BASIC_HDD, BASIC_SSD, ZONAL o ENTERPRISE).
    • Il parametro network può essere utilizzato durante il provisioning di 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 StorageClass del driver CSI di Filestore.

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 come 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 come 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 provisioning delle istanze Filestore potrebbe richiedere un po' di tempo. Prima di questa data, i deployment non riporteranno lo stato READY. Puoi verificare l'avanzamento monitorando lo stato della PVC eseguendo questo comando:

    kubectl get pvc
    

    Al termine del 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 consente di 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 relative al motivo PersistentVolumeClaim/PersistentVolume per cui è stata creata. Le chiavi e i valori delle etichette personalizzate devono rispettare la convenzione di denominazione delle etichette. Vedi l'esempio di classe di archiviazione di 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 in 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.

Configura le regole di accesso IP con volumi Filestore

Filestore supporta le regole di controllo dell'accesso basate su IP per i volumi.

Queste regole possono essere configurate direttamente tramite l'API Filestore o tramite il driver CSI Filestore quando viene creato un volume. Puoi fornire la configurazione selezionata in formato JSON in StorageClass utilizzando il parametro nfs-export-options-on-create.

Il seguente file manifest di esempio mostra come specificare la configurazione:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: filestore-example
provisioner: filestore.csi.storage.gke.io
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
  tier: "enterprise"
  nfs-export-options-on-create: '[
    {
      "accessMode": "READ_WRITE",
      "ipRanges": [
        "10.0.0.0/24"
      ],
      "squashMode": "NO_ROOT_SQUASH"
    },
    {
      "accessMode": "READ_ONLY",
      "ipRanges": [
        "10.0.0.0/28"
      ]
    }
  ]'

Assicurati di specificare almeno un intervallo amministratore con autorizzazioni READ_WRITE e il valore squashMode impostato su NO_ROOT_SQUASH.

Dopo aver creato un volume, puoi modificare le regole di accesso solo tramite l'API 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 un 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 sulla 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 in 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 tuo 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 e gli intervalli secondari utilizzabili.

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 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 creata 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 riservato, 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 che eseguono la versione 1.23 o successive, consulta Ottimizzare l'archiviazione con le condivisioni multishare di Filestore per GKE.

Riconnettere i volumi di condivisione singola di Filestore

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

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

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

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

  4. Controlla lo stato di associazione di PersistentVolumeClaim e PersistentVolume eseguendo kubectl get pvc.

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

Passaggi successivi