Usar o Multishare do Filestore para o Google Kubernetes Engine

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Neste guia, mostramos como usar o Multishare do Filestore para o Google Kubernetes Engine com o driver CSI do Filestore do GKE.

Antes de começar

  1. Antes de começar, conclua as etapas de configuração necessárias para usar o Filestore.

  2. Ative o Driver CSI do GKE Filestore (GKE versão 1.23 ou posterior).

Usar o Multishare do Filestore com vários aplicativos

Nesta seção, mostramos como implantar dois aplicativos, um Deployment e um Statefulset, cada um usando um StorageClass do Filestore multicompartilhamentos. Você também vai ver como os pacotes do GKE (um processo para empacotar aplicativos nos nós do GKE com eficiência) todos os volumes na mesma instância subjacente do Filestore Enterprise.

  1. Use o StorageClass fornecido pelo GKE ou crie um StorageClass personalizado.

    Depois que o driver CSI do GKE Filestore for ativado, os usuários poderão acessar o StorageClass de vários compartilhamentos fornecido pelo GKE enterprise-multishare-rwx com a configuração a seguir. Com referência a esse StorageClass, o driver CSI do GKE Filestore usa o provisionamento de volume dinâmico para criar automaticamente PersistentVolumes para novos pedidos de PersistentVolume. Isso exige a demanda de carga de trabalho do 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 necessário, os usuários podem criar um StorageClass personalizado com base nesse modelo, considerando os seguintes requisitos de nomenclatura:

  2. Criar uma implantação com várias réplicas de pods usando um único PVC.

    Crie um arquivo de configuração YAML semelhante ao seguinte:

    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. Verifique as réplicas de pods.

    a. Na linha de comando, execute o seguinte comando para verificar o status do PVC:

      $ kubectl get pvc
    

    Você verá algo semelhante a esta resposta:

      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. Na linha de comando, execute o seguinte comando para verificar o status do pod:

      $ kubectl get pod
    

    Você verá algo semelhante a esta resposta:

      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. Réplicas de escalonamento

    a. Na linha de comando, execute o seguinte comando para editar a implantação:

      $ kubectl edit deployment web-server-multishare
    

    b. O arquivo será aberto na linha de comando. Encontre o campo spec.replicas e atualize o valor para 10.

    c. Na linha de comando, execute o seguinte comando para ver a alteração aplicada:

      $ kubectl get pod
    

    Você verá algo semelhante a esta resposta:

      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
    

    Observe que dez pods estão em execução.

    d. Na linha de comando, execute o seguinte:

      $ kubectl get deployment
    

    Você verá algo semelhante a esta resposta:

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

    . Na linha de comando, execute o seguinte comando para verificar o status do PVC vinculado:

      $ kubectl get pvc
    

    Você verá algo semelhante a esta resposta:

      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. Na linha de comando, execute o seguinte comando para editar a implantação:

      $ kubectl edit deployment web-server-multishare
    

    g. O arquivo será aberto na linha de comando. Encontre o campo spec.replicas e atualize o valor para 2.

    h. Na linha de comando, execute o seguinte comando para ver a alteração aplicada:

      $ kubectl get pod
    

    Você verá algo semelhante a esta resposta:

      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. Implante um Statefulset.

    Implante um segundo aplicativo que compartilhe a instância subjacente do Filestore.

    Para fazer isso, provisione 200 GiB de espaço e verifique se ele usa a mesma instância do Filestore subjacente que o primeiro aplicativo.

    Em seguida, você escalonará o aplicativo para nove réplicas usando 900 GiB no total (9 réplicas usando 100 GiB cada) e verificará se o GKE usa a mesma instância do Filestore compartilhando a instância.

    Crie um arquivo de configuração YAML semelhante ao seguinte:

    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. Verifique réplicas e volumes do Statefulset.

    Na linha de comando, execute o seguinte:

    $ kubectl get pod
    

    Você verá algo semelhante a esta resposta:

    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
    

    Observe que os dois primeiros pods estão associados ao Statefulset. Os dois últimos pods estão associados à implantação.

    Na linha de comando, execute o seguinte:

    $ kubectl get statefulset
    

    Você verá algo semelhante a esta resposta:

    NAME   READY   AGE
    web    2/2     2m8s
    

    Na linha de comando, execute o seguinte:

    $ kubectl get pvc
    

    Você verá algo semelhante a esta resposta:

    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
    

    O PVC test-pvc-fs está associado ao web-server-multishare da implantação.

    Os PVCs test-pvc-multishare-web-0 e test-pvc-multishare-web-1 estão associados ao Statefulset.

  7. Escalone as réplicas do Statefulset.

    Aumente a contagem de réplicas para nove. À medida que a contagem aumenta, os PVCs correspondentes são criados.

    a. Na linha de comando, execute o seguinte:

    $ kubectl  edit statefulset web
    

    b. O arquivo será aberto na linha de comando. Encontre o campo spec.replicas e atualize o valor para 9.

    c. Na linha de comando, execute o seguinte comando para ver a alteração aplicada:

    $ kubectl get statefulset
    

    Você verá algo semelhante a esta resposta:

    NAME   READY   AGE
    web    9/9     13m
    

    d. Na linha de comando, execute o seguinte:

    $ kubectl get deployment
    

    Você verá algo semelhante a esta resposta:

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

    . Na linha de comando, execute o seguinte:

    $ kubectl get pvc
    

    Você verá algo semelhante a esta resposta:

    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. Verifique o estado da instância do Filestore.

    Agora você tem uma implantação com dois pods de réplica e um Statefulset com nove pods de réplica, além do total de 10 PVCs, cada um com 100 GiB de tamanho. Todos os volumes são agrupados em uma única instância do Multishare do Filestore.

    a. Na linha de comando, execute o seguinte comando instances list:

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

    onde:

    • YOUR_PROJECT_ID é o nome do projeto que está sendo usado. Por exemplo, my-project.

    • REGION é o nome da região que está sendo usada. Por exemplo, us-central1.

    Você verá algo semelhante a esta resposta:

    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. Na linha de comando, execute o seguinte 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
    
    

    onde:

    • YOUR_PROJECT_ID é o nome do projeto que está sendo usado. Por exemplo, my-project.

    • REGION é o nome da região que está sendo usada. Por exemplo, us-central1.

Expandir um PVC e verificar a instância do Filestore

Nesta seção, mostramos como expandir um PVC atual e verificar o tamanho da instância do Filestore.

  1. Expanda um PVC.

    Os PVCs, apoiados por compartilhamentos em uma instância do Multishare do Filestore, podem crescer para um tamanho máximo de 1 TiB. Para verificar isso, expanda um dos volumes associados ao Statefulset enquanto o pod o está usando.

    Na linha de comando, execute o seguinte comando para verificar o tamanho atual do PVC da réplica 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. Na linha de comando, execute o seguinte comando para aumentar o tamanho para 500 GiB:

    $ kubectl edit pvc test-pvc-multishare-web-0
    
    
  3. O arquivo será aberto na linha de comando. Encontre o campo spec.resources.requests.storage e atualize o valor para 500Gi.

  4. Na linha de comando, execute o seguinte comando para ver a alteração aplicada:

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

    Você verá algo semelhante a esta resposta:

    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
    

    O driver CSI do Filestore aceitou a solicitação, primeiro expandindo a instância subjacente do Filestore e, em seguida, expandindo o compartilhamento do suporte ao PVC.

    Especificamente, o driver CSI do Filestore ampliou automaticamente a instância para 1.536 Gi para acomodar o novo tamanho de compartilhamento de 500 Gi.

  5. Na linha de comando, execute o comando instances describe a seguir para verificar a capacidade da instância do 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
    

    onde:

    • YOUR_PROJECT_ID é o nome do projeto que está sendo usado. Por exemplo, my-project.

    • REGION é o nome da região que está sendo usada. Por exemplo, us-central1.

Provisionamento dinâmico em uma VPC compartilhada

O driver CSI do Filestore para GKE é compatível com provisionamento dinâmico de volumes em um projeto de serviço em uma VPC compartilhada. A seção a seguir mostra como usar o driver CSI do Filestore para provisionar dinamicamente volumes em instâncias de compartilhamento múltiplo do Filestore em um projeto de serviço em uma rede VPC compartilhada.

  1. Conclua as etapas de configuração para uma rede VPC compartilhada e o acesso a serviços particulares.

  2. Crie um StorageClass para provisionar dinamicamente volumes com base em uma instância de compartilhamentos do Filestore em uma VPC compartilhada.

    Execute o seguinte comando para implantar um recurso 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
    

    onde:

    • HOST_PROJECT_ID é o ID ou o nome do projeto host da rede VPC compartilhada. Por exemplo, my-host-project.

    • SHARED_VPC_NAME é o nome da rede VPC compartilhada. Por exemplo, my-shared-vpc.

    Se você quiser implantar o recurso em um intervalo de endereços IP reservado, adicione a linha a seguir aos parâmetros usados no comando:

    reserved-ip-range: RESERVED_NAME
    

    Em que RESERVED_NAME é o nome do intervalo de endereços IP reservado em que uma instância do Filestore pode ser provisionada. Por exemplo, filestore-reserved-ip-range. Se um intervalo de IP reservado for especificado, ele precisará ser um intervalo de endereços nomeado em vez de um valor de CIDR direto.

    Para mais informações, consulte Alocar intervalos de endereços IP ou Como configurar um intervalo de endereços IP reservados. Para ver um exemplo de como criar um nome reservado usando o console do Google Cloud, consulte Criar uma alocação de IP.

  3. Crie uma implantação.

    Execute este comando para criar um recurso 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
    
    

Instâncias do Filestore ativadas para CMEK

É possível criar volumes do GKE hospedados em instâncias de compartilhamento de arquivos do Filestore ativadas para CMEK. Nesta seção, você verá como configurar uma chave de criptografia gerenciada pelo cliente (CMEK) para sua instância do Filestore.

Os detalhes da chave gerenciada pelo cliente podem ser fornecidos no StorageClass. Todas as instâncias criadas dinamicamente pelo driver CSI do Filestore, que fazem referência a esse StorageClass, terão a CMEK ativada.

  1. Crie um StorageClass ativado pela CMEK.

    a. Execute este 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
    

    onde:

    • KEY_PROJECT_ID é o nome do projeto em que a chave está localizada. Por exemplo, my-key-project.

    • REGION é o nome da região que está sendo usada. Por exemplo, us-central1.

    • RING_NAME é o nome do keyring. Por exemplo, my-key-ring-name.

    • KEY_NAME é o nome da chave. Por exemplo, my-key-name.

  2. Crie uma implantação.

    b. Execute este comando para criar um recurso 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
    
    

Mapear PVCs para instâncias do Filestore

Nesta seção, você verá como mapear seus PVCs para suas instâncias do Filestore.

Com as instâncias do Multishare do Filestore, cada PVC é hospedado em uma instância do Filestore pelo driver CSI do Filestore. Os detalhes da instância subjacente do Filestore que hospeda o volume e o compartilhamento que representa o volume do Kubernetes são capturados no campo volumeHandle da especificação de volumes permanentes. O formato do identificador de volume é este:

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

O comando kubectl a seguir pode ser usado para determinar rapidamente os mapeamentos entre um PVC, PV, instância do Filestore e um compartilhamento do Filestore.

Na linha de comando, execute o seguinte:

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

Você verá algo semelhante a esta resposta:

   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

onde:

  • YOUR_PROJECT_ID é o nome do projeto que está sendo usado. Por exemplo, my-project.

Observe que dois volumes permanentes no cluster estão hospedados em uma única instância do Filestore.

A seguir