En esta guía se explica cómo usar volúmenes persistentes de Kubernetes respaldados por tus cubos de Cloud Storage para gestionar los recursos de almacenamiento de tus pods de Kubernetes en Google Kubernetes Engine (GKE). Te recomendamos que uses esta opción de almacenamiento si ya conoces los PersistentVolumes y quieres que sea coherente con las implementaciones que ya tengas y que dependan de este tipo de recurso.
Esta guía está dirigida a administradores de plataformas y operadores que quieran simplificar la gestión del almacenamiento de sus aplicaciones de GKE.
Antes de leer esta página, asegúrate de que conoces los volúmenes persistentes de Kubernetes, los pods de Kubernetes y los contenedores de Cloud Storage.
Si quieres una interfaz basada en pods optimizada que no requiera experiencia previa con volúmenes persistentes de Kubernetes, consulta Montar segmentos de Cloud Storage como volúmenes efímeros de CSI.
Antes de empezar
Asegúrate de que has completado estos requisitos previos:
- Consulta los requisitos y las limitaciones del controlador CSI de Cloud Storage FUSE.
- Crea el segmento de Cloud Storage.
- Habilitar el controlador de CSI de Cloud Storage FUSE
- Configurar el acceso a segmentos de Cloud Storage
Cómo funcionan los volúmenes persistentes de los segmentos de Cloud Storage
Con el aprovisionamiento estático, creas uno o varios objetos PersistentVolume que contienen los detalles del sistema de almacenamiento subyacente. Los pods de tus clústeres pueden consumir el almacenamiento a través de PersistentVolumeClaims.
Para usar un volumen persistente respaldado por un segmento de Cloud Storage, debes realizar las siguientes operaciones:
Definición del almacenamiento: define un PersistentVolume en tu clúster de GKE, incluido el controlador de CSI que se va a usar y los parámetros necesarios. En el caso del controlador CSI de Cloud Storage FUSE, debes especificar el nombre del segmento y otros detalles relevantes.
Si quieres, puedes optimizar el rendimiento de tu controlador de CSI mediante la función almacenamiento en caché de archivos. El almacenamiento en caché de archivos puede mejorar el rendimiento de las aplicaciones de GKE almacenando en caché los archivos de Cloud Storage a los que se accede con frecuencia en un disco local más rápido.
Además, puedes usar la función de descarga paralela para acelerar la lectura de archivos de gran tamaño de Cloud Storage en descargas multiproceso. Puedes usar esta función para mejorar los tiempos de carga de los modelos, sobre todo en lecturas de más de 1 GB.
Invocación del controlador: cuando un PersistentVolumeClaim solicita almacenamiento que coincide con la especificación de PersistentVolume, GKE invoca el controlador de CSI de Cloud Storage FUSE.
Montaje de un bucket: el controlador de CSI monta el bucket en el nodo en el que se ha programado el pod que hace la solicitud. De esta forma, el Pod podrá acceder al contenido del contenedor como un directorio en su sistema de archivos local. Para ajustar cómo se montan los contenedores en el sistema de archivos, puedes usar opciones de montaje. También puedes usar atributos de volumen para configurar el comportamiento específico del controlador CSI de Cloud Storage FUSE.
Reconexión: si el pod se reinicia o se reprograma en otro nodo, el controlador CSI vuelve a montar el mismo contenedor en el nuevo nodo, lo que garantiza la accesibilidad de los datos.
Crear un PersistentVolume
Crea un manifiesto de PersistentVolume con la siguiente especificación:
Pod
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Sustituye los siguientes valores:
- NAMESPACE: el espacio de nombres de Kubernetes en el que quieres desplegar tu pod.
- BUCKET_NAME: el nombre del segmento de Cloud Storage que especificaste al configurar el acceso a los segmentos de Cloud Storage. Puedes especificar un guion bajo (
_
) para montar todos los contenedores a los que pueda acceder la cuenta de servicio de Kubernetes. Para obtener más información, consulta Montaje dinámico en la documentación de Cloud Storage FUSE.
En el archivo de manifiesto de ejemplo se muestran estos ajustes obligatorios:
spec.csi.driver
: usagcsfuse.csi.storage.gke.io
como nombre del controlador de CSI.
También puedes ajustar estas variables:
spec.mountOptions
: pasa opciones de montaje a Cloud Storage FUSE. Especifica las marcas en una cadena separada por comas, sin espacios.spec.csi.volumeAttributes
: pasa atributos de volumen adicionales a Cloud Storage FUSE.
Pod (almacenamiento en caché de archivos)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Sustituye los siguientes valores:
- NAMESPACE: el espacio de nombres de Kubernetes en el que quieres desplegar tu pod.
- BUCKET_NAME: el nombre del segmento de Cloud Storage que especificó al configurar el acceso a los segmentos de Cloud Storage.
Puedes especificar un guion bajo (
_
) para montar todos los contenedores a los que pueda acceder la cuenta de servicio de Kubernetes. Para obtener más información, consulta Montaje dinámico en la documentación de Cloud Storage FUSE.
Pod (descarga paralela)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:enable-parallel-downloads:true - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Sustituye los siguientes valores:
- NAMESPACE: el espacio de nombres de Kubernetes en el que quieres desplegar tu pod.
- BUCKET_NAME: el nombre del segmento de Cloud Storage que especificó al configurar el acceso a los segmentos de Cloud Storage.
Puedes especificar un guion bajo (
_
) para montar todos los contenedores a los que pueda acceder la cuenta de servicio de Kubernetes. Para obtener más información, consulta Montaje dinámico en la documentación de Cloud Storage FUSE.
Aplica el manifiesto al clúster:
kubectl apply -f PV_FILE_PATH
Sustituye PV_FILE_PATH por la ruta a tu archivo YAML.
Crear un PersistentVolumeClaim
Crea un manifiesto PersistentVolumeClaim con la siguiente especificación:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: example-storage-class
Sustituye NAMESPACE por el espacio de nombres de Kubernetes en el que quieras desplegar tu pod.
Para vincular tu PersistentVolume a un PersistentVolumeClaim, comprueba estos ajustes de configuración:
- Los campos
spec.storageClassName
de los manifiestos PersistentVolume y PersistentVolumeClaim deben coincidir. No es necesario que storageClassName haga referencia a un objeto StorageClass. Para vincular la reclamación a un volumen, puedes usar el nombre que quieras, pero no puede estar vacío. - Los campos
spec.accessModes
de los manifiestos PersistentVolume y PersistentVolumeClaim deben coincidir. spec.capacity.storage
del archivo de manifiesto de PersistentVolume debe coincidir conspec.resources.requests.storage
del archivo de manifiesto de PersistentVolumeClaim. Como los segmentos de Cloud Storage no tienen límites de tamaño, puedes introducir cualquier número para la capacidad, pero no puede estar vacío.
- Los campos
Aplica el manifiesto al clúster:
kubectl apply -f PVC_FILE_PATH
Sustituye PVC_FILE_PATH por la ruta a tu archivo YAML.
Consumir el volumen en un pod
Crea un archivo de manifiesto de Pod con las siguientes especificaciones:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-static-pvc namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" spec: containers: - image: busybox name: busybox command: ["sleep"] args: ["infinity"] volumeMounts: - name: gcs-fuse-csi-static mountPath: /data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-static persistentVolumeClaim: claimName: gcs-fuse-csi-static-pvc readOnly: true
Sustituye los siguientes valores:
- NAMESPACE: el espacio de nombres de Kubernetes en el que quieres desplegar tu pod.
- KSA_NAME: el nombre de la cuenta de servicio de Kubernetes que creaste al configurar el acceso a los segmentos de Cloud Storage.
En el archivo de manifiesto de ejemplo se muestran estos ajustes obligatorios:
metadata.annotations
: la anotacióngke-gcsfuse/volumes: "true"
es obligatoria. Consulta Configurar el contenedor sidecar para ver las anotaciones opcionales.
También puedes ajustar estas variables:
spec.containers[n].volumeMonts[n].readOnly
: especifica "true" si solo se pueden leer determinados volúmenes.spec.volumes[n].persistentVolumeClaim.readOnly
: especifica true si todos los montajes de volumen son de solo lectura.
Aplica el manifiesto al clúster:
kubectl apply -f POD_FILE_PATH
Sustituye POD_FILE_PATH por la ruta a tu archivo YAML.
Opcional: Monta el mismo segmento de Cloud Storage con diferentes PersistentVolumes
A partir de la versión 1.33.0-gke.1932000 de GKE, puedes usar varios PersistentVolumes respaldados por el mismo bucket de Cloud Storage. En cada objeto PersistentVolume, debe usar un volumeHandle
único con el formato BUCKET_NAME:UNIQUE_SUFFIX.
Un ejemplo de caso práctico podría ser el montaje de diferentes PersistentVolumes con diferentes opciones de montaje en el mismo Pod, donde cada PersistentVolume hace referencia al mismo segmento de Cloud Storage.
Solucionar problemas
Para obtener más información sobre cómo solucionar problemas con el controlador CSI de Cloud Storage FUSE, consulta la guía de solución de problemas en la documentación del proyecto de GitHub.
Siguientes pasos
- Consulta cómo optimizar el rendimiento del controlador CSI de Cloud Storage FUSE.
- Consulta más ejemplos de uso del controlador CSI en GitHub.
- Consulta más información sobre Cloud Storage FUSE.