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.
- Consulta la descripción general del controlador de CSI para conocer las limitaciones y los requisitos.
- Crea una instancia de Parallelstore si aún no lo hiciste.
- Configura una red de VPC.
- Si deseas usar un clúster de GKE Standard, asegúrate de habilitar el controlador de CSI.
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:
- Crea un PersistentVolume que haga referencia a la instancia de Parallelstore.
- Usa un objeto PersistentVolumeClaim para acceder al volumen
- (Opcional) Configura los recursos para el contenedor de sidecar
- 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.
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
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.
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.
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.
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 quegke-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.
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
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?
- Explora la documentación de referencia de CSI de Parallelstore.
- Obtén información para usar la biblioteca de intercepción de Parallelstore y mejorar el rendimiento de la carga de trabajo.
- Obtén más información para transferir datos a Parallelstore desde Cloud Storage.
- Consulta el instructivo para entrenar un modelo de TensorFlow con Keras en GKE.