Ottimizza lo spazio di archiviazione con Filestore Multishares per GKE

Questa guida mostra come utilizzare le istanze multishare Filestore per Google Kubernetes Engine con il driver CSI di GKE Filestore.

Prima di iniziare

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

  2. Abilita il driver CSI Filestore di GKE, Versione 1.23 o successive:

    • Le versioni dei driver dalla 1.23 alla 1.26 supportano fino a 10 condivisioni per istanza.

    • Le versioni del driver 1.27 o successive supportano fino a 80 condivisioni per istanza.

    Per i requisiti più recenti del driver CSI di GKE Filestore, consulta Accedere alle istanze Filestore con il driver CSI Filestore.

Usa multishare Filestore con più applicazioni

Questa sezione mostra come eseguire il deployment di due applicazioni, una del tipo Deployment e uno Statefulset, ognuno utilizzando un servizio di archiviazione multishare Filestore StorageClass. Vedrai anche come GKE imballaggi (un processo per pacchettizzare in modo efficiente le applicazioni nei nodi GKE) per tutti i volumi nella stessa istanza aziendale di Filestore sottostante.

  1. Usa l'oggetto StorageClass fornito da GKE, enterprise-multishare-rwx, per creare istanze che supportano fino a 10 condivisioni.

    Dopo aver abilitato il driver CSI di GKE Filestore, Gli utenti possono accedere al file StorageClass multishare fornito da GKE enterprise-multishare-rwx con la seguente configurazione. Riferimento in questo oggetto StorageClass, il driver CSI di GKE Filestore utilizza il provisioning dinamico del volume per creare automaticamente volumi permanenti (PV) per il nuovo volume permanente Attestazioni (PVC) come richiesto dal 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>
    

Crea un oggetto StorageClass personalizzato

Se vuoi sfruttare l'ultimo limite di capacità, fino a 80 condivisioni per Filestore, crea un oggetto StorageClass personalizzato basato su modello:

  apiVersion: storage.k8s.io/v1
  kind: StorageClass
  metadata:
    name: csi-filestore-multishare-128
  provisioner: filestore.csi.storage.gke.io
  parameters:
    tier: enterprise
    multishare: "true"
    max-volume-size: "128Gi"
    network: default
  allowVolumeExpansion: true

Quando rinomini il valore di StorageClass, considera i seguenti requisiti:

  • Il nome StorageClass deve essere un nome di sottodominio DNS valido.

  • Il nome StorageClass multishare viene utilizzato anche come etichetta dell'istanza e deve seguire le linee guida per la denominazione delle etichette.

  • Se la tua applicazione richiede il provisioning immediato del volume, includi Modalità di associazione dei volumi Immediate:

    volumeBindingMode: Immediate

    Utilizza questa specifica, ad esempio, se non vuoi che il provisioning del volume in modo che dipenda dalla creazione dei pod nel cluster GKE.

  • A partire dalla versione del driver 1.27, se vuoi assegnare più di 10 condivisioni per istanza, includi il parametro max-volume-size e assegnagli uno dei valori accettati dalla prima colonna:

    Dimensione massima del volume (dimensioni di condivisione) Numero massimo di condivisioni per istanza
    128 GiB 80
    256 GiB 40
    512 GiB 20
    1024 GiB 10

    Ad esempio, l'aggiunta della coppia chiave-valore max-volume-size: "128Gi" garantisce StorageClass mappa fino a 80 condivisioni, ognuna con una durata compresa tra 10 GiB fino a 128 GiB, fino a un singolo livello aziendale da 10 TiB in esecuzione in un'istanza Compute Engine.

    • Questa funzionalità è compatibile con le versioni precedenti delle istanze Filestore creato dal driver CSI di GKE Filestore versione 1.23 alla 1.26.

    • Le istanze esistenti possono creare nuove PVC, o condivisioni, con l'estensione una dimensione minima della condivisione di 10 GiB.

    • Driver CSI GKE Filestore versione 1.27 o successiva, riconosce le istanze Enterprise legacy e assegna loro un valore massimo predefinito dimensione della condivisione di 1024 GiB (1 TiB). Di conseguenza, le istanze legacy sono limitati a un numero massimo di condivisioni di 10 condivisioni per istanza.

    Per maggiori informazioni, consulta Condivisioni multiple di Filestore per GKE.

  1. Creare un deployment con più repliche di pod utilizzando un'unica PVC.

    Crea un file di configurazione YAML 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
    
  2. Controlla le repliche dei pod.

    a. Dalla riga di comando, esegui questo comando per controllare lo stato della PVC:

    kubectl get pvc
    

    Il risultato dovrebbe essere 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 questo comando per controllare lo stato del pod:

    kubectl get pod
    

    Il risultato dovrebbe essere 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
    
  3. Scala le repliche.

    a. Dalla riga di comando, esegui questo comando 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 a 10.

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

    kubectl get pod
    

    Il risultato dovrebbe essere 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 10 pod.

    d. Dalla riga di comando, esegui questo comando:

    kubectl get deployment
    

    Il risultato dovrebbe essere simile alla seguente:

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

    e. Dalla riga di comando, esegui questo comando per controllare il limite di PVC stato:

    kubectl get pvc
    

    Il risultato dovrebbe essere 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 questo comando 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 a 2.

    H Dalla riga di comando, esegui questo comando per visualizzare la modifica applicata:

    kubectl get pod
    

    Il risultato dovrebbe essere 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
    
  4. Eseguire il deployment di uno Statefulset.

    Esegui il deployment di una seconda applicazione che condivide il file Filestore sottostante in esecuzione in un'istanza Compute Engine.

    Per farlo, esegui il provisioning di 200 GiB di spazio e verifica che utilizzino lo stesso l'istanza Filestore sottostante come prima applicazione.

    Scala quindi l'applicazione a nove repliche utilizzando 900 GiB in (9 repliche da 100 GiB ciascuna) e verifica che GKE utilizza la stessa istanza Filestore condividendo l'istanza.

    Crea un file di configurazione YAML 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: registry.k8s.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
    
    
  5. Controlla le repliche e i volumi StatefulSet.

    Dalla riga di comando, esegui questo comando:

    kubectl get pod
    

    Il risultato dovrebbe essere 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 questo comando:

    kubectl get statefulset
    

    Il risultato dovrebbe essere simile alla seguente:

    NAME   READY   AGE
    web    2/2     2m8s
    

    Dalla riga di comando, esegui questo comando:

    kubectl get pvc
    

    Il risultato dovrebbe essere 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
    

    L'oggetto PVC test-pvc-fs è associato al deployment web-server-multishare.

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

  6. Scala le repliche StatefulSet.

    Aumenta il numero di repliche a nove. Man mano che il conteggio aumenta, le PVC vengono create.

    a. Dalla riga di comando, esegui questo comando:

    kubectl  edit statefulset web
    

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

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

    kubectl get statefulset
    

    Il risultato dovrebbe essere simile alla seguente:

    NAME   READY   AGE
    web    9/9     13m
    

    d. Dalla riga di comando, esegui questo comando:

    kubectl get deployment
    

    Il risultato dovrebbe essere simile alla seguente:

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

    e. Dalla riga di comando, esegui questo comando:

    kubectl get pvc
    

    Il risultato dovrebbe essere 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
    
  7. Verifica lo stato dell'istanza Filestore.

    Ora hai un deployment con due pod di replica e uno StatefulSet con nove di repliche di pod e un totale di 10 PVC di dimensioni pari a 100 GiB. Tutte le i volumi sono pacchettizzati in una singola istanza Filestore multishare.

    a. Dalla riga di comando, esegui questo 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 della regione che è in uso. Ad esempio: us-central1.

    Il risultato dovrebbe essere 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 questo 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 della regione che è in uso. Ad esempio: us-central1.

Espandi una PVC e verifica l'istanza Filestore

Questa sezione mostra come espandere una PVC esistente e verificare Dimensione dell'istanza Filestore.

  1. Espandi un PVC.

    PVC supportate da condivisioni in un'istanza multishare Filestore. può aumentare fino alla dimensione massima specificata in max-volume-size . Per verificarlo, espandi uno dei volumi associati al StatefulSet mentre il pod lo utilizza.

    Dalla riga di comando, esegui questo comando per controllare la PVC attuale dimensione 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 questo comando per aumentare le dimensioni a 500 GiB:

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

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

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

    Il risultato dovrebbe essere 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 prima accettato la richiesta espandendo l'istanza Filestore sottostante ed espandendo la condivisione che supporta la PVC.

    Nello specifico, il driver CSI di Filestore si è espanso automaticamente l'istanza a 1536 Gi per soddisfare la nuova dimensione della quota di 500 Gi.

  5. Dalla riga di comando, esegui questo comando instances describe 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 della regione che è in uso. Ad esempio: us-central1.

Provisioning dinamico su un VPC condiviso

Il driver CSI Filestore per GKE supporta le istanze dinamiche il provisioning di volumi in un progetto di servizio in un VPC condiviso. La sezione seguente illustra come utilizzare il driver CSI Filestore per eseguire il provisioning di volumi su istanze multishare Filestore in un servizio in una rete VPC condiviso.

  1. Completa la procedura di configurazione per una rete VPC condiviso e per l'accesso privato ai servizi.

  2. Creare un oggetto StorageClass per il provisioning dinamico dei volumi supportati da un'istanza Filestore multishares istanza 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 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 riga seguente ai parametri utilizzati nel comando:

    reserved-ip-range: RESERVED_NAME
    

    Dove RESERVED_NAME è il nome dell'intervallo di indirizzi IP riservati all'interno del quale può essere eseguito 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 invece di un valore CIDR diretto.

    Per saperne di più, consulta Allocare gli intervalli di indirizzi IP o Configurare un intervallo di indirizzi IP riservati. Per un esempio di come creare un nome riservato utilizzando la console Google Cloud, consulta Creare un'allocazione IP.

  3. Creare un deployment.

    Esegui questo comando 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 una CMEK abilitata Istanze multishare Filestore. In questa sezione, scoprirai come configura una chiave di crittografia gestita dal cliente (CMEK) per il tuo Filestore in esecuzione.

I dettagli della chiave gestita dal cliente possono essere forniti in StorageClass. Qualsiasi istanza creato dinamicamente dal driver CSI Filestore, che fa riferimento per questo oggetto StorageClass avrà CMEK abilitata.

  1. Crea un oggetto StorageClass abilitato per 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 della regione che è in uso. 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. Creare un deployment.

    b. Esegui questo comando 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 a Filestore di Compute Engine.

Con le istanze multishare Filestore, ogni PVC è ospitata su un Istanza Filestore dal driver CSI Filestore. La dettagli dell'istanza Filestore sottostante che ospita il volume che rappresenta il volume Kubernetes, viene acquisita nell'intervallo di indirizzi volumeHandle della specifica dei volumi permanenti. Il formato dell'handle del volume è il seguente: che segue:

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

Il seguente comando kubectl può essere usato per determinare rapidamente le mappature tra un'istanza PVC, PV, Filestore e condividi.

Dalla riga di comando, esegui questo comando:

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

Il risultato dovrebbe essere 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 in uso. Ad esempio: my-project.

Tieni presente che due volumi permanenti nel cluster sono ospitati su un unico Filestore.

Passaggi successivi