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
.
- Consulta la descripción general del controlador CSI para ver las limitaciones y los requisitos.
- Crea una instancia de Parallelstore si aún no lo has hecho.
- Configura una red de VPC.
- Si quieres usar un clúster Estándar de GKE, asegúrate de habilitar el controlador de CSI.
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:
- Crea un PersistentVolume que haga referencia a la instancia de Parallelstore..
- Usa un PersistentVolumeClaim para acceder al volumen.
- (Opcional) Configura los recursos del contenedor sidecar.
- 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.
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
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.
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
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.
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.
Para crear el PersistentVolumeClaim, ejecuta este comando:
kubectl create -f parallelstore-pvc.yaml
(Opcional) Configurar recursos para el contenedor 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 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 necesitagke-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.
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
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
- Consulta la documentación de referencia de CSI de Parallelstore.
- Consulta cómo usar la biblioteca de intercepción Parallelstore para mejorar el rendimiento de las cargas de trabajo.
- Consulta cómo transferir datos a Parallelstore desde Cloud Storage.
- Consulta cómo usar GKE Volume Populator para automatizar la transferencia de datos desde un almacenamiento de origen de un segmento de Cloud Storage a un PersistentVolumeClaim de destino respaldado por una instancia de Parallelstore.
- Prueba el tutorial para entrenar un modelo de TensorFlow con Keras en GKE.