Con el controlador CSI de Cloud Storage FUSE, tus cargas de trabajo de GKE pueden acceder a los buckets de Cloud Storage como un sistema de archivos local. El controlador CSI integra Cloud Storage con GKE y simplifica la forma en que tus aplicaciones en contenedores interactúan con grandes conjuntos de datos almacenados en buckets. El controlador CSI proporciona una interfaz estándar para el almacenamiento de GKE. En este documento, prepararás tu entorno y conectarás tus clústeres de GKE a los buckets de Cloud Storage con el controlador CSI de Cloud Storage FUSE.
Este documento está dirigido a desarrolladores, administradores y especialistas en almacenamiento que integran cargas de trabajo de GKE con el almacenamiento de objetos. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en Cloud de Confiance by S3NS el contenido, consulta Roles y tareas comunes del usuario de GKE.
Crea el bucket de Cloud Storage
Si aún no lo hiciste, crea tus buckets de Cloud Storage. Activarás estos buckets como volúmenes en tu clúster de GKE. Para mejorar el rendimiento, establece el tipo de ubicación en Región y selecciona una región que coincida con tu clúster de GKE.
Habilita el controlador CSI de Cloud Storage FUSE
Sigue estos pasos, según si usas clústeres de Autopilot o Estándar de GKE. Te recomendamos que uses un clúster en modo Autopilot para una experiencia de Kubernetes completamente administrada. Para elegir el modo que mejor se adapte a tus cargas de trabajo, consulta Elige un modo de operación de GKE.
Autopilot
El controlador CSI de Cloud Storage FUSE está habilitado de forma predeterminada para los clústeres de Autopilot. Puedes ir a Configura el acceso a los buckets de Cloud Storage.
Estándar
Si tu clúster Estándar tiene habilitado el controlador CSI de Cloud Storage FUSE, ve a Configura el acceso a los buckets de Cloud Storage.
El controlador CSI de Cloud Storage FUSE no está habilitado de forma predeterminada en los clústeres Estándar. Para crear un clúster Estándar con el controlador CSI de Cloud Storage FUSE habilitado, puedes usar el gcloud container clusters create comando:
gcloud container clusters create CLUSTER_NAME \
--addons GcsFuseCsiDriver \
--cluster-version=VERSION \
--location=LOCATION \
--workload-pool=PROJECT_ID.s3ns.svc.id.goog
Reemplaza lo siguiente:
CLUSTER_NAME: El nombre de tu clúster.VERSION: el número de versión de GKE. Debes seleccionar 1.24 o una versión posterior.LOCATION: la región o zona de Compute Engine para el clúster.PROJECT_ID: ID del proyecto
Para habilitar el controlador en un clúster Estándar existente, usa el gcloud container clusters update
comando:
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED \
--location=LOCATION
Para verificar que el controlador CSI de Cloud Storage FUSE esté habilitado en tu clúster, ejecuta el siguiente comando:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"
Configura el acceso a los buckets de Cloud Storage
El controlador CSI del FUSE de Cloud Storage usa la federación de identidades para cargas de trabajo para GKE, de modo que puedas establecer permisos detallados sobre cómo tus pods de GKE pueden acceder a los datos almacenados en Cloud Storage.
Para que tu clúster de GKE pueda acceder a los buckets de Cloud Storage, autentícate con Workload Identity Federation for GKE con el bucket de Cloud Storage que deseas activar en la especificación de tu Pod:
- Si no tienes habilitada la federación de identidades para cargas de trabajo para GKE, sigue estos pasos para habilitarla. Si deseas usar un grupo de nodos existente, habilita de forma manual la federación de identidades para cargas de trabajo para GKE en tu grupo de nodos después de habilitar la federación de identidades para cargas de trabajo para GKE en tu clúster.
Obtén credenciales para el clúster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONReemplaza lo siguiente:
CLUSTER_NAME: el nombre del clúster que tiene habilitada la federación de identidades para cargas de trabajo para GKE.LOCATION: la región o zona de Compute Engine para el clúster.
Crea un espacio de nombres para usar en la cuenta de servicio de Kubernetes. También puedes usar el espacio de nombres
defaulto cualquier espacio de nombres existente.kubectl create namespace NAMESPACEReemplaza
NAMESPACEes el nombre del espacio de nombres de Kubernetes para la ServiceAccount.Crea una cuenta de servicio de Kubernetes para que tu aplicación use: También puedes usar cualquier ServiceAccount de Kubernetes existente en cualquier espacio de nombres, incluida la ServiceAccount de Kubernetes
default.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACEReemplaza
KSA_NAMEpor el nombre de tu ServiceAccount de Kubernetes.Otorga uno de los roles de IAM para Cloud Storage a la ServiceAccount de Kubernetes. Sigue estos pasos, según si otorgas a la ServiceAccount de Kubernetes acceso solo a un bucket de Cloud Storage específico o acceso global a todos los buckets del proyecto.
Acceso a un bucket específico
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.s3ns.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"Reemplaza lo siguiente:
BUCKET_NAME: el nombre de tu bucket de Cloud Storage.PROJECT_NUMBER: El número de proyecto numérico del clúster de GKE. Para encontrar el número de tu proyecto, consulta Identifica proyectos.PROJECT_ID: el ID del proyecto de tu clúster de GKE.NAMESPACEes el nombre del espacio de nombres de Kubernetes para la ServiceAccount.KSA_NAME: Es el nombre de tu ServiceAccount de Kubernetes nueva.ROLE_NAME: Es el rol de IAM que se asignará a la ServiceAccount de Kubernetes.- Para cargas de trabajo de solo lectura, usa el rol Visualizador de objetos de almacenamiento (
roles/storage.objectViewer). - Para cargas de trabajo de lectura y escritura, usa el rol de usuario de objetos de almacenamiento (
roles/storage.objectUser).
- Para cargas de trabajo de solo lectura, usa el rol Visualizador de objetos de almacenamiento (
Acceso global bucket
gcloud projects add-iam-policy-binding GCS_PROJECT \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.s3ns.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"Reemplaza lo siguiente:
GCS_PROJECT: Es el ID del proyecto de tus buckets de Cloud Storage.PROJECT_NUMBER: El número de proyecto numérico del clúster de GKE. Para encontrar el número de tu proyecto, consulta Identifica proyectos.PROJECT_ID: el ID del proyecto de tu clúster de GKE.NAMESPACEes el nombre del espacio de nombres de Kubernetes para la ServiceAccount.KSA_NAME: Es el nombre de tu ServiceAccount de Kubernetes nueva.ROLE_NAME: Es el rol de IAM que se asignará a la ServiceAccount de Kubernetes.- Para cargas de trabajo de solo lectura, usa el rol Visualizador de objetos de almacenamiento (
roles/storage.objectViewer). - Para cargas de trabajo de lectura y escritura, usa el rol de usuario de objetos de almacenamiento (
roles/storage.objectUser).
- Para cargas de trabajo de solo lectura, usa el rol Visualizador de objetos de almacenamiento (
Configura el acceso para pods con red de host
Para las versiones de clúster de GKE anteriores a 1.33.3-gke.1226000, el controlador CSI de Cloud Storage FUSE no admite pods que se ejecutan en la red del host (hostNetwork: true) debido a las restricciones de Workload Identity Federation for GKE. Sin embargo, para versiones posteriores de GKE, puedes configurar la autenticación segura para los pods habilitados para hostNetwork cuando usas el controlador CSI de Cloud Storage FUSE para activar buckets de Cloud Storage. La compatibilidad con la red de host solo está disponible en clústeres de GKE Estándar.
Asegúrate de que tu clúster de GKE cumpla con los siguientes requisitos:
- Tanto el plano de control como los grupos de nodos de tu clúster de GKE Estándar deben tener la versión
1.33.3-gke.1226000o posterior. - Habilita Workload Identity en el clúster.
- Otorga los permisos de IAM necesarios a la cuenta de servicio de Kubernetes que usa tu pod habilitado para
hostNetworkpara acceder a tu bucket de Cloud Storage. Para obtener más información, consulta Autentícate en Cloud Storage FUSE.
Especifica el atributo de volumen hostNetworkPodKSA: "true" en tu definición de pod o PersistentVolume para permitir que tus pods HostNetwork accedan a los volúmenes de Cloud Storage. La configuración exacta difiere según la forma en que administres el contenedor sidecar de Cloud Storage FUSE.
Archivos adicionales administrados
Esta sección se aplica si GKE inserta y administra automáticamente el contenedor del archivo adicional del FUSE de Cloud Storage en tus pods. Esta opción es la configuración predeterminada y recomendada para el controlador CSI de Cloud Storage FUSE.
Volumen efímero
El siguiente manifiesto de pod configura un volumen efímero para que un pod HostNetwork acceda a un bucket de Cloud Storage.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
Volumen persistente
El siguiente manifiesto de PV configura un PV para que un pod HostNetwork acceda a un bucket de Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
Archivos adicionales privados
Esta sección se aplica si administras de forma manual el contenedor del archivo adicional del FUSE de Cloud Storage dentro de tus pods o usas una imagen de archivo adicional personalizada.
Asegúrate de que tu imagen de archivo adicional se base en la versión v1.17.2 o posterior del controlador CSI de Cloud Storage FUSE.
Volumen efímero
El siguiente manifiesto de pod configura un volumen efímero para que un pod HostNetwork acceda a un bucket de Cloud Storage.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
En el campo identityProvider, reemplaza lo siguiente:
PROJECT_ID: Es el ID del Cloud de Confiance by S3NS proyecto de.LOCATION: Es la ubicación de tu clúster.CLUSTER_NAME: Es el nombre del clúster de GKE Estándar.
Volumen persistente
El siguiente manifiesto de PV configura un PV para que un pod HostNetwork acceda a un bucket de Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
En el campo identityProvider, reemplaza lo siguiente:
PROJECT_ID: Es el ID del Cloud de Confiance by S3NS proyecto de.LOCATION: Es la ubicación de tu clúster.CLUSTER_NAME: Es el nombre del clúster de GKE Estándar.
¿Qué sigue?
- Soluciona problemas de Cloud Storage FUSE
- Obtén información para activar buckets de Cloud Storage especificándolos en línea con la especificación del pod.
- Obtén información para activar buckets de Cloud Storage con un recurso PersistentVolume.
- Obtén más información para configurar aplicaciones para usar la federación de identidades para cargas de trabajo para GKE.
- Optimiza automáticamente el rendimiento con los perfiles de Cloud Storage FUSE.
- Optimiza de forma manual Cloud Storage FUSE para el rendimiento.