En esta guía, se describe cómo puedes crear un nuevo volumen de Kubernetes respaldado por un controlador de CSI de Parallelstore en GKE con aprovisionamiento dinámico. Esto te permite crear almacenamiento respaldado por instancias de Parallelstore completamente administradas a pedido y acceder a ellas como volúmenes para tus cargas de trabajo con estado.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Parallelstore y la API de Google Kubernetes Engine. Habilita las APIs
- 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.
- Configura una red de VPC.
- Si deseas usar un clúster de GKE Standard, asegúrate de habilitar el controlador de CSI.
Crea un volumen nuevo con el controlador de CSI de Parallelstore
En las siguientes secciones, se describe el proceso típico para crear un volumen de Kubernetes respaldado por un controlador de CSI de Parallelstore en GKE:
- (Opcional) Crea una StorageClass.
- 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 una clase de almacenamiento (opcional)
Cuando se habilita el controlador de CSI de Parallelstore, GKE crea automáticamente una StorageClass llamada parallelstore-rwx
para aprovisionar instancias de Parallelstore. Esta StorageClass dirige al controlador de CSI a aprovisionar instancias de Parallelstore en la misma región que tu clúster de GKE para garantizar un rendimiento de E/S óptimo.
De manera opcional, puedes crear una StorageClass personalizada con una topología específica. Para hacerlo, sigue estos pasos:
Guarda el siguiente manifiesto StorageClass como un archivo llamado
parallelstore-class.yaml
: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
Reemplaza lo siguiente:
- LOCATION: La zona de Compute Engine que contiene el clúster. Debes especificar una zona compatible para el controlador de CSI de Parallelstore.
Para obtener la lista completa de los campos admitidos en StorageClass, consulta la documentación de referencia de CSI de Parallelstore.
Para crear una StorageClass, ejecuta este comando:
kubectl create -f parallelstore-class.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
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: parallelstore-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: STORAGE_SIZE storageClassName: parallelstore-class
Reemplaza STORAGE_SIZE por el tamaño de almacenamiento, por ejemplo,
12000Gi
. El valor debe estar en el rango de 12,000 GiB a 100,000 GiB (en múltiplos de 4,000 GiB).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, GKE configura el contenedor del sidecar 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, ambos se establecerán 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 esperará hasta que se 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 la versión 1.29 de GKE 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 deGoogle Cloud o a través del 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.
- Obtén información para usar el GKE Volume Populator y automatizar la transferencia de datos de un almacenamiento de origen de bucket de Cloud Storage a un PersistentVolumeClaim de destino respaldado por una instancia de Parallelstore.
- Consulta el instructivo para entrenar un modelo de TensorFlow con Keras en GKE.