Conectarse a una instancia de Parallelstore 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 puedes conectarte a una instancia de Parallelstore con el controlador CSI de Parallelstore de GKE mediante el aprovisionamiento estático. De esta forma, puedes acceder a las instancias de Parallelstore totalmente gestionadas que ya tengas como volúmenes para tus cargas de trabajo con estado de una forma controlada y predecible.

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.

Acceder a una instancia de Parallelstore con el controlador de CSI de Parallelstore

Si ya has aprovisionado una instancia de Parallelstore en la misma red que tu clúster de GKE, puedes seguir estas instrucciones para aprovisionar de forma estática un PersistentVolume que haga referencia a tu instancia.

En las siguientes secciones se describe el proceso habitual para acceder a una instancia de Parallelstore mediante el controlador CSI de Parallelstore:

  1. Crea un PersistentVolume que haga referencia a la instancia de Parallelstore..
  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.

Crear un PersistentVolume

En esta sección se muestra un ejemplo de cómo crear un PersistentVolume que haga referencia a una instancia de Parallelstore.

  1. Ejecuta el siguiente comando para localizar tu instancia de Parallelstore.

    gcloud beta parallelstore instances list \
        --project=PROJECT_ID \
        --location=LOCATION
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto. Google Cloud
    • LOCATION: la zona de Compute Engine que contiene el clúster. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.

    La salida debería ser similar a la siguiente. Anota el nombre de la instancia de Parallelstore y los puntos de acceso de IP antes de continuar con el siguiente paso.

    NAME                                                                                                     capacity  DESCRIPTION  CREATE_TIME                     UPDATE_TIME                     STATE   network  RESERVED_IP_RANGE  ACCESS_POINTS
    projects/my-project/locations/us-central1-a/instances/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563  12000                  2024-03-06T19:18:26.036463730Z  2024-03-06T19:24:44.561441556Z  ACTIVE                              10.51.110.2,10.51.110.4,10.51.110.3
    
  2. Guarda el siguiente manifiesto en un archivo llamado parallelstore-pv.yaml:

    Montaje de pod

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: parallelstore-pv
    spec:
      storageClassName: "STORAGECLASS_NAME"
      capacity:
        storage: STORAGE_SIZE
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: parallelstore.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container"
        volumeAttributes:
          accessPoints: ACCESS_POINTS
          network: NETWORK_NAME
      claimRef:
        name: parallelstore-pvc
        namespace: default
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto. Google Cloud
    • LOCATION: la ubicación zonal de tu instancia de ParallelStore. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.
    • INSTANCE_NAME: el nombre de tu instancia de Parallelstore. Un ejemplo de valor de volumeHandle válido es "my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container".
    • ACCESS_POINTS: los puntos de acceso de tu instancia de Parallel Store. Por ejemplo, 10.51.110.2,10.51.110.4,10.51.110.3.
    • NETWORK_NAME: la red de VPC en la que se puede acceder a tu instancia de Parallel Store.
    • STORAGECLASS_NAME: el nombre de tu StorageClass. El valor puede ser una cadena vacía, pero debe coincidir con la especificación de tu PersistentVolumeClaim.
    • STORAGE_SIZE: el tamaño del almacenamiento (por ejemplo, 12000Gi).

    Para ver la lista completa de los campos admitidos en el objeto PersistentVolume, consulte 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 punto de montaje mejora la escalabilidad, ya que 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 atributo de volumen 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 del límite, pero no el del 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: v1
    kind: PersistentVolume
    metadata:
      name: parallelstore-pv
    spec:
      storageClassName: "STORAGECLASS_NAME"
      capacity:
        storage: STORAGE_SIZE
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: parallelstore.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container"
        volumeAttributes:
          accessPoints: ACCESS_POINTS
          network: NETWORK_NAME
          mountLocality: node
          dfuseCPURequest: DFUSE_CPU_REQUEST
          dfuseMemoryRequest: DFUSE_MEMORY_REQUEST
          dfuseCPULimit: DFUSE_CPU_LIMIT
          dfuseMemoryLimit: DFUSE_MEMORY_LIMIT
      claimRef:
        name: parallelstore-pvc
        namespace: default
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto. Google Cloud
    • LOCATION: la ubicación zonal de tu instancia de ParallelStore. Debes especificar una zona admitida para el controlador de CSI de Parallelstore.
    • INSTANCE_NAME: el nombre de tu instancia de Parallelstore. Un ejemplo de valor de volumeHandle válido es "my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container".
    • ACCESS_POINTS: los puntos de acceso de tu instancia de Parallel Store. Por ejemplo, 10.51.110.2,10.51.110.4,10.51.110.3.
    • NETWORK_NAME: la red de VPC en la que se puede acceder a tu instancia de Parallel Store.
    • STORAGECLASS_NAME: el nombre de tu StorageClass. El valor puede ser una cadena vacía, pero debe coincidir con la especificación de tu PersistentVolumeClaim.
    • STORAGE_SIZE: el tamaño del almacenamiento (por ejemplo, 12000Gi).
    • 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 el objeto PersistentVolume, consulte la documentación de referencia de CSI de Parallelstore.

  3. Para crear el PersistentVolume, ejecuta este comando:

    kubectl apply -f parallelstore-pv.yaml
    

(Opcional) Monta la misma instancia de Parallelstore con diferentes opciones de montaje

Nota: Esta función no es compatible con los montajes de nodos.

Puedes montar la misma instancia de Parallelstore con diferentes opciones de montaje. Por ejemplo, puedes montar la misma instancia de Parallelstore con el almacenamiento en caché habilitado y con el almacenamiento en caché inhabilitado en el mismo pod.

Para montar la misma instancia de Parallelstore con diferentes opciones de montaje, debes crear un PersistentVolume para cada opción de montaje. Utilice la siguiente sintaxis para el campo volumeHandle del objeto PersistentVolume: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container:RANDOM_SUFFIX", donde RANDOM_SUFFIX es una cadena aleatoria de su elección.

Por ejemplo: "my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container:xyz123"

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:

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

    Haz los cambios siguientes:

    • STORAGECLASS_NAME: el nombre de tu StorageClass. Debe coincidir con la especificación de tu PersistentVolume.
    • STORAGE_SIZE: tamaño del almacenamiento. Por ejemplo, 12000Gi. Debe coincidir con la especificación de tu PersistentVolume.
  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, el contenedor sidecar se configura 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 el otro no, GKE asigna a ambos 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 de 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 espera hasta que GKE aprovisione el 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