Optimizar el almacenamiento con Multishares de Filestore para GKE

En esta guía se explica cómo usar la función multicompartir de Filestore en Google Kubernetes Engine con el controlador de CSI de Filestore para GKE.

Antes de empezar

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

  2. Habilita el controlador de CSI para Filestore de GKE, versión 1.23 o posterior:

    • Las versiones del controlador de la 1.23 a la 1.26 admiten hasta 10 recursos compartidos por instancia.

    • Las versiones 1.27 o posteriores del controlador admiten hasta 80 recursos compartidos por instancia.

    Para consultar los requisitos más recientes del controlador de CSI para Filestore de GKE, consulta el artículo Acceder a instancias de Filestore con el controlador de CSI para Filestore.

Usar multirecursos compartidos de Filestore con varias aplicaciones

En esta sección se muestra cómo desplegar dos aplicaciones, una Deployment y una Statefulset, cada una de las cuales usa una StorageClass de Filestore multishares. También verás cómo GKE empaqueta en contenedores (un proceso para empaquetar de forma eficiente las aplicaciones en tus nodos de GKE) todos los volúmenes en la misma instancia de Filestore Enterprise subyacente.

  1. Usa la clase de almacenamiento enterprise-multishare-rwx proporcionada por GKE para crear instancias que admitan hasta 10 recursos compartidos.

    • Si quieres crear instancias que admitan hasta 80 recursos compartidos, tendrás que crear una StorageClass personalizada. En esta guía, usarás una StorageClass con un límite de diez shares por instancia.

    Una vez que se haya habilitado el controlador de CSI de Filestore de GKE, los usuarios podrán acceder a la clase de almacenamiento multishare proporcionada por GKE enterprise-multishare-rwx con la siguiente configuración. Al hacer referencia a esta StorageClass, el controlador CSI de Filestore de GKE usa el aprovisionamiento dinámico de volúmenes para crear automáticamente volúmenes persistentes (PVs) para las nuevas reclamaciones de volumen persistente (PVCs) según lo requiera la demanda de la carga de trabajo de 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>
    

Crear un StorageClass personalizado

Si quieres aprovechar el límite de capacidad más reciente de hasta 80 recursos compartidos por instancia de Filestore, crea una StorageClass personalizada basada en la siguiente plantilla:

  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

Cuando cambies el nombre de StorageClass, ten en cuenta los siguientes requisitos:

  • El nombre de StorageClass debe ser un nombre de subdominio DNS válido.

  • El nombre de StorageClass de multishare también se usa como etiqueta de instancia y debe seguir las directrices de nomenclatura de etiquetas.

  • Si tu aplicación requiere aprovisionamiento de volumen inmediato, incluye el Immediate modo de vinculación de volumen:

    volumeBindingMode: Immediate

    Usa esta especificación, por ejemplo, si no quieres que el aprovisionamiento de volúmenes dependa de la creación de pods en el clúster de GKE.

  • A partir de la versión 1.27 del controlador, si quieres asignar más de 10 recursos compartidos por instancia, incluye el parámetro max-volume-size y asígnale uno de los valores aceptados de la primera columna:

    Tamaño máximo del volumen (tamaño del recurso compartido) Número máximo de recursos compartidos por instancia
    128 GiB 80
    256 GiB 40
    512 GiB 20
    1024 GiB 10

    Por ejemplo, si añade el par clave-valor max-volume-size: "128Gi", se asignarán hasta 80 recursos compartidos (cada uno de entre 10 y 128 GiB) a una sola instancia de nivel Enterprise de 10 TiB.

    • Esta función es compatible con las instancias de Filestore creadas por las versiones 1.23 a 1.26 del controlador de CSI de Filestore de GKE.

    • Las instancias que ya tengas pueden crear nuevos PVCs o recursos compartidos con el tamaño mínimo ampliado de 10 GiB.

    • La versión 1.27 o posterior del controlador CSI de Filestore de GKE reconoce las instancias Enterprise antiguas y les asigna un tamaño máximo de recurso compartido predeterminado de 1024 GiB (1 TiB). Por lo tanto, las instancias antiguas solo pueden tener un máximo de 10 recursos compartidos por instancia.

    Para obtener más información, consulta Filestore multishares para GKE.

  1. Crea un Deployment con varias réplicas de pods usando 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
    
  2. Comprueba las réplicas de los pods.

    a. En la línea de comandos, ejecuta el siguiente comando para comprobar el estado del PVC:

    kubectl get pvc
    

    Debería ver una respuesta similar a la siguiente:

    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, ejecuta el siguiente comando para comprobar el estado del pod:

    kubectl get pod
    

    Debería ver una respuesta similar a la siguiente:

    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. Escala las réplicas.

    a. En la línea de comandos, ejecuta 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 cambia el valor a 10.

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

    kubectl get pod
    

    Debería ver una respuesta similar a la siguiente:

    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
    

    Observa que hay 10 pods en ejecución.

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

    kubectl get deployment
    

    Debería ver una respuesta similar a la siguiente:

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

    e. En la línea de comandos, ejecuta el siguiente comando para comprobar el estado de la PVC enlazada:

    kubectl get pvc
    

    Debería ver una respuesta similar a la siguiente:

    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. En la línea de comandos, ejecuta 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 cambia el valor a 2.

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

    kubectl get pod
    

    Debería ver una respuesta similar a la siguiente:

    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. Despliega un StatefulSet.

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

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

    A continuación, escalará la aplicación a nueve réplicas con un total de 900 GiB (9 réplicas con 100 GiB cada una) y verificará que GKE usa la misma instancia de Filestore compartiendo la instancia.

    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: 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. Comprueba las réplicas y los volúmenes de StatefulSet.

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

    kubectl get pod
    

    Debería ver una respuesta similar a la siguiente:

    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
    

    Observa que los dos primeros pods están asociados al StatefulSet. Los dos últimos pods están asociados a la implementación.

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

    kubectl get statefulset
    

    Debería ver una respuesta similar a la siguiente:

    NAME   READY   AGE
    web    2/2     2m8s
    

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

    kubectl get pvc
    

    Debería ver una respuesta similar a la siguiente:

    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
    

    El PVC test-pvc-fs está asociado a la implementación web-server-multishare.

    Los PVCs test-pvc-multishare-web-0 y test-pvc-multishare-web-1 están asociados al StatefulSet.

  6. Escala las réplicas de StatefulSet.

    Aumenta el número de réplicas a nueve. A medida que aumenta el recuento, se crean los PVCs correspondientes.

    a. En 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 cambia el valor a 9.

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

    kubectl get statefulset
    

    Debería ver una respuesta similar a la siguiente:

    NAME   READY   AGE
    web    9/9     13m
    

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

    kubectl get deployment
    

    Debería ver una respuesta similar a la siguiente:

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

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

    kubectl get pvc
    

    Debería ver una respuesta similar a la siguiente:

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

    Ahora tienes un Deployment con dos pods de réplica, un StatefulSet con nueve pods de réplica y un total de 10 PVCs, cada uno de 100 GiB. Todos los volúmenes se empaquetan en una sola instancia de Filestore multishare.

    a. En 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 está usando. Por ejemplo, my-project.

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

    Debería ver una respuesta similar a la siguiente:

    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. En 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 está usando. Por ejemplo, my-project.

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

Expande un PVC y verifica la instancia de Filestore

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

  1. Amplía un PVC.

    Los PVCs, respaldados por recursos compartidos en una instancia de Filestore multishare, pueden alcanzar el tamaño máximo especificado en el parámetro max-volume-size. Para verificarlo, expande uno de los volúmenes asociados al StatefulSet mientras el pod lo esté usando.

    En la línea de comandos, ejecuta el siguiente comando para comprobar el tamaño actual del PVC 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. En 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 cambia el valor a 500Gi.

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

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

    Debería ver una respuesta similar a la siguiente:

    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 de CSI para Filestore ha aceptado la solicitud. Primero, ha ampliado la instancia de Filestore subyacente y, después, ha ampliado el recurso compartido que respalda el PVC.

    En concreto, el controlador de CSI de Filestore ha ampliado automáticamente la instancia a 1536 Gi para adaptarse al nuevo tamaño del recurso compartido, que es de 500 Gi.

  5. En 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 está usando. Por ejemplo, my-project.

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

Aprovisionamiento dinámico en una VPC compartida

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

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

  2. Crea un objeto StorageClass para aprovisionar dinámicamente volúmenes respaldados por una instancia de Filestore multishares 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 el nombre de la red de VPC compartida. Por ejemplo, my-shared-vpc.

    Si quieres implementar tu recurso en un intervalo de direcciones IP reservado, añade la siguiente línea a los parámetros utilizados en el comando:

    reserved-ip-range: RESERVED_NAME
    

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

    Para obtener más información, consulta Asignar intervalos de direcciones IP o Configurar un intervalo de direcciones IP reservado. Para ver un ejemplo de cómo crear un nombre reservado con la consola de Google Cloud , consulta Crear una asignación de IP.

  3. Crea un despliegue.

    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 Filestore con varios recursos compartidos y CMEK habilitado. En esta sección, se explica cómo configurar una clave de encriptado gestionada por el cliente (CMEK) para tu instancia de Filestore.

Los detalles de la clave gestionada por el cliente se pueden proporcionar en StorageClass. Cualquier instancia creada dinámicamente por el controlador CSI de Filestore que haga referencia a esta StorageClass tendrá habilitada la CMEK.

  1. Crea un StorageClass con CMEK habilitado.

    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 está usando. Por ejemplo, us-central1.

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

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

  2. Crea un despliegue.

    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
    

Asignar PVCs a instancias de Filestore

En esta sección, se explica cómo asignar tus PVCs a tus instancias de Filestore.

En las instancias multicompartir de Filestore, el controlador de CSI de Filestore aloja cada PVC en una instancia de Filestore. Los detalles de la instancia de Filestore subyacente que aloja el volumen y el recurso compartido que representa el volumen de Kubernetes se registran en el campo volumeHandle de la especificación de volúmenes persistentes. El formato del identificador de volumen es el siguiente:

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

Puedes usar el siguiente comando kubectl para determinar rápidamente las asignaciones entre un PVC, un PV, una instancia de Filestore y un recurso compartido de Filestore.

En 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 una respuesta similar a la siguiente:

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 está usando. Por ejemplo, my-project.

Ten en cuenta que dos volúmenes persistentes del clúster están alojados en una sola instancia de Filestore.

Siguientes pasos