Accede a las instancias de Filestore con el controlador de CSI de Filestore


El controlador de CSI de Filestore es la forma principal de usar las instancias de Filestore con Google Kubernetes Engine (GKE). El controlador de CSI de Filestore proporciona una experiencia completamente administrada con la tecnología del controlador de CSI de Google Cloud Filestore de código abierto.

La versión del controlador de CSI de Filestore está vinculada a los números de la versión secundaria de Kubernetes. La versión del controlador de CSI de Filestore suele ser el controlador más reciente disponible en el momento en que se lanza la versión secundaria de Kubernetes. Los controladores se actualizan de forma automática cuando el clúster se actualiza al último parche de GKE.

Ventajas

El controlador de CSI de Filestore proporciona los siguientes beneficios:

  • Tienes acceso al almacenamiento de NFS completamente administrado a través de las APIs de Kubernetes (kubectl).

  • Puedes usar el controlador de CSI de Filestore de GKE para aprovisionar de forma dinámica tus PersistentVolumes.

  • Puedes usar instantáneas de volumen con el controlador de CSI de GKE Filestore. Las instantáneas de volumen de CSI se pueden usar para crear copias de seguridad de Filestore.

    Una copia de seguridad de Filestore crea una copia diferencial del recurso compartido de archivos, incluidos todos los datos y metadatos de los archivos, y la almacena por separado. Puedes restablecer esta copia solo en una instancia nueva de Filestore. No se admite el restablecimiento a una instancia de Filestore existente. Puedes usar la API de instantáneas de volumen de CSI para activar las copias de seguridad de Filestore si agregas un campo type:backup en la clase de instantáneas de volumen.

  • Puedes usar la expansión de volumen con el controlador de CSI de GKE Filestore. La expansión de volumen te permite cambiar el tamaño de la capacidad de tu volumen.

  • Puede acceder a instancias de Filestore existentes mediante instancias de Filestore aprovisionadas previamente en cargas de trabajo de Kubernetes. También puedes crear o borrar instancias de Filestore de forma dinámica y usarlas en cargas de trabajo de Kubernetes con un StorageClass o un Deployment.

  • Admite recursos compartidos de Filestore para GKE. Esta función te permite crear una instancia de Filestore y asignar varios PersistentVolumes activados por NFS más pequeños de forma simultánea en cualquier cantidad de clústeres de GKE.

Requisitos

  • Para usar el controlador de CSI de Filestore, tus clústeres deben usar la versión 1.21 de GKE o una posterior.
  • Para usar la capacidad de recursos compartidos de Filestore, tus clústeres deben usar la versión 1.23 de GKE o una posterior.
  • El controlador CSI de Filestore solo es compatible con clústeres que usan Linux; los nodos de Windows Server no son compatibles.
  • El tamaño mínimo de instancia para Filestore es de al menos 1 TiB. El tamaño mínimo de la instancia depende del nivel de servicio de Filestore que seleccionaste. Para obtener más información, consulta los niveles de servicio.
  • Filestore usa el protocolo del sistema de archivos NFSv3 en la instancia de Filestore y admite cualquier cliente que sea compatible con NFSv3.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Cloud Filestore y la API de Google Kubernetes Engine.
  • Habilita las APIs
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Habilita el controlador de CSI de Filestore en un clúster nuevo

Para habilitar el controlador de CSI del controlador de CSI de Filestore cuando creas un clúster nuevo estándar, sigue estos pasos con Google Cloud CLI o la consola de Google Cloud.

gcloud

gcloud container clusters create CLUSTER_NAME \
    --addons=GcpFilestoreCsiDriver \
    --cluster-version=VERSION

Reemplaza lo siguiente:

  • CLUSTER_NAME: El nombre de tu clúster.
  • VERSION: el número de versión de GKE. Debes seleccionar la versión 1.21 o una versión posterior para usar esta característica. Como alternativa, puedes usar la marca --release-channel y especificar un canal de versiones.

Consola

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Selecciona el modo de clúster Estándar y, a continuación, haz clic en Configurar.

  4. Configura el clúster para que se adapte a tus necesidades.

  5. En el panel de navegación, en Clúster, haz clic en Funciones.

  6. Selecciona la casilla de verificación Habilitar el controlador de CSI de Filestore.

  7. Haz clic en Crear.

Si deseas usar Filestore en una red de VPC compartida, consulta Habilita el controlador de CSI de Filestore en un clúster nuevo con VPC compartida.

Después de habilitar el controlador de CSI de Filestore, puedes usarlo en volúmenes de Kubernetes con el controlador y el nombre del aprovisionador: filestore.csi.storage.gke.io.

Habilita el controlador de CSI de Filestore en un clúster existente

Para habilitar el controlador de CSI de Filestore en clústeres existentes, usa Google Cloud CLI o la consola de Google Cloud.

Para habilitar el controlador en un clúster existente, completa los siguientes pasos:

gcloud

gcloud container clusters update CLUSTER_NAME \
   --update-addons=GcpFilestoreCsiDriver=ENABLED

Reemplaza CLUSTER_NAME por el nombre del clúster existente.

Console

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Características, junto al campo Controlador de CSI de Filestore, haz clic en Editar controlador de CSI de Filestore.

  4. Selecciona la casilla de verificación Habilitar el controlador de CSI de Filestore.

  5. Haz clic en Guardar cambios.

Inhabilita el controlador de CSI de Filestore

Puedes inhabilitar el controlador CSI de Filestore en un clúster existente de Autopilot o estándar con Google CLI o la consola de Google Cloud.

gcloud

gcloud container clusters update CLUSTER_NAME \
    --update-addons=GcpFilestoreCsiDriver=DISABLED \
    --region REGION

Reemplaza los siguientes valores:

  • CLUSTER_NAME: es el nombre del clúster existente.
  • REGION: la región para tu clúster (como us-central1).

Consola

  1. En la consola de Google Cloud, ve al menú de Google Kubernetes Engine.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Características, junto al campo Controlador de CSI de Filestore, haz clic en Editar controlador de CSI de Filestore.

  4. Desmarca la casilla de verificación Habilitar el controlador de CSI de Filestore.

  5. Haz clic en Guardar cambios.

Accede a instancias de Filestore preexistentes con el controlador CSI de Filestore

En esta sección, se describe el proceso típico para usar un volumen de Kubernetes a fin de acceder a instancias de Filestore preexistentes con el controlador CSI de Filestore en GKE:

Crea un PersistentVolume y un PersistentVolumeClaim para acceder a la instancia

  1. Crea un archivo de manifiesto como el que se muestra en el siguiente ejemplo y asígnale el nombre preprov-filestore.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: PV_NAME
    spec:
      storageClassName: ""
      capacity:
        storage: 1Ti
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: filestore.csi.storage.gke.io
        volumeHandle: "modeInstance/FILESTORE_INSTANCE_LOCATION/FILESTORE_INSTANCE_NAME/FILESTORE_SHARE_NAME"
        volumeAttributes:
          ip: FILESTORE_INSTANCE_IP
          volume: FILESTORE_SHARE_NAME
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      volumeName: PV_NAME
      resources:
        requests:
          storage: 1Ti
    
  2. Para crear los recursos PersistentVolumeClaim y PersistentVolume según el archivo de manifiesto preprov-filestore.yaml, ejecuta el siguiente comando:

    kubectl apply -f preprov-filestore.yaml
    

Luego, crea un Deployment que consuma el volumen.

Crea un volumen con el controlador CSI de Filestore

En las siguientes secciones, se describe el proceso típico para usar un volumen de Kubernetes respaldado por un controlador de Filestore CSI en GKE.

Crea un StorageClass

Después de habilitar el controlador CSI de Filestore, GKE instala de forma automática las siguientes StorageClasses para aprovisionar instancias de Filestore:

Para encontrar el nombre de la StorageClass instalada, ejecuta el siguiente comando:

kubectl get sc

También puedes instalar una StorageClass diferente que use el controlador de CSI de Filestore mediante la adición de filestore.csi.storage.gke.io en el campo provisioner.

Filestore necesita saber en qué red crear la nueva instancia. Las StorageClasses instaladas de forma automática usan la red predeterminada creada para los clústeres de GKE. Si borraste esta red o quieres usar una diferente, debes crear una clase de almacenamiento nueva como se describe en la siguiente sección. De lo contrario, las clases de almacenamiento instaladas automáticamente no funcionarán.

  1. Guarda el siguiente manifiesto como filestore-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: filestore-example
    provisioner: filestore.csi.storage.gke.io
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    parameters:
      tier: standard
      network: default
    

    En el manifiesto, considera la siguiente configuración de parámetros:

    • Establecer volumeBindingMode en Immediate permite que el aprovisionamiento del volumen comience de inmediato. Esto es posible porque se puede acceder a las instancias de Filestore desde cualquier zona. Por lo tanto, GKE no necesita saber la zona en la que está programado el Pod, en contraste con el disco persistente de Compute Engine. Cuando se establece en WaitForFirstConsumer, GKE comienza a aprovisionar solo después de que se programe el Pod. Para obtener más información, consulta VolumeBindingMode.
    • Cualquier nivel de Filestore se puede especificar en el parámetro tier (por ejemplo, BASIC_HDD, BASIC_SSD, ZONAL, REGIONAL o ENTERPRISE).
    • El parámetro network se puede usar cuando se aprovisionan instancias de Filestore en VPC no predeterminadas. Las VPC no predeterminadas requieren que se configuren reglas de firewall especiales.
  2. Para crear un recurso StorageClass basado en el archivo de manifiesto filestore-example-class.yaml, ejecuta el siguiente comando:

    kubectl create -f filestore-example-class.yaml
    

Si deseas usar Filestore en una red de VPC compartida, consulta Crea una StorageClass cuando uses el controlador de CSI de Filestore con VPC compartida.

Usa un objeto PersistentVolumeClaim para acceder al volumen

Puede crear un recurso PersistentVolumeClaim que haga referencia a StorageClass del controlador de CSI de Filestore.

Puedes usar una StorageClass preinstalada o personalizada.

En el siguiente archivo de manifiesto de ejemplo, se crea una PersistentVolumeClaim que hace referencia a la StorageClass llamada filestore-example.

  1. Guarda el siguiente archivo de manifiesto como pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: filestore-example
      resources:
        requests:
          storage: 1Ti
    
  2. Para crear un recurso PersistentVolume basado en el archivo de manifiesto pvc-example.yaml, ejecuta el siguiente comando:

    kubectl create -f pvc-example.yaml
    

Crea un Deployment que consuma el volumen

En el siguiente ejemplo de manifiesto de Deployment, se consume el recurso PersistentVolume llamado pvc-example.yaml.

Varios Pods pueden compartir el mismo recurso PersistentVolumeClaim.

  1. Guarda el siguiente manifiesto como filestore-example-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      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: podpvc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: filestore-example
      resources:
        requests:
          storage: 1Ti
    
  2. Para crear una implementación basada en el archivo de manifiesto filestore-example-deployment.yaml, ejecuta el siguiente comando:

    kubectl apply -f filestore-example-deployment.yaml
    
  3. Confirma que el objeto Deployment se haya creado correctamente:

    kubectl get deployment
    

    Las instancias de Filestore pueden tardar un poco en completar el aprovisionamiento. Antes de eso, las implementaciones no informarán un estado READY. Para verificar el progreso, supervisa el estado de PVC ejecutando el siguiente comando:

    kubectl get pvc
    

    Deberías ver que la PVC alcance un estado BOUND cuando se complete el aprovisionamiento de volúmenes.

Etiqueta instancias de Filestore

Puedes usar etiquetas para agrupar instancias relacionadas y almacenar metadatos de una instancia. Una etiqueta es un par clave-valor que te ayuda a organizar tus instancias de Filestore. Puedes adjuntar una etiqueta a cada recurso y, luego, filtrar los recursos según las etiquetas.

Puedes proporcionar etiquetas con la clave labels en StorageClass.parameters. Una instancia de Filestore puede etiquetarse con información sobre para qué PersistentVolumeClaim/PersistentVolume se creó la instancia. Las claves y valores de etiqueta personalizados deben cumplir con la convención de nombres de etiquetas. Consulta el ejemplo de clase de almacenamiento de Kubernetes para aplicar etiquetas personalizadas a la instancia de Filestore.

Usa fsgroup con volúmenes de Filestore

Kubernetes usa fsGroup a fin de cambiar los permisos y la propiedad del volumen para hacer coincidir un fsGroup solicitado por el usuario en el SecurityContext del Pod. Una fsGroup es un grupo complementario que se aplica a todos los contenedores en un Pod. Puedes aplicar un fsgroup a los volúmenes aprovisionados mediante el controlador de CSI de Filestore.

Configure reglas de acceso IP con volúmenes de Filestore

Filestore admite reglas de control de acceso basadas en IP para volúmenes.

Estas reglas se pueden configurar directamente a través de la API de Filestore o a través del controlador de CSI de Filestore cuando se crea un volumen. Puedes proporcionar la configuración seleccionada en formato JSON en la StorageClass con el parámetro nfs-export-options-on-create.

En el siguiente manifiesto de ejemplo, se muestra cómo especificar la configuración:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: filestore-example
provisioner: filestore.csi.storage.gke.io
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
  tier: "enterprise"
  nfs-export-options-on-create: '[
    {
      "accessMode": "READ_WRITE",
      "ipRanges": [
        "10.0.0.0/24"
      ],
      "squashMode": "NO_ROOT_SQUASH"
    },
    {
      "accessMode": "READ_ONLY",
      "ipRanges": [
        "10.0.0.0/28"
      ],
    }
  ]'

Asegúrate de especificar al menos un rango de administradores con permisos READ_WRITE y squashMode configurado como NO_ROOT_SQUASH.

Después de crear un volumen, solo puedes modificar las reglas de acceso a través de la API de Filestore.

Usa Filestore con VPC compartida

En esta sección, se explica cómo usar una instancia de Filestore en una red de VPC compartida desde un proyecto de servicio.

Configura un clúster con VPC compartida.

Para configurar tus clústeres con una red de VPC compartida, sigue estos pasos:

  1. Crea un proyecto host y de servicio.
  2. Habilita la API de Google Kubernetes Engine en los proyectos host y de servicio.
  3. En tu proyecto host, crea una red y una subred.
  4. Habilita la VPC compartida en el proyecto host.
  5. En el proyecto host, otorga la vinculación de rol de usuario HostServiceAgent para la cuenta de servicio de GKE del proyecto de servicio.
  6. Habilita el acceso privado a servicios en la red de VPC compartida

Habilita el controlador de CSI de Filestore en un clúster nuevo con VPC compartida

Para habilitar el controlador de CSI de Filestore en un clúster nuevo con VPC compartida, sigue estos pasos:

  1. Verifica los rangos secundarios y las subredes que se pueden usar. Cuando creas un clúster, debes especificar una subred y los rangos de direcciones IP secundarios que se usarán para los pods y los objetos Service del clúster.

    gcloud container subnets list-usable \
       --project=SERVICE_PROJECT_ID \
       --network-project=HOST_PROJECT_ID
    

    El resultado es similar al siguiente:

    PROJECT                   REGION       NETWORK     SUBNET  RANGE
    HOST_PROJECT_ID  us-central1  shared-net  tier-1  10.0.4.0/22
    ┌──────────────────────┬───────────────┬─────────────────────────────┐
    │ SECONDARY_RANGE_NAME │ IP_CIDR_RANGE │            STATUS           │
    ├──────────────────────┼───────────────┼─────────────────────────────┤
    │ tier-1-pods          │ 10.4.0.0/14   │ usable for pods or services │
    │ tier-1-services      │ 10.0.32.0/20  │ usable for pods or services │
    └──────────────────────┴───────────────┴─────────────────────────────┘
    
  2. Crea un clúster de GKE. En los siguientes ejemplos, se muestra cómo puedes usar gcloud CLI para crear un clúster de Autopilot o Standard configurado para la VPC compartida. En los siguientes ejemplos, se usan los nombres de red, subred y rango de Crea una red y dos subredes.

    Autopilot

    gcloud container clusters create-auto tier-1-cluster \
       --project=SERVICE_PROJECT_ID \
       --region=COMPUTE_REGION \
       --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \
       --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \
       --cluster-secondary-range-name=tier-1-pods \
       --services-secondary-range-name=tier-1-services
    

    Estándar

    gcloud container clusters create tier-1-cluster \
       --project=SERVICE_PROJECT_ID \
       --zone=COMPUTE_REGION \
       --enable-ip-alias \
       --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \
       --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \
       --cluster-secondary-range-name=tier-1-pods \
       --services-secondary-range-name=tier-1-services \
       --addons=GcpFilestoreCsiDriver
    
  3. Crea reglas de firewall para permitir la comunicación entre nodos, pods y objetos Service en tu clúster. En el siguiente ejemplo, se muestra cómo crear una regla de firewall llamada my-shared-net-rule-2.

    gcloud compute firewall-rules create my-shared-net-rule-2 \
       --project HOST_PROJECT_ID \
       --network=NETWORK_NAME \
       --allow=tcp,udp \
       --direction=INGRESS \
       --source-ranges=10.0.4.0/22,10.4.0.0/14,10.0.32.0/20
    

    En el ejemplo, los valores de IP de los rangos de origen provienen del paso anterior en el que verificaste las subredes y los rangos secundarios que se pueden usar.

Crea una StorageClass cuando uses el controlador de CSI de Filestore con VPC compartida

En el siguiente ejemplo, se muestra cómo puedes crear una StorageClass cuando uses el controlador de CSI de Filestore con VPC compartida:

cat <<EOF | kubectl apply -f -

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: filestore-sharedvpc-example
provisioner: filestore.csi.storage.gke.io
parameters:
  network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
  connect-mode: PRIVATE_SERVICE_ACCESS
  reserved-ip-range: RESERVED_IP_RANGE_NAME
allowVolumeExpansion: true

EOF

Reemplaza lo siguiente:

  • HOST_PROJECT_ID: El ID o el nombre del proyecto host de la red de VPC compartida.
  • SHARED_VPC_NAME: Es el nombre de la red de VPC compartida que creaste antes.
  • RESERVED_IP_RANGE_NAME: El nombre del rango de direcciones IP reservadas específico para aprovisionar la instancia de Filestore. Este campo es opcional. Si se especifica un rango de direcciones IP reservado, debe ser un rango de direcciones con nombre en lugar de un valor CIDR directo.

Si deseas aprovisionar un volumen respaldado por recursos compartidos de Filestore en clústeres de GKE que ejecutan la versión 1.23 o posterior, consulta Optimiza el almacenamiento con recursos compartidos de Filestore para GKE.

Vuelve a conectar los volúmenes de único recurso compartido de Filestore

Si usas Filestore con el HDD básico, la SSD básico o el nivel empresarial (de un solo recurso compartido), puedes seguir estas instrucciones para volver a conectar tu instancia de Filestore existente a tus cargas de trabajo de GKE.

  1. Para encontrar los detalles de la instancia de Filestore aprovisionada previamente, sigue las instrucciones en Obtén información sobre una instancia específica.

  2. Vuelve a implementar la especificación de PersistentVolume. En el campo volumeAttributes, modifica los siguientes campos para usar los mismos valores que la instancia de Filestore del paso 1:

    • ip: Modifica este valor a la dirección IP de la instancia de Filestore aprovisionada previamente.
    • volume: Modifica este valor con el nombre compartido de la instancia de Filestore aprovisionada previamente.
  3. Vuelve a implementar la especificación de PersistentVolumeClaim. En volumeName, asegúrate de hacer referencia al mismo nombre de PersistentVolume que en el paso 2.

  4. Ejecuta kubectl get pvc para verificar el estado de vinculación de PersistentVolumeClaim y PersistentVolume.

  5. Vuelve a implementar la especificación de tu pod y asegúrate de que tu pod pueda acceder al recurso compartido de Filestore nuevamente.

¿Qué sigue?