El controlador de CSI de Filestore es la forma principal de usar las instancias de Filestore con Google Kubernetes Engine (GKE). El controlador de CSI de Filestore proporciona una experiencia completamente administrada con la tecnología del controlador de CSI de Google Cloud Filestore de código abierto.
La versión del controlador de CSI de Filestore está vinculada a los números de la versión secundaria de Kubernetes. La versión del controlador de CSI de Filestore suele ser el controlador más reciente disponible en el momento en que se lanza la versión secundaria de Kubernetes. Los controladores se actualizan de forma automática cuando el clúster se actualiza al último parche de GKE.
Ventajas
El controlador de CSI de Filestore proporciona los siguientes beneficios:
Tienes acceso al almacenamiento de NFS completamente administrado a través de las APIs de Kubernetes (
kubectl
).Puedes usar el controlador de CSI de Filestore de GKE para aprovisionar de forma dinámica tus PersistentVolumes.
Puedes usar instantáneas de volumen con el controlador de CSI de GKE Filestore. Las instantáneas de volumen de CSI se pueden usar para crear copias de seguridad de Filestore.
Una copia de seguridad de Filestore crea una copia diferencial del recurso compartido de archivos, incluidos todos los datos y metadatos de los archivos, y la almacena por separado. Puedes restablecer esta copia solo en una instancia nueva de Filestore. No se admite el restablecimiento a una instancia de Filestore existente. Puedes usar la API de instantáneas de volumen de CSI para activar las copias de seguridad de Filestore si agregas un campo
type:backup
en la clase de instantáneas de volumen.Puedes usar la expansión de volumen con el controlador de CSI de GKE Filestore. La expansión de volumen te permite cambiar el tamaño de la capacidad de tu volumen.
Puede acceder a instancias de Filestore existentes mediante instancias de Filestore aprovisionadas previamente en cargas de trabajo de Kubernetes. También puedes crear o borrar instancias de Filestore de forma dinámica y usarlas en cargas de trabajo de Kubernetes con un StorageClass o un Deployment.
Admite recursos compartidos de Filestore para GKE. Esta función te permite crear una instancia de Filestore y asignar varios PersistentVolumes activados por NFS más pequeños de forma simultánea en cualquier cantidad de clústeres de GKE.
Requisitos
- Para usar el controlador de CSI de Filestore, tus clústeres deben usar la versión 1.21 de GKE o una posterior.
- Para usar la capacidad de recursos compartidos de Filestore, tus clústeres deben usar la versión 1.23 de GKE o una posterior.
- El controlador CSI de Filestore solo es compatible con clústeres que usan Linux; los nodos de Windows Server no son compatibles.
- El tamaño mínimo de instancia para Filestore es de al menos 1 TiB. El tamaño mínimo de la instancia depende del nivel de servicio de Filestore que seleccionaste. Para obtener más información, consulta los niveles de servicio.
- Filestore usa el protocolo del sistema de archivos NFSv3 en la instancia de Filestore y admite cualquier cliente que sea compatible con NFSv3.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Cloud Filestore 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.
- Si deseas usar Filestore en una red de VPC compartida, consulta las instrucciones de configuración adicionales en Usa Filestore con VPC compartida.
Habilita el controlador de CSI de Filestore en un clúster nuevo
Para habilitar el controlador de CSI del controlador de CSI de Filestore cuando creas un clúster nuevo estándar, sigue estos pasos con Google Cloud CLI o la consola de Google Cloud.
gcloud
gcloud container clusters create CLUSTER_NAME \
--addons=GcpFilestoreCsiDriver \
--cluster-version=VERSION
Reemplaza lo siguiente:
CLUSTER_NAME
: El nombre de tu clúster.VERSION
: el número de versión de GKE. Debes seleccionar la versión 1.21 o una versión posterior para usar esta característica. Como alternativa, puedes usar la marca--release-channel
y especificar un canal de versiones.
Consola
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
Haz clic en add_box Crear.
Selecciona el modo de clúster Estándar y, a continuación, haz clic en Configurar.
Configura el clúster para que se adapte a tus necesidades.
En el panel de navegación, en Clúster, haz clic en Funciones.
Selecciona la casilla de verificación Habilitar el controlador de CSI de Filestore.
Haz clic en Crear.
Si deseas usar Filestore en una red de VPC compartida, consulta Habilita el controlador de CSI de Filestore en un clúster nuevo con VPC compartida.
Después de habilitar el controlador de CSI de Filestore, puedes usarlo en volúmenes de Kubernetes con el controlador y el nombre del aprovisionador: filestore.csi.storage.gke.io
.
Habilita el controlador de CSI de Filestore en un clúster existente
Para habilitar el controlador de CSI de Filestore en clústeres existentes, usa Google Cloud CLI o la consola de Google Cloud.
Para habilitar el controlador en un clúster existente, completa los siguientes pasos:
gcloud
gcloud container clusters update CLUSTER_NAME \
--update-addons=GcpFilestoreCsiDriver=ENABLED
Reemplaza CLUSTER_NAME
por el nombre del clúster
existente.
Console
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En Características, junto al campo Controlador de CSI de Filestore, haz clic en edit Editar controlador de CSI de Filestore.
Selecciona la casilla de verificación Habilitar el controlador de CSI de Filestore.
Haz clic en Guardar cambios.
Inhabilita el controlador de CSI de Filestore
Puedes inhabilitar el controlador CSI de Filestore en un clúster existente de Autopilot o estándar con Google CLI o la consola de Google Cloud.
gcloud
gcloud container clusters update CLUSTER_NAME \
--update-addons=GcpFilestoreCsiDriver=DISABLED \
--region REGION
Reemplaza los siguientes valores:
CLUSTER_NAME
: es el nombre del clúster existente.REGION
: la región para tu clúster (comous-central1
).
Consola
En la consola de Google Cloud, ve al menú de Google Kubernetes Engine.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En Características, junto al campo Controlador de CSI de Filestore, haz clic en edit Editar controlador de CSI de Filestore.
Desmarca la casilla de verificación Habilitar el controlador de CSI de Filestore.
Haz clic en Guardar cambios.
Accede a instancias de Filestore preexistentes con el controlador CSI de Filestore
En esta sección, se describe el proceso típico para usar un volumen de Kubernetes a fin de acceder a instancias de Filestore preexistentes con el controlador CSI de Filestore en GKE:
Crea un PersistentVolume y un PersistentVolumeClaim para acceder a la instancia
Crea un archivo de manifiesto como el que se muestra en el siguiente ejemplo y asígnale el nombre
preprov-filestore.yaml
:apiVersion: v1 kind: PersistentVolume metadata: name: PV_NAME spec: storageClassName: "" capacity: storage: 1Ti accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem csi: driver: filestore.csi.storage.gke.io volumeHandle: "modeInstance/FILESTORE_INSTANCE_LOCATION/FILESTORE_INSTANCE_NAME/FILESTORE_SHARE_NAME" volumeAttributes: ip: FILESTORE_INSTANCE_IP volume: FILESTORE_SHARE_NAME --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany storageClassName: "" volumeName: PV_NAME resources: requests: storage: 1Ti
Para crear los recursos
PersistentVolumeClaim
yPersistentVolume
según el archivo de manifiestopreprov-filestore.yaml
, ejecuta el siguiente comando:kubectl apply -f preprov-filestore.yaml
Luego, crea un Deployment que consuma el volumen.
Crea un volumen con el controlador CSI de Filestore
En las siguientes secciones, se describe el proceso típico para usar un volumen de Kubernetes respaldado por un controlador de Filestore CSI en GKE.
- Crea un StorageClass
- Usa un objeto PersistentVolumeClaim para acceder al volumen
- Crea un Deployment que consuma el volumen
Crea un StorageClass
Después de habilitar el controlador CSI de Filestore, GKE instala de forma automática las siguientes StorageClasses para aprovisionar instancias de Filestore:
zonal-rwx
, con el nivel de Filestore zonal. Solo disponible para el rango de capacidad más alto. Esta StorageClass está disponible en los clústeres de GKE que ejecutan la versión 1.27 o posterior.enterprise-rwx
, con el nivel de Filestore empresarial, en el que cada PersistentVolume de Kubernetes se asigna a una instancia de Filestore. Esta StorageClass está disponible en los clústeres de GKE que ejecutan la versión 1.23 o posterior.enterprise-multishare-rwx
, con el nivel de Filestore empresarial, en el que cada PersistentVolume de Kubernetes se asigna a un recurso compartido de una instancia de Filestore determinada. Esta StorageClass está disponible en los clústeres de GKE que ejecutan la versión 1.23 o posterior. A fin de obtener más información, consulta Recursos compartidos de Filestore para Google Kubernetes Engine.standard-rwx
, que usa el nivel de servicio HDD básico de Filestore.premium-rwx
, con el nivel de servicio SSD básico de Filestore.
Para encontrar el nombre de la StorageClass
instalada, ejecuta el siguiente comando:
kubectl get sc
También puedes instalar una StorageClass
diferente que use el controlador de CSI de Filestore mediante la adición de filestore.csi.storage.gke.io
en el campo provisioner
.
Filestore necesita saber en qué red crear la nueva instancia. Las StorageClasses instaladas de forma automática usan la red predeterminada creada para los clústeres de GKE. Si borraste esta red o quieres usar una diferente, debes crear una clase de almacenamiento nueva como se describe en la siguiente sección. De lo contrario, las clases de almacenamiento instaladas automáticamente no funcionarán.
Guarda el siguiente manifiesto como
filestore-example-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: filestore-example provisioner: filestore.csi.storage.gke.io volumeBindingMode: Immediate allowVolumeExpansion: true parameters: tier: standard network: default
En el manifiesto, considera la siguiente configuración de parámetros:
- Establecer
volumeBindingMode
enImmediate
permite que el aprovisionamiento del volumen comience de inmediato. Esto es posible porque se puede acceder a las instancias de Filestore desde cualquier zona. Por lo tanto, GKE no necesita saber la zona en la que está programado el Pod, en contraste con el disco persistente de Compute Engine. Cuando se establece enWaitForFirstConsumer
, GKE comienza a aprovisionar solo después de que se programe el Pod. Para obtener más información, consulta VolumeBindingMode. - Cualquier nivel de Filestore se puede
especificar en el parámetro
tier
(por ejemplo,BASIC_HDD
,BASIC_SSD
,ZONAL
,REGIONAL
oENTERPRISE
). - El parámetro
network
se puede usar cuando se aprovisionan instancias de Filestore en VPC no predeterminadas. Las VPC no predeterminadas requieren que se configuren reglas de firewall especiales.
- Establecer
Para crear un recurso
StorageClass
basado en el archivo de manifiestofilestore-example-class.yaml
, ejecuta el siguiente comando:kubectl create -f filestore-example-class.yaml
Si deseas usar Filestore en una red de VPC compartida, consulta Crea una StorageClass cuando uses el controlador de CSI de Filestore con VPC compartida.
Usa un objeto PersistentVolumeClaim para acceder al volumen
Puede crear un recurso PersistentVolumeClaim
que haga referencia a StorageClass
del controlador de CSI de Filestore.
Puedes usar una StorageClass
preinstalada o personalizada.
En el siguiente archivo de manifiesto de ejemplo, se crea una PersistentVolumeClaim
que
hace referencia a la StorageClass
llamada filestore-example
.
Guarda el siguiente archivo de manifiesto como
pvc-example.yaml
:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany storageClassName: filestore-example resources: requests: storage: 1Ti
Para crear un recurso
PersistentVolume
basado en el archivo de manifiestopvc-example.yaml
, ejecuta el siguiente comando:kubectl create -f pvc-example.yaml
Crea un Deployment que consuma el volumen
En el siguiente ejemplo de manifiesto de Deployment, se consume el recurso PersistentVolume
llamado pvc-example.yaml
.
Varios Pods pueden compartir el mismo recurso PersistentVolumeClaim
.
Guarda el siguiente manifiesto como
filestore-example-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: web-server-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /usr/share/nginx/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: podpvc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany storageClassName: filestore-example resources: requests: storage: 1Ti
Para crear una implementación basada en el archivo de manifiesto
filestore-example-deployment.yaml
, ejecuta el siguiente comando:kubectl apply -f filestore-example-deployment.yaml
Confirma que el objeto Deployment se haya creado correctamente:
kubectl get deployment
Las instancias de Filestore pueden tardar un poco en completar el aprovisionamiento. Antes de eso, las implementaciones no informarán un estado
READY
. Para verificar el progreso, supervisa el estado de PVC ejecutando el siguiente comando:kubectl get pvc
Deberías ver que la PVC alcance un estado
BOUND
cuando se complete el aprovisionamiento de volúmenes.
Etiqueta instancias de Filestore
Puedes usar etiquetas para agrupar instancias relacionadas y almacenar metadatos de una instancia. Una etiqueta es un par clave-valor que te ayuda a organizar tus instancias de Filestore. Puedes adjuntar una etiqueta a cada recurso y, luego, filtrar los recursos según las etiquetas.
Puedes proporcionar etiquetas con la clave labels
en StorageClass.parameters
.
Una instancia de Filestore puede etiquetarse con información sobre para qué PersistentVolumeClaim
/PersistentVolume
se creó la instancia. Las claves y valores de etiqueta personalizados deben cumplir con la convención de nombres de etiquetas.
Consulta el ejemplo de clase de almacenamiento de Kubernetes para aplicar etiquetas personalizadas a la instancia de Filestore.
Usa fsgroup con volúmenes de Filestore
Kubernetes usa fsGroup
a fin de cambiar los permisos y la propiedad del volumen para hacer coincidir un fsGroup
solicitado por el usuario en el SecurityContext del Pod.
Una fsGroup
es un grupo complementario que se aplica a todos los contenedores en un Pod.
Puedes aplicar un fsgroup a los volúmenes aprovisionados mediante el controlador de CSI de Filestore.
Configure reglas de acceso IP con volúmenes de Filestore
Filestore admite reglas de control de acceso basadas en IP para volúmenes.
Estas reglas se pueden configurar directamente a través de la API de Filestore o
a través del controlador de CSI de Filestore cuando se crea un volumen. Puedes proporcionar la
configuración seleccionada en formato JSON en la StorageClass con el
parámetro nfs-export-options-on-create
.
En el siguiente manifiesto de ejemplo, se muestra cómo especificar la configuración:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: filestore-example
provisioner: filestore.csi.storage.gke.io
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
tier: "enterprise"
nfs-export-options-on-create: '[
{
"accessMode": "READ_WRITE",
"ipRanges": [
"10.0.0.0/24"
],
"squashMode": "NO_ROOT_SQUASH"
},
{
"accessMode": "READ_ONLY",
"ipRanges": [
"10.0.0.0/28"
],
}
]'
Asegúrate de especificar al menos un rango de administradores con permisos READ_WRITE
y squashMode
configurado como NO_ROOT_SQUASH
.
Después de crear un volumen, solo puedes modificar las reglas de acceso a través de la API de Filestore.
Usa Filestore con VPC compartida
En esta sección, se explica cómo usar una instancia de Filestore en una red de VPC compartida desde un proyecto de servicio.
Configura un clúster con VPC compartida.
Para configurar tus clústeres con una red de VPC compartida, sigue estos pasos:
- Crea un proyecto host y de servicio.
- Habilita la API de Google Kubernetes Engine en los proyectos host y de servicio.
- En tu proyecto host, crea una red y una subred.
- Habilita la VPC compartida en el proyecto host.
- En el proyecto host, otorga la vinculación de rol de usuario
HostServiceAgent
para la cuenta de servicio de GKE del proyecto de servicio. - Habilita el acceso privado a servicios en la red de VPC compartida
Habilita el controlador de CSI de Filestore en un clúster nuevo con VPC compartida
Para habilitar el controlador de CSI de Filestore en un clúster nuevo con VPC compartida, sigue estos pasos:
Verifica los rangos secundarios y las subredes que se pueden usar. Cuando creas un clúster, debes especificar una subred y los rangos de direcciones IP secundarios que se usarán para los pods y los objetos Service del clúster.
gcloud container subnets list-usable \ --project=SERVICE_PROJECT_ID \ --network-project=HOST_PROJECT_ID
El resultado es similar al siguiente:
PROJECT REGION NETWORK SUBNET RANGE HOST_PROJECT_ID us-central1 shared-net tier-1 10.0.4.0/22 ┌──────────────────────┬───────────────┬─────────────────────────────┐ │ SECONDARY_RANGE_NAME │ IP_CIDR_RANGE │ STATUS │ ├──────────────────────┼───────────────┼─────────────────────────────┤ │ tier-1-pods │ 10.4.0.0/14 │ usable for pods or services │ │ tier-1-services │ 10.0.32.0/20 │ usable for pods or services │ └──────────────────────┴───────────────┴─────────────────────────────┘
Crea un clúster de GKE. En los siguientes ejemplos, se muestra cómo puedes usar gcloud CLI para crear un clúster de Autopilot o Standard configurado para la VPC compartida. En los siguientes ejemplos, se usan los nombres de red, subred y rango de Crea una red y dos subredes.
Autopilot
gcloud container clusters create-auto tier-1-cluster \ --project=SERVICE_PROJECT_ID \ --region=COMPUTE_REGION \ --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \ --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \ --cluster-secondary-range-name=tier-1-pods \ --services-secondary-range-name=tier-1-services
Estándar
gcloud container clusters create tier-1-cluster \ --project=SERVICE_PROJECT_ID \ --zone=COMPUTE_REGION \ --enable-ip-alias \ --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \ --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \ --cluster-secondary-range-name=tier-1-pods \ --services-secondary-range-name=tier-1-services \ --addons=GcpFilestoreCsiDriver
Crea reglas de firewall para permitir la comunicación entre nodos, pods y objetos Service en tu clúster. En el siguiente ejemplo, se muestra cómo crear una regla de firewall llamada
my-shared-net-rule-2
.gcloud compute firewall-rules create my-shared-net-rule-2 \ --project HOST_PROJECT_ID \ --network=NETWORK_NAME \ --allow=tcp,udp \ --direction=INGRESS \ --source-ranges=10.0.4.0/22,10.4.0.0/14,10.0.32.0/20
En el ejemplo, los valores de IP de los rangos de origen provienen del paso anterior en el que verificaste las subredes y los rangos secundarios que se pueden usar.
Crea una StorageClass cuando uses el controlador de CSI de Filestore con VPC compartida
En el siguiente ejemplo, se muestra cómo puedes crear una StorageClass cuando uses el controlador de CSI de Filestore con VPC compartida:
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: filestore-sharedvpc-example
provisioner: filestore.csi.storage.gke.io
parameters:
network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
connect-mode: PRIVATE_SERVICE_ACCESS
reserved-ip-range: RESERVED_IP_RANGE_NAME
allowVolumeExpansion: true
EOF
Reemplaza lo siguiente:
HOST_PROJECT_ID
: El ID o el nombre del proyecto host de la red de VPC compartida.SHARED_VPC_NAME
: Es el nombre de la red de VPC compartida que creaste antes.RESERVED_IP_RANGE_NAME
: El nombre del rango de direcciones IP reservadas específico para aprovisionar la instancia de Filestore. Este campo es opcional. Si se especifica un rango de direcciones IP reservado, debe ser un rango de direcciones con nombre en lugar de un valor CIDR directo.
Si deseas aprovisionar un volumen respaldado por recursos compartidos de Filestore en clústeres de GKE que ejecutan la versión 1.23 o posterior, consulta Optimiza el almacenamiento con recursos compartidos de Filestore para GKE.
Vuelve a conectar los volúmenes de único recurso compartido de Filestore
Si usas Filestore con el HDD básico, la SSD básico o el nivel empresarial (de un solo recurso compartido), puedes seguir estas instrucciones para volver a conectar tu instancia de Filestore existente a tus cargas de trabajo de GKE.
Para encontrar los detalles de la instancia de Filestore aprovisionada previamente, sigue las instrucciones en Obtén información sobre una instancia específica.
Vuelve a implementar la especificación de PersistentVolume. En el campo
volumeAttributes
, modifica los siguientes campos para usar los mismos valores que la instancia de Filestore del paso 1:ip
: Modifica este valor a la dirección IP de la instancia de Filestore aprovisionada previamente.volume
: Modifica este valor con el nombre compartido de la instancia de Filestore aprovisionada previamente.
Vuelve a implementar la especificación de PersistentVolumeClaim. En
volumeName
, asegúrate de hacer referencia al mismo nombre de PersistentVolume que en el paso 2.Ejecuta
kubectl get pvc
para verificar el estado de vinculación de PersistentVolumeClaim y PersistentVolume.Vuelve a implementar la especificación de tu pod y asegúrate de que tu pod pueda acceder al recurso compartido de Filestore nuevamente.
¿Qué sigue?
- Obtén más información sobre cómo implementar una carga de trabajo de Filestore con estado en GKE.
- Obtén más información para compartir una instancia empresarial de Filestore con varios volúmenes persistentes.
- Obtén más información sobre cómo usar la expansión de volúmenes.
- Obtén información sobre cómo usar las instantáneas de volumen.
- Obtén más información sobre el controlador CSI en GitHub.