Accede a instancias de Parallelstore existentes con el controlador de CSI de Parallelstore de GKE


Parallelstore solo está disponible por invitación. Si deseas solicitar acceso a Parallelstore en tu proyecto de Google Cloud, comunícate con tu representante de ventas.

En esta guía, se describe cómo puedes conectarte a una instancia de Parallelstore existente con el controlador de CSI de Parallelstore de GKE con aprovisionamiento estático. Esto te permite acceder a instancias de Parallelstore existentes y completamente administradas como volúmenes para tus cargas de trabajo con estado, de forma controlada y predecible.

Antes de comenzar

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

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • 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.

Accede a una instancia de Parallelstore existente con el controlador de CSI de Parallelstore

Si ya aprovisionaste 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 típico para acceder a una instancia de Parallelstore existente con el controlador de CSI de Parallelstore:

  1. Crea un PersistentVolume que haga referencia a la instancia de Parallelstore.
  2. Usa un objeto PersistentVolumeClaim para acceder al volumen
  3. (Opcional) Configura los recursos para el contenedor de sidecar
  4. Crea una carga de trabajo que consuma el volumen

Crea un PersistentVolume

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

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

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

    Reemplaza lo siguiente:

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

    El resultado debería ser similar al siguiente. Asegúrate de anotar 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 como un archivo llamado parallelstore-pv.yaml:

    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
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud
    • LOCATION: la ubicación zonal de tu instancia de Parallelstore. Debes especificar una zona compatible para el controlador de CSI de Parallelstore.
    • INSTANCE_NAME: el nombre de tu instancia de Parallelstore. Un ejemplo de un valor 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 Parallelstore, por ejemplo, 10.51.110.2,10.51.110.4,10.51.110.3.
    • NETWORK_NAME: la red de VPC a la que se puede acceder a tu instancia de Parallelstore.
    • STORAGECLASS_NAME: Es el nombre de tu StorageClass. Puede ser una cadena vacía, pero debe coincidir con la especificación de tu PersistentVolumeClaim.
    • STORAGE_SIZE: el tamaño de almacenamiento, por ejemplo, 12000Gi.

    Para obtener la lista completa de los campos admitidos en el objeto PersistentVolume, consulta la documentación de referencia de CSI de Parallelstore.

  3. Ejecuta el siguiente comando para crear el PersistentVolume:

    kubectl apply -f parallelstore-pv.yaml
    

Usa un objeto PersistentVolumeClaim para acceder al volumen

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

En el siguiente archivo de manifiesto, se muestra un ejemplo de cómo crear un PersistentVolumeClaim en el modo de acceso ReadWriteMany que hace referencia a la StorageClass que creaste antes.

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

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

    Reemplaza lo siguiente:

    • STORAGECLASS_NAME: el nombre de tu StorageClass. Debe coincidir con la especificación de tu PersistentVolume.
    • STORAGE_SIZE: el tamaño de almacenamiento, por ejemplo, 12000Gi. Debe coincidir con la especificación de tu PersistentVolume.
  2. Ejecuta el siguiente comando para crear la PersistentVolumeClaim:

      kubectl create -f parallelstore-pvc.yaml
    

(Opcional) Configura los recursos para el contenedor de sidecar

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 de CSI inserta automáticamente un contenedor de sidecar llamado gke-parallelstore-sidecar en tu Pod. Este contenedor de sidecar activa la instancia de Parallelstore en tu carga de trabajo.

De forma predeterminada, el contenedor del sidecar está configurado con las siguientes solicitudes de recursos, sin establecer los límites de recursos:

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

Para reemplazar estos valores, puedes especificar la anotación gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request] de manera opcional, 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 las siguientes consideraciones cuando decidas la cantidad de recursos para asignar:

  • Si se establece uno de los valores de solicitud o límite y no se establece otro, GKE los establece en el mismo valor especificado.
  • Asigna más CPU al contenedor del archivo adicional si tus cargas de trabajo necesitan una capacidad de procesamiento mayor. Una CPU insuficiente causará una limitación de E/S.
  • Puedes usar el valor “0” para anular cualquier límite de recursos en los clústeres Standard. Por ejemplo, gke-parallelstore/memory-limit: "0" quita el límite de memoria del contenedor del contenedor lateral. Esto es útil cuando no puedes decidir la cantidad de recursos que gke-parallelstore-sidecar necesita para tus cargas de trabajo y deseas permitir que el contenedor secundario 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 de PersistentVolumeClaim que creaste antes.

Varios Pods pueden compartir el mismo recurso PersistentVolumeClaim.

  1. Guarda el siguiente manifiesto como 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 PersistentVolumeClaim antes de comenzar a ejecutarse. Esta operación puede tardar varios minutos en completarse.

Administra el controlador de CSI de Parallelstore

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

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

Para habilitar el controlador de CSI de Parallelstore cuando creas un clúster nuevo estándar, ejecuta el siguiente comando con Google Cloud CLI:

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

Reemplaza lo siguiente:

  • CLUSTER_NAME: El nombre de tu clúster.
  • LOCATION: La zona de Compute Engine que contiene el clúster. Debes especificar una zona compatible para el controlador de CSI de Parallelstore.
  • NETWORK_NAME: Es el nombre de la red de VPC que creaste en Configura una red de VPC.
  • VERSION: el número de versión de GKE. Debes especificar un número de versión compatible para usar esta función, como GKE versión 1.29 o una posterior. Como alternativa, puedes usar la marca --release-channel y especificar un canal de versiones.

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

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

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

Reemplaza lo siguiente:

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

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

Inhabilita el controlador de CSI de Parallelstore

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

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

Reemplaza lo siguiente:

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

Usa fsGroup con volúmenes de Parallelstore

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

Soluciona problemas

Para obtener orientación sobre la solución de problemas, consulta la página Solución de problemas en la documentación de Parallelstore.

¿Qué sigue?