Utilizzare le condivisioni multiple di Filestore per Google Kubernetes Engine

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa guida illustra come utilizzare Filestore Multishares per Google Kubernetes Engine con il driver CSI Filestore Filestore.

Prima di iniziare

  1. Prima di iniziare, completa i passaggi di configurazione necessari per utilizzare Filestore.

  2. Abilita il Driver CSI GKE Filestore (GKE 1.23 o versioni successive).

Utilizzare le condivisioni multiple di Filestore con più applicazioni

Questa sezione mostra come eseguire il deployment di due applicazioni, una Deployment e una Statefulset, ciascuna utilizzando un StorageClass di Multishares Filestore. Puoi anche vedere come GKE bina pacchetti (un processo per pacchettizzare in modo efficiente le applicazioni nei tuoi nodi GKE) tutti i volumi nella stessa istanza Filestore Enterprise sottostante.

  1. Utilizza l'oggetto StorageClass fornito da GKE o crea un valore StorageClass personalizzato.

    Dopo l'abilitazione del driver CSI GKE Filestore, gli utenti possono accedere all'oggetto StorageClass multi-share fornito da GKE enterprise-multishare-rwx con la seguente configurazione. Fai riferimento a questo oggetto StorageClass, il driver CSI GKE Filestore utilizza il provisioning del volume dinamico per creare automaticamente volumi permanenti (PV) per le nuove richieste di volume permanente (PVC) come richiesto dalla domanda del carico di lavoro GKE:

    $ kubectl describe sc enterprise-multishare-rwx
    Name:                  enterprise-multishare-rwx
    IsDefaultClass:        No
    Annotations:           components.gke.io/component-name=filestorecsi,components.gke.io/component-version=0.7.2,components.gke.io/layer=addon
    Provisioner:           filestore.csi.storage.gke.io
    Parameters:            instance-storageclass-label=enterprise-multishare-rwx,multishare=true,tier=enterprise
    AllowVolumeExpansion:  True
    MountOptions:          <none>
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                <none>
    

    Se necessario, gli utenti possono creare un oggetto StorageClass personalizzato in base a questo modello, tenendo presente i seguenti requisiti di denominazione:

  2. Crea un deployment con più repliche di pod utilizzando una singola PVC.

    Crea un file YAML di configurazione simile al seguente:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      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: test-pvc-fs
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: enterprise-multishare-rwx
      resources:
        requests:
          storage: 100Gi
    
    EOF
    
  3. Controlla le repliche dei pod.

    a. Dalla riga di comando, esegui il comando seguente per controllare lo stato PVC:

      $ kubectl get pvc
    

    Dovresti vedere una risposta simile alla seguente:

      NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
      test-pvc-fs   Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx  35m
    

    b. Dalla riga di comando, esegui il comando seguente per controllare lo stato del pod:

      $ kubectl get pod
    

    Dovresti vedere una risposta simile alla seguente:

      NAME                                     READY   STATUS    RESTARTS   AGE
      web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          35m
      web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          35m
      web-server-multishare-76c9ffb4b5-csdbd   1/1     Running   0          35m
      web-server-multishare-76c9ffb4b5-rgx82   1/1     Running   0          35m
      web-server-multishare-76c9ffb4b5-zjl27   1/1     Running   0          35m
    
  4. Scala le repliche.

    a. Dalla riga di comando, esegui il comando seguente per modificare il deployment:

      $ kubectl edit deployment web-server-multishare
    

    b. Il file si aprirà nella riga di comando. Trova il campo spec.replicas e aggiorna il valore in 10.

    c. Dalla riga di comando, esegui il comando seguente per visualizzare la modifica applicata:

      $ kubectl get pod
    

    Dovresti vedere una risposta simile alla seguente:

      NAME                                     READY   STATUS    RESTARTS   AGE
      web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          36m
      web-server-multishare-76c9ffb4b5-5ctkf   1/1     Running   0          3s
      web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          36m
      web-server-multishare-76c9ffb4b5-8dwmw   1/1     Running   0          2s
      web-server-multishare-76c9ffb4b5-csdbd   1/1     Running   0          36m
      web-server-multishare-76c9ffb4b5-lndcq   1/1     Running   0          2s
      web-server-multishare-76c9ffb4b5-rgx82   1/1     Running   0          36m
      web-server-multishare-76c9ffb4b5-vtd6p   1/1     Running   0          3s
      web-server-multishare-76c9ffb4b5-xm49s   1/1     Running   0          3s
      web-server-multishare-76c9ffb4b5-zjl27   1/1     Running   0          36m
    

    Nota che sono in esecuzione dieci pod.

    d. Dalla riga di comando, esegui il comando seguente:

      $ kubectl get deployment
    

    Dovresti vedere una risposta simile alla seguente:

      NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
      web-server-multishare   10/10   10           10          36m
    

    . Dalla riga di comando, esegui il comando seguente per controllare lo stato associato alla PVC:

      $ kubectl get pvc
    

    Dovresti vedere una risposta simile alla seguente:

      NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
      test-pvc-fs   Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx  37m
    

    f. Dalla riga di comando, esegui il comando seguente per modificare il deployment:

      $ kubectl edit deployment web-server-multishare
    

    G. Il file si aprirà nella riga di comando. Trova il campo spec.replicas e aggiorna il valore in 2.

    h Dalla riga di comando, esegui il comando seguente per visualizzare la modifica applicata:

      $ kubectl get pod
    

    Dovresti vedere una risposta simile alla seguente:

      NAME                                     READY   STATUS    RESTARTS   AGE
      web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          38m
      web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          38m
    
  5. Eseguire il deployment di un oggetto StatefulSet.

    Eseguire il deployment di una seconda applicazione che condivide l'istanza Filestore sottostante.

    Per farlo, esegui il provisioning di 200 GiB di spazio e convalida che utilizzi la stessa istanza Filestore sottostante della prima applicazione.

    Potrai quindi scalare l'applicazione su nove repliche utilizzando 900 GiB in totale (9 repliche con 100 GiB ciascuno) e verificare che GKE utilizzi la stessa istanza Filestore condividendo l'istanza.

    Crea un file YAML di configurazione simile al seguente:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: k8s.gcr.io/nginx-slim:0.8
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: test-pvc-multishare
              mountPath: /usr/share/nginx/html
      volumeClaimTemplates:
      - metadata:
          name: test-pvc-multishare
        spec:
          accessModes: [ "ReadWriteMany" ]
          storageClassName: enterprise-multishare-rwx
          resources:
            requests:
              storage: 100Gi
    
    EOF
    
    
  6. Controlla le repliche e i volumi Statefulset.

    Dalla riga di comando, esegui il comando seguente:

    $ kubectl get pod
    

    Dovresti vedere una risposta simile alla seguente:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-0                                    1/1     Running   0          4m48s
    web-1                                    1/1     Running   0          3m32s
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          57m
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          57m
    

    Nota che i primi due pod sono associati allo StatefulSet. Gli ultimi due pod sono associati al deployment.

    Dalla riga di comando, esegui il comando seguente:

    $ kubectl get statefulset
    

    Dovresti vedere una risposta simile alla seguente:

    NAME   READY   AGE
    web    2/2     2m8s
    

    Dalla riga di comando, esegui il comando seguente:

    $ kubectl get pvc
    

    Dovresti vedere una risposta simile alla seguente:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs                 Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx   54m
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   100Gi      RWX            enterprise-multishare-rwx   114s
    test-pvc-multishare-web-1   Bound    pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe   100Gi      RWX            enterprise-multishare-rwx   38s
    

    La PVC test-pvc-fs è associata al deployment web-server-multishare.

    Le PVC test-pvc-multishare-web-0 e test-pvc-multishare-web-1 sono associate allo Statefulset.

  7. Scala le repliche Statefulset.

    Aumenta il numero di repliche a nove. Con l'aumento del conteggio, vengono create le PVC corrispondenti.

    a. Dalla riga di comando, esegui il comando seguente:

    $ kubectl  edit statefulset web
    

    b. Il file si aprirà nella riga di comando. Trova il campo spec.replicas e aggiorna il valore in 9.

    c. Dalla riga di comando, esegui il comando seguente per visualizzare la modifica applicata:

    $ kubectl get statefulset
    

    Dovresti vedere una risposta simile alla seguente:

    NAME   READY   AGE
    web    9/9     13m
    

    d. Dalla riga di comando, esegui il comando seguente:

    $ kubectl get deployment
    

    Dovresti vedere una risposta simile alla seguente:

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    web-server-multishare   2/2     2            2           65m
    

    . Dalla riga di comando, esegui il comando seguente:

    $ kubectl get pvc
    

    Dovresti vedere una risposta simile alla seguente:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs                 Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx   65m
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   100Gi      RWX            enterprise-multishare-rwx   13m
    test-pvc-multishare-web-1   Bound    pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe   100Gi      RWX            enterprise-multishare-rwx   12m
    test-pvc-multishare-web-2   Bound    pvc-3fcbd132-939f-4364-807a-7c8ac6a3e64e   100Gi      RWX            enterprise-multishare-rwx   5m12s
    test-pvc-multishare-web-3   Bound    pvc-5894afa5-2502-4ee7-9d5c-b7378cb85479   100Gi      RWX            enterprise-multishare-rwx   4m57s
    test-pvc-multishare-web-4   Bound    pvc-ebbe452b-bc8f-4624-a830-a2094cce0d67   100Gi      RWX            enterprise-multishare-rwx   4m36s
    test-pvc-multishare-web-5   Bound    pvc-5a73a698-d174-44cb-a3a1-e767966c3417   100Gi      RWX            enterprise-multishare-rwx   4m20s
    test-pvc-multishare-web-6   Bound    pvc-102da6a9-2ca6-4f9e-9896-8fe14709db7a   100Gi      RWX            enterprise-multishare-rwx   3m55s
    test-pvc-multishare-web-7   Bound    pvc-160e81cd-c5bf-4ae6-966e-518e8249e02d   100Gi      RWX            enterprise-multishare-rwx   3m38s
    test-pvc-multishare-web-8   Bound    pvc-9b52d773-2e9a-40de-881c-dc06945ba3d7   100Gi      RWX            enterprise-multishare-rwx   118s
    
  8. Verifica lo stato dell'istanza Filestore.

    Ora hai un deployment con due pod di replica e uno StatefulSet con nove pod di replica e un totale di dieci PVC, ciascuno di 100 GiB. Tutti i volumi sono pacchettizzati in un'unica istanza Multishare Filestore.

    a. Dalla riga di comando, esegui il seguente comando instances list:

    $  gcloud beta filestore instances list --project=YOUR_PROJECT_ID --region=REGION
    

    dove:

    • YOUR_PROJECT_ID è il nome del progetto in uso. Ad esempio: my-project.

    • REGION è il nome dell'area geografica utilizzata. Ad esempio: us-central1.

    Dovresti vedere una risposta simile alla seguente:

    INSTANCE_NAME                            LOCATION     TIER        CAPACITY_GB  FILE_SHARE_NAME  IP_ADDRESS   STATE  CREATE_TIME
    fs-a767cef8-738e-4c8e-b70b-09cbb872d016  us-central1  ENTERPRISE  1024         N/A              10.192.53.2  READY  2022-06-21T21:15:30
    

    b. Dalla riga di comando, esegui il seguente comando instances describe:

    $ gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION
    capacityGb: '1024'
    capacityStepSizeGb: '256'
    createTime: '2022-06-21T21:15:30.464237089Z'
    labels:
      storage_gke_io_created-by: filestore_csi_storage_gke_io
      storage_gke_io_storage-class-id: enterprise-multishare-rwx
    maxCapacityGb: '10240'
    maxShareCount: '10'
    multiShareEnabled: true
    name: projects/YOUR_PROJECT_ID/locations/REGION/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016
    networks:
    - connectMode: DIRECT_PEERING
      ipAddresses:
      - 10.192.53.2
      modes:
      - MODE_IPV4
      network: csi-filestore-test-network
      reservedIpRange: 10.192.53.0/26
    state: READY
    tier: ENTERPRISE
    
    

    dove:

    • YOUR_PROJECT_ID è il nome del progetto in uso. Ad esempio: my-project.

    • REGION è il nome dell'area geografica utilizzata. Ad esempio: us-central1.

Espandi una PVC e verifica l'istanza di Filestore

Questa sezione mostra come espandere una PVC esistente e verificare le dimensioni dell'istanza di Filestore.

  1. Espandi una PVC.

    Le PVC (supportate dalle condivisioni in un'istanza Multishare Filestore) possono raggiungere una dimensione massima di 1 TiB. Per verificare questa condizione, espandi uno dei volumi associati allo Statefulset mentre il pod è in uso.

    Dalla riga di comando, esegui il comando seguente per controllare le dimensioni correnti della PVC della replica 0:

    $ kubectl get pvc test-pvc-multishare-web-0 -o json
    {
        "apiVersion": "v1",
        "kind": "PersistentVolumeClaim",
        "metadata": {
            "annotations": {
                "pv.kubernetes.io/bind-completed": "yes",
                "pv.kubernetes.io/bound-by-controller": "yes",
                "volume.beta.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io",
                "volume.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io"
            },
            "creationTimestamp": "2022-06-21T22:07:42Z",
            "finalizers": [
                "kubernetes.io/pvc-protection"
            ],
            "labels": {
                "app": "nginx"
            },
            "name": "test-pvc-multishare-web-0",
            "namespace": "default",
            "resourceVersion": "48395",
            "uid": "7aa21b5a-5343-4547-b7d7-414c16af15a7"
        },
        "spec": {
            "accessModes": [
                "ReadWriteMany"
            ],
            "resources": {
                "requests": {
                    "storage": "100Gi"
                }
            },
            "storageClassName": "enterprise-multishare-rwx",
            "volumeMode": "Filesystem",
            "volumeName": "pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7"
        },
        "status": {
            "accessModes": [
                "ReadWriteMany"
            ],
            "capacity": {
                "storage": "100Gi"
            },
            "phase": "Bound"
        }
    }
    
    
  2. Dalla riga di comando, esegui il comando seguente per aumentare la dimensione a 500 GiB:

    $ kubectl edit pvc test-pvc-multishare-web-0
    
    
  3. Il file si aprirà nella riga di comando. Trova il campo spec.resources.requests.storage e aggiorna il valore in 500Gi.

  4. Dalla riga di comando, esegui il comando seguente per visualizzare la modifica applicata:

    $ kubectl get pvc test-pvc-multishare-web-0
    

    Dovresti vedere una risposta simile alla seguente:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   500Gi      RWX            enterprise-multishare-rwx   28m
    

    Il driver CSI Filestore ha accettato la richiesta, espandendo prima l'istanza Filestore sottostante e quindi espandendo la condivisione tramite il supporto della PVC.

    In particolare, il driver CSI Filestore ha ampliato automaticamente l'istanza a 1536 Gi per adattarla alle nuove dimensioni di condivisione di 500 Gi.

  5. Dalla riga di comando, esegui il comando instances describe seguente per verificare la capacità dell'istanza Filestore:

    $ gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION
    capacityGb: '1536'
    capacityStepSizeGb: '256'
    createTime: '2022-06-21T21:15:30.464237089Z'
    labels:
      storage_gke_io_created-by: filestore_csi_storage_gke_io
      storage_gke_io_storage-class-id: enterprise-multishare-rwx
    maxCapacityGb: '10240'
    maxShareCount: '10'
    multiShareEnabled: true
    name: projects/YOUR_PROJECT_ID/locations/us-central1/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016
    networks:
    - connectMode: DIRECT_PEERING
      ipAddresses:
      - 10.192.53.2
      modes:
      - MODE_IPV4
      network: csi-filestore-test-network
      reservedIpRange: 10.192.53.0/26
    state: READY
    tier: ENTERPRISE
    

    dove:

    • YOUR_PROJECT_ID è il nome del progetto in uso. Ad esempio: my-project.

    • REGION è il nome dell'area geografica utilizzata. Ad esempio: us-central1.

Provisioning dinamico su un VPC condiviso

Il driver CSI Filestore per GKE supporta il provisioning dinamico dei volumi in un progetto di servizio in un VPC condiviso. La sezione seguente mostra come utilizzare il driver CSI Filestore per eseguire il provisioning dinamico dei volumi sulle istanze Multishare Filestore in un progetto di servizio in una rete VPC condiviso.

  1. Completa i passaggi per la configurazione di una rete VPC condivisa e dell'accesso privato ai servizi.

  2. Creare un oggetto StorageClass per il provisioning dinamico dei volumi supportati da un'istanza Multishares di Filestore su un VPC condiviso.

    Esegui questo comando per eseguire il deployment di una risorsa StorageClass:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-filestore-multishare-sharedvpc
    provisioner: filestore.csi.storage.gke.io
    parameters:
      network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
      connect-mode: PRIVATE_SERVICE_ACCESS
      tier: enterprise
      multishare: "true"
    allowVolumeExpansion: true
    
    EOF
    

    dove:

    • HOST_PROJECT_ID è l'ID o il nome del progetto dell'host della rete VPC condiviso. Ad esempio: my-host-project.

    • SHARED_VPC_NAME il nome della rete VPC condivisa. Ad esempio: my-shared-vpc.

    Se vuoi eseguire il deployment della risorsa all'interno di un intervallo di indirizzi IP riservati, aggiungi la seguente riga ai parametri utilizzati nel comando:

    reserved-ip-range: RESERVED_NAME
    

    Dove RESERVED_NAME è il nome dell'intervallo di indirizzi IP riservati in cui è possibile eseguire il provisioning di un'istanza Filestore. Ad esempio, filestore-reserved-ip-range. Se viene specificato un intervallo IP riservato, deve essere un intervallo di indirizzi denominato anziché un valore CIDR diretto.

    Per ulteriori informazioni, consulta la pagina relativa all'allocazione degli intervalli di indirizzi IP o alla configurazione di un intervallo di indirizzi IP riservati. Per un esempio di come creare un nome riservato utilizzando la console Google Cloud, consulta Creare un'allocazione degli indirizzi IP.

  3. Crea un deployment.

    Esegui il comando seguente per creare una risorsa Deployment:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      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: test-pvc-fs-sharedvpc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs-sharedvpc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: csi-filestore-multishare-sharedvpc
      resources:
        requests:
          storage: 100Gi
    
    EOF
    
    

Istanze Filestore abilitate per CMEK

Puoi creare volumi GKE ospitati su istanze Multishare Filestore abilitate per CMEK. In questa sezione vedrai come configurare una chiave di crittografia gestita dal cliente (CMEK) per la tua istanza Filestore.

In StorageClass puoi fornire i dettagli della chiave gestita dal cliente. Qualsiasi istanza creata in modo dinamico dal driver CSI Filestore, che fa riferimento a questo oggetto StorageClass, avrà abilitato CMEK.

  1. Creare un oggetto StorageClass con CMEK.

    a. Esegui questo comando:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-filestore-multishare-cmek
    provisioner: filestore.csi.storage.gke.io
    parameters:
      tier: enterprise
      multishare: "true"
      instance-encryption-kms-key: projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
    allowVolumeExpansion: true
    
    EOF
    

    dove:

    • KEY_PROJECT_ID è il nome del progetto in cui si trova la chiave. Ad esempio: my-key-project.

    • REGION è il nome dell'area geografica utilizzata. Ad esempio: us-central1.

    • RING_NAME il nome del keyring. Ad esempio, my-key-ring-name.

    • KEY_NAME il nome della chiave. Ad esempio, my-key-name.

  2. Crea un deployment.

    b. Esegui il comando seguente per creare una risorsa Deployment:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      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: test-pvc-fs-cmek
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs-cmek
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: csi-filestore-multishare-cmek
      resources:
        requests:
          storage: 100Gi
    
    EOF
    
    

Mappa le PVC alle istanze Filestore

In questa sezione, vedrai come mappare le PVC alle istanze Filestore.

Con le istanze Multishare Filestore, ogni PVC viene ospitata in un'istanza del Filestore dal driver CSI Filestore. I dettagli dell'istanza Filestore sottostante che ospita il volume e la quota che rappresenta il volume Kubernetes vengono acquisiti nel campo volumeHandle della specifica dei volumi permanenti. Il formato dell'handle del volume è il seguente:

   modeMultishare/<storageclass-prefix>/<project>/<region>/<filestore-instance-name>/<filestore-share-name>

Il seguente comando kubectl può essere utilizzato per determinare rapidamente le mappature tra una PVC, un PV, un'istanza di Filestore e una condivisione Filestore.

Dalla riga di comando, esegui il comando seguente:

   $ kubectl get pv -o jsonpath='{range .items[*]}{"pv="}{.metadata.name}{",pvc="}{.spec.claimRef.name}{",volumeHandle="}{.spec.csi.volumeHandle}{"\n"}{end}'

Dovresti vedere una risposta simile alla seguente:

   pv=pvc-67ad9abd-f25e-4130-b7ca-64d28bd29525,pvc=test-pvc-multishare,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_67ad9abd_f25e_4130_b7ca_64d28bd29525

   pv=pvc-c80f4de0-9916-4957-b8ae-b21206650ac0,pvc=test-pvc-fs-sharedvpc,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_c80f4de0_9916_4957_b8ae_b21206650ac0

dove:

  • YOUR_PROJECT_ID è il nome del progetto utilizzato. Ad esempio: my-project.

Nota che due volumi permanenti nel cluster sono ospitati in una singola istanza Filestore.

Passaggi successivi