Usa recursos compartidos de Filestore para Google Kubernetes Engine

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta guía, se muestra cómo usar el uso compartido múltiple de Filestore para Google Kubernetes Engine con el controlador de CSI de Filestore de GKE.

Antes de comenzar

  1. Antes de comenzar, completa los pasos de configuración necesarios para usar Filestore.

  2. Habilita el controlador CSI de Filestore de GKE (versión 1.23 de GKE o posterior).

Usa Multishare de Filestore con varias aplicaciones

En esta sección, se muestra cómo implementar dos aplicaciones, una Deployment y una Statefulset, cada una con un StorageClass de Filestore con varios elementos compartidos. También verás cómo los bin paquetes de GKE (un proceso para empaquetar aplicaciones de manera eficiente en tus nodos de GKE) todos los volúmenes en la misma instancia subyacente de Filestore Enterprise.

  1. Usa el StorageClass proporcionado por GKE o crea un StorageClass personalizado.

    Después de habilitar el controlador de CSI de Filestore de GKE, los usuarios pueden acceder a la StorageClass de uso compartido múltiple enterprise-multishare-rwx que proporciona GKE con la siguiente configuración. En referencia a esta StorageClass, el controlador CSI de Filestore de GKE usa el aprovisionamiento dinámico de volúmenes a fin de crear volúmenes persistentes (PV) automáticamente para las nuevas reclamaciones de volumen persistente (PVC) cuando la demanda de carga de trabajo de GKE requiera lo siguiente:

    $ 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>
    

    Si es necesario, los usuarios pueden crear una StorageClass personalizada en función de esta plantilla y tener en cuenta los siguientes requisitos de nomenclatura:

  2. Crear una implementación con varias réplicas de pod mediante un solo PVC

    Crea un archivo de configuración YAML similar al siguiente:

    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. Verifica las réplicas de pods.

    a. Desde la línea de comandos, ejecute el siguiente comando para verificar el estado del PVC:

      $ kubectl get pvc
    

    Debería ver algo similar a la siguiente respuesta:

      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. Desde la línea de comandos, ejecute el siguiente comando para verificar el estado del Pod:

      $ kubectl get pod
    

    Debería ver algo similar a la siguiente respuesta:

      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. Replicas de escala.

    a. Desde la línea de comandos, ejecute el siguiente comando para editar el Deployment:

      $ kubectl edit deployment web-server-multishare
    

    b. El archivo se abrirá en la línea de comandos. Busca el campo spec.replicas y actualiza el valor a 10.

    c. Desde la línea de comandos, ejecute el siguiente comando para ver el cambio aplicado:

      $ kubectl get pod
    

    Debería ver algo similar a la siguiente respuesta:

      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 se están ejecutando diez Pods.

    d. Desde la línea de comandos, ejecuta el siguiente comando:

      $ kubectl get deployment
    

    Debería ver algo similar a la siguiente respuesta:

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

    e. Desde la línea de comandos, ejecuta el siguiente comando para verificar el estado vinculado a la PVC:

      $ kubectl get pvc
    

    Debería ver algo similar a la siguiente respuesta:

      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. Desde la línea de comandos, ejecute el siguiente comando para editar el Deployment:

      $ kubectl edit deployment web-server-multishare
    

    g. El archivo se abrirá en la línea de comandos. Busca el campo spec.replicas y actualiza el valor a 2.

    h. Desde la línea de comandos, ejecute el siguiente comando para ver el cambio aplicado:

      $ kubectl get pod
    

    Debería ver algo similar a la siguiente respuesta:

      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. Implementa un Statefulset.

    Implementa una segunda aplicación que comparta la instancia de Filestore subyacente.

    Para hacerlo, aprovisiona 200 GiB de espacio y valida que use la misma instancia subyacente de Filestore que la primera aplicación.

    Luego, escalarás la aplicación a nueve réplicas con un total de 900 GiB (9 réplicas con 100 GiB cada una) y compartirás la instancia para verificar que GKE use la misma instancia de Filestore.

    Crea un archivo de configuración YAML similar al siguiente:

    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. Verifica las réplicas y los volúmenes de Statefulset.

    Desde la línea de comandos, ejecuta el siguiente comando:

    $ kubectl get pod
    

    Debería ver algo similar a la siguiente respuesta:

    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
    

    Tenga en cuenta que los dos primeros Pods están asociados con el Statefulset. Los dos últimos Pods están asociados con el Deployment.

    Desde la línea de comandos, ejecuta el siguiente comando:

    $ kubectl get statefulset
    

    Debería ver algo similar a la siguiente respuesta:

    NAME   READY   AGE
    web    2/2     2m8s
    

    Desde la línea de comandos, ejecuta el siguiente comando:

    $ kubectl get pvc
    

    Debería ver algo similar a la siguiente respuesta:

    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 test-pvc-fs de PVC está asociada con la implementación web-server-multishare.

    Las PVC test-pvc-multishare-web-0 y test-pvc-multishare-web-1 están asociadas con el Statefulset.

  7. Escalar las réplicas de Statefulset

    Aumenta el recuento de réplicas a nueve. A medida que aumenta el recuento, se crean los PVC correspondientes.

    a. Desde la línea de comandos, ejecuta el siguiente comando:

    $ kubectl  edit statefulset web
    

    b. El archivo se abrirá en la línea de comandos. Busca el campo spec.replicas y actualiza el valor a 9.

    c. Desde la línea de comandos, ejecute el siguiente comando para ver el cambio aplicado:

    $ kubectl get statefulset
    

    Debería ver algo similar a la siguiente respuesta:

    NAME   READY   AGE
    web    9/9     13m
    

    d. Desde la línea de comandos, ejecuta el siguiente comando:

    $ kubectl get deployment
    

    Debería ver algo similar a la siguiente respuesta:

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

    e. Desde la línea de comandos, ejecuta el siguiente comando:

    $ kubectl get pvc
    

    Debería ver algo similar a la siguiente respuesta:

    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 el estado de la instancia de Filestore.

    Ahora tienes un Deployment con dos Pods de réplica y un Statefulset con nueve Pods de réplica y un total de diez PVC, cada uno con un tamaño de 100 GiB. Todos los volúmenes se empaquetan en una sola instancia de Multishare de Filestore.

    a. Desde la línea de comandos, ejecuta el siguiente comando instances list:

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

    Donde:

    • YOUR_PROJECT_ID es el nombre del proyecto que se usa. Por ejemplo, my-project.

    • REGION es el nombre de la región que se usa. Por ejemplo, us-central1.

    Debería ver algo similar a la siguiente respuesta:

    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. Desde la línea de comandos, ejecuta el siguiente 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
    
    

    Donde:

    • YOUR_PROJECT_ID es el nombre del proyecto que se usa. Por ejemplo, my-project.

    • REGION es el nombre de la región que se usa. Por ejemplo, us-central1.

Expanda una PVC y verifique la instancia de Filestore

En esta sección, se muestra cómo expandir un PVC existente y verificar el tamaño de la instancia de Filestore.

  1. Expandir una PVC

    Las PVC, respaldadas por recursos compartidos en una instancia de Multishare de Filestore, pueden alcanzar un tamaño máximo de 1 TiB. Para verificar esto, expande uno de los volúmenes asociados con el Statefulset mientras el pod lo usa.

    Desde la línea de comandos, ejecuta el siguiente comando para verificar el tamaño de PVC actual de la 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. Desde la línea de comandos, ejecuta el siguiente comando para aumentar el tamaño a 500 GiB:

    $ kubectl edit pvc test-pvc-multishare-web-0
    
    
  3. El archivo se abrirá en la línea de comandos. Busca el campo spec.resources.requests.storage y actualiza el valor a 500Gi.

  4. Desde la línea de comandos, ejecute el siguiente comando para ver el cambio aplicado:

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

    Debería ver algo similar a la siguiente respuesta:

    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
    

    El controlador CSI de Filestore aceptó la solicitud; primero, expandió la instancia subyacente de Filestore y, luego, expandió el recurso compartido que respalda el PVC.

    Específicamente, el controlador CSI de Filestore expandió automáticamente la instancia a 1,536 Gi para adaptarse al nuevo tamaño de uso compartido de 500 Gi.

  5. Desde la línea de comandos, ejecuta el siguiente comando instances describe para verificar la capacidad de la instancia de 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
    

    Donde:

    • YOUR_PROJECT_ID es el nombre del proyecto que se usa. Por ejemplo, my-project.

    • REGION es el nombre de la región que se usa. Por ejemplo, us-central1.

Aprovisionamiento dinámico en una VPC compartida

El controlador de CSI de Filestore para GKE admite el aprovisionamiento dinámico de volúmenes en un proyecto de servicio en una VPC compartida. En la siguiente sección, se muestra cómo usar el controlador de CSI de Filestore para aprovisionar volúmenes de forma dinámica en instancias de Multishare de Filestore en un proyecto de servicio en una red de VPC compartida.

  1. Completa los pasos de configuración para una red de VPC compartida y el acceso privado a servicios.

  2. Crea una StorageClass para aprovisionar de forma dinámica los volúmenes respaldados por una instancia de Multishare de Filestore en una VPC compartida.

    Ejecuta el siguiente comando para implementar un 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
    

    Donde:

    • HOST_PROJECT_ID es el ID o el nombre del proyecto host de la red de VPC compartida. Por ejemplo, my-host-project.

    • SHARED_VPC_NAME es el nombre de la red de VPC compartida. Por ejemplo, my-shared-vpc.

    Si deseas implementar tu recurso dentro de un rango de direcciones IP reservado, agrega la siguiente línea a los parámetros usados en el comando:

    reserved-ip-range: RESERVED_NAME
    

    En el que RESERVED_NAME es el nombre del rango de direcciones IP reservado dentro del cual se puede aprovisionar una instancia de Filestore. Por ejemplo, filestore-reserved-ip-range Si se especifica un rango de IP reservado, debe ser un rango de direcciones con nombre en lugar de un valor CIDR directo.

    Para obtener más información, consulta Asigna rangos de direcciones IP o Configura un rango de direcciones IP reservado. Para ver un ejemplo de cómo crear un nombre reservado con Google Cloud Console, consulta Crea una asignación de IP.

  3. Crea una implementación.

    Ejecuta el siguiente comando para crear un 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
    
    

Instancias de Filestore habilitadas para CMEK

Puedes crear volúmenes de GKE alojados en instancias de Multishare compatibles con CMEK de Filestore. En esta sección, verás cómo configurar una clave de encriptación administrada por el cliente (CMEK) para tu instancia de Filestore.

Los detalles de la clave administrada por el cliente se pueden proporcionar en la StorageClass. Cualquier instancia que el controlador de CSI de Filestore cree de forma dinámica y que haga referencia a esta StorageClass tendrá CMEK habilitadas.

  1. Crea una StorageClass habilitada para CMEK.

    a. Ejecuta el siguiente 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
    

    Donde:

    • KEY_PROJECT_ID es el nombre del proyecto en el que se encuentra la clave. Por ejemplo, my-key-project.

    • REGION es el nombre de la región que se usa. Por ejemplo, us-central1.

    • RING_NAME es el nombre del llavero de claves. Por ejemplo, my-key-ring-name

    • KEY_NAME es el nombre de la clave. Por ejemplo, my-key-name

  2. Crea una implementación.

    b. Ejecuta el siguiente comando para crear un 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
    
    

Mapea PVC a instancias de Filestore

En esta sección, verás cómo asignar tus PVC a tus instancias de Filestore.

Con las instancias de Multishare de Filestore, el PVC de Filestore aloja cada PVC en una instancia de Filestore. Los detalles de la instancia de Filestore subyacente que aloja el volumen y el porcentaje que representa el volumen de Kubernetes se capturan en el campo volumeHandle de la especificación de PersistentVolumes. El formato del controlador de volumen es el siguiente:

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

El siguiente comando de kubectl se puede usar para determinar con rapidez las asignaciones entre un PVC, un PV, una instancia de Filestore y un recurso compartido de Filestore.

Desde la línea de comandos, ejecuta el siguiente comando:

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

Debería ver algo similar a la siguiente respuesta:

   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

Donde:

  • YOUR_PROJECT_ID es el nombre del proyecto que se usa. Por ejemplo, my-project.

Ten en cuenta que dos volúmenes persistentes en el clúster se alojan en una sola instancia de Filestore.

¿Qué sigue?