Crear una instancia de Parallelstore y conectarse a ella desde Google Kubernetes Engine

Parallelstore solo está disponible mediante invitación. Si quieres solicitar acceso a Parallelstore en tu Google Cloud proyecto, ponte en contacto con tu representante de ventas.

En esta guía se describe cómo crear un volumen de Kubernetes respaldado por un controlador CSI de Parallelstore en GKE con aprovisionamiento dinámico. De esta forma, puedes crear almacenamiento respaldado por instancias de Parallelstore totalmente gestionadas bajo demanda y acceder a ellas como volúmenes para tus cargas de trabajo con estado.

Antes de empezar

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

  • Habilita la API Parallelstore y la API de Google Kubernetes Engine.
  • Habilitar APIs
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.

Crear un volumen con el controlador CSI de Parallelstore

En las siguientes secciones se describe el proceso habitual para crear un volumen de Kubernetes respaldado por un controlador CSI de Parallelstore en GKE:

  1. (Opcional) Crea un StorageClass.
  2. Usa un PersistentVolumeClaim para acceder al volumen.
  3. (Opcional) Configura los recursos del contenedor sidecar.
  4. Crea una carga de trabajo que consuma el volumen.

(Opcional) Crear una clase de almacenamiento

Cuando el controlador CSI de Parallelstore está habilitado, GKE crea automáticamente una StorageClass llamada parallelstore-rwx para aprovisionar instancias de Parallelstore. Esta StorageClass dirige el controlador de CSI para aprovisionar instancias de Parallelstore en la misma región que tu clúster de GKE para asegurar un rendimiento de E/S óptimo.

También puedes crear un StorageClass personalizado con una topología específica. Para hacerlo, sigue estos pasos:

  1. Guarda el siguiente manifiesto de StorageClass en un archivo llamado parallelstore-class.yaml:

    Montaje de pod

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: parallelstore-class
    provisioner: parallelstore.csi.storage.gke.io
    volumeBindingMode: Immediate
    reclaimPolicy: Delete
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.gke.io/zone
        values:
          LOCATION
    

    Haz los cambios siguientes:

    • LOCATION: la zona de Compute Engine que contiene el clúster. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.

    Para ver la lista completa de los campos admitidos en StorageClass, consulta la documentación de referencia de CSI de Parallelstore.

    Soporte de nodo

    El controlador CSI de Parallelstore te permite montar volúmenes directamente en tus nodos. El montaje de nodos se admite en clústeres de GKE con la versión 1.32.3 y posteriores.

    El montaje a nivel de nodo permite que todos los pods de un nodo compartan el mismo punto de montaje. Compartir el mismo punto de montaje mejora la escalabilidad porque el número de montajes aumenta con el número de nodos, no con el número de pods (como ocurre con el modo sidecar).

    Por lo tanto, puedes ejecutar más pods mientras compartes la misma instancia de Parallelstore.

    Nota: Esta función se habilita especificando el parámetro mountLocality: node. El valor predeterminado de la localidad de montaje de pods es mountLocality: pod. Las marcas de CPU, solicitudes de memoria y límite de dfuse solo funcionan con el ajuste mountLocality: node.

    Si se define el valor de la solicitud o el límite, pero no el otro, ambos se definirán con el mismo valor especificado.

    Puedes usar `'0'` como valor para anular los límites de recursos. Por ejemplo, dfuseMemoryLimit: '0' elimina el límite de memoria del proceso dfuse.
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: parallelstore-class
      provisioner: parallelstore.csi.storage.gke.io
      volumeBindingMode: Immediate
      reclaimPolicy: Delete
      allowedTopologies:
      - matchLabelExpressions:
        - key: topology.gke.io/zone
          values:
            LOCATION
      parameters:
        mountLocality: node
        dfuseCPURequest: DFUSE_CPU_REQUEST
        dfuseMemoryRequest: DFUSE_MEMORY_REQUEST
        dfuseCPULimit: DFUSE_CPU_LIMIT
        dfuseMemoryLimit: DFUSE_MEMORY_LIMIT
    

    Haz los cambios siguientes:

    • LOCATION: la zona de Compute Engine que contiene el clúster. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.
    • DFUSE_CPU_REQUEST: la solicitud de CPU del proceso dfuse. El valor predeterminado es 250m.
    • DFUSE_MEMORY_REQUEST: la solicitud de memoria del proceso dfuse. El valor predeterminado es 512Mi.
    • DFUSE_CPU_LIMIT: el límite de CPU del proceso dfuse. El valor predeterminado no está definido.
    • DFUSE_MEMORY_LIMIT: el límite de memoria del proceso dfuse. El valor predeterminado es 10Gi.

    Para ver la lista completa de los campos admitidos en StorageClass, consulta la documentación de referencia de CSI de Parallelstore.

  2. Crea el objeto StorageClass ejecutando este comando:

    kubectl create -f parallelstore-class.yaml
    

Usar un PersistentVolumeClaim para acceder al volumen

Puedes crear un recurso PersistentVolumeClaim que haga referencia a la clase StorageClass del controlador CSI de Parallelstore.

El siguiente archivo de manifiesto muestra un ejemplo de cómo crear un PersistentVolumeClaim en el ReadWriteMany modo de acceso que hace referencia a la StorageClass que has creado anteriormente.

  1. Guarda el siguiente manifiesto en un archivo llamado parallelstore-pvc.yaml:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: parallelstore-pvc
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: STORAGE_SIZE
        storageClassName: parallelstore-class
    

    Sustituye STORAGE_SIZE por el tamaño del almacenamiento. Por ejemplo, 12000Gi. El valor debe estar comprendido entre 12.000 y 100.000 GiB (en múltiplos de 4000 GiB).

  2. Para crear el PersistentVolumeClaim, ejecuta este comando:

      kubectl create -f parallelstore-pvc.yaml
    

(Opcional) Configurar recursos para el contenedor sidecar

Nota: Solo puedes configurar recursos para el contenedor sidecar si usas la localidad de montaje de Pod, es decir, si el atributo de volumen mountLocality de tu PersistentVolume no está definido o tiene el valor pod.

Cuando creas un pod de carga de trabajo que usa volúmenes respaldados por Parallelstore, el controlador CSI determina si tu volumen se basa en instancias de Parallelstore.

Si el controlador detecta que tu volumen se basa en Parallelstore o si especificas la anotación gke-parallelstore/volumes: "true", el controlador CSI inserta automáticamente un contenedor sidecar llamado gke-parallelstore-sidecar en tu pod. Este contenedor sidecar monta la instancia de Parallelstore en tu carga de trabajo.

De forma predeterminada, GKE configura el contenedor sidecar con las siguientes solicitudes de recursos, sin límites de recursos definidos:

  • 250 m de CPU
  • 512 MiB de memoria
  • 10 MiB de almacenamiento efímero

Para sobrescribir estos valores, puede especificar de forma opcional la anotación gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request], como se muestra en el siguiente ejemplo:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-parallelstore/volumes: "true"
    gke-parallelstore/cpu-request: 500m
    gke-parallelstore/memory-request: 1Gi
    gke-parallelstore/ephemeral-storage-request: 500Mi
    gke-parallelstore/cpu-limit: 1000m
    gke-parallelstore/memory-limit: 2Gi
    gke-parallelstore/ephemeral-storage-limit: 1Gi

Ten en cuenta los siguientes aspectos a la hora de decidir la cantidad de recursos que quieres asignar:

  • Si se define uno de los valores de solicitud o límite y no se define el otro, ambos se definirán con el mismo valor especificado.
  • Asigna más CPU al contenedor sidecar si tus cargas de trabajo necesitan un mayor rendimiento. Si la CPU es insuficiente, se limitará la E/S.
  • Puede usar "0" como valor para anular los límites de recursos en los clústeres estándar. Por ejemplo, gke-parallelstore/memory-limit: "0" elimina el límite de memoria del contenedor sidecar. Esto resulta útil cuando no puedes decidir la cantidad de recursos que necesita gke-parallelstore-sidecar para tus cargas de trabajo y quieres que el sidecar consuma todos los recursos disponibles en un nodo.

Crea una carga de trabajo que consuma el volumen

En esta sección se muestra un ejemplo de cómo crear un pod que consuma el recurso PersistentVolumeClaim que has creado anteriormente.

Varios pods pueden compartir el mismo recurso PersistentVolumeClaim.

  1. Guarda el siguiente manifiesto en un archivo llamado my-pod.yaml.

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - name: parallelstore-volume
              mountPath: /data
        volumes:
        - name: parallelstore-volume
          persistentVolumeClaim:
            claimName: parallelstore-pvc
    
  2. Ejecuta el siguiente comando para aplicar el manifiesto al clúster.

      kubectl apply -f my-pod.yaml
    

    El pod esperará hasta que se aprovisione PersistentVolumeClaim antes de empezar a ejecutarse. Esta operación puede tardar varios minutos en completarse.

Gestionar el controlador de CSI de Parallelstore

En esta sección se explica cómo habilitar e inhabilitar el controlador CSI de Parallelstore, si es necesario.

Habilitar el controlador de CSI de Parallelstore en un clúster nuevo

Para habilitar el controlador CSI de Parallelstore al crear un clúster Standard, ejecuta el siguiente comando con la CLI de Google Cloud:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --network=NETWORK_NAME \
    --addons=ParallelstoreCsiDriver \
    --cluster-version=VERSION

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre de tu clúster.
  • LOCATION: la zona de Compute Engine que contiene el clúster. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.
  • NETWORK_NAME: nombre de la red de VPC que has creado en Configurar una red de VPC.
  • VERSION: el número de versión de GKE. Para usar esta función, debes especificar un número de versión compatible, como la versión 1.29 o una posterior de GKE. También puedes usar la marca --release-channel y especificar un canal de lanzamiento.

Habilitar el controlador de CSI de Parallelstore en un clúster

Para habilitar el controlador en un clúster Estándar de GKE, ejecuta el siguiente comando con la CLI de Google Cloud:

gcloud container clusters update CLUSTER_NAME \
  --location=LOCATION \
  --update-addons=ParallelstoreCsiDriver=ENABLED

Haz los cambios siguientes:

  • CLUSTER_NAME : el nombre de tu clúster.
  • LOCATION: la zona de Compute Engine que contiene el clúster. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.

Asegúrate de que tu clúster de GKE se ejecute en la misma red VPC que configuraste en Configurar una red VPC. Para verificar la red de VPC de un clúster de GKE, puedes consultar laGoogle Cloud consolagcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION) o usar el comando gcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION).

Inhabilitar el controlador de CSI de Parallelstore

Puedes inhabilitar el controlador CSI de Parallelstore en un clúster Autopilot o Standard con la CLI de Google Cloud.

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --update-addons=ParallelstoreCsiDriver=DISABLED

Haz los cambios siguientes:

  • CLUSTER_NAME : el nombre de tu clúster.
  • LOCATION: la zona de Compute Engine que contiene el clúster. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.

Usar fsGroup con volúmenes de Parallelstore

El controlador CSI de Parallelstore admite el cambio de la propiedad del grupo del directorio de nivel raíz del sistema de archivos montado para que coincida con un fsGroup solicitado por el usuario y especificado en el SecurityContext del pod. Esta función solo está disponible en los clústeres de GKE con la versión 1.29.5 o posterior, o la versión 1.30.1 o posterior.

Solución de problemas

Para obtener instrucciones sobre cómo solucionar problemas, consulta la página Solución de problemas de la documentación de Parallelstore.

Siguientes pasos