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
.
- Consulta la descripción general del controlador CSI para ver las limitaciones y los requisitos.
- Configura una red de VPC.
- Si quieres usar un clúster Estándar de GKE, asegúrate de habilitar el controlador de CSI.
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:
- (Opcional) Crea un StorageClass.
- Usa un PersistentVolumeClaim para acceder al volumen.
- (Opcional) Configura los recursos del contenedor sidecar.
- 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:
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.
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.
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).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, 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 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 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
- 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.