En esta guía, se muestra cómo usar los recursos compartidos de Filestore para Google Kubernetes Engine con el controlador de CSI de Filestore para GKE.
Antes de comenzar
Antes de comenzar, completa los pasos de configuración necesarios para usar Filestore.
Habilita el controlador de CSI de Filestore para GKE, versión 1.23 o posterior.
Las versiones del controlador 1.23 a 1.26 admiten hasta 10 recursos compartidos por instancia.
Las versiones del controlador 1.27 o posteriores admiten hasta 80 recursos compartidos por instancia.
Usa los recursos compartidos de Filestore con varias aplicaciones
En esta sección, se muestra cómo implementar dos aplicaciones, un Deployment y un Statefulset, cada una con una StorageClass de recursos compartidos de Filestore. También verás cómo GKE empaqueta en contenedores (un proceso para empaquetar aplicaciones de manera eficiente en tus nodos de GKE) todos los volúmenes en la misma instancia subyacente de Filestore Enterprise.
Usa la StorageClass que proporciona GKE,
enterprise-multishare-rwx
, para crear instancias que admitan hasta 10 recursos compartidos.- Si deseas crear instancias que admitan hasta 80 recursos compartidos, deberás crear una StorageClass personalizada. Para los fines de esta guía, usarás una StorageClass con un límite de diez recursos compartidos por instancia.
Después de habilitar el controlador de CSI de Filestore para GKE, los usuarios pueden acceder a la StorageClass Multishare
enterprise-multishare-rwx
que proporciona GKE con la siguiente configuración. En referencia a esta StorageClass, el controlador de CSI de Filestore para GKE usa el aprovisionamiento de volumen dinámico a fin de crear volúmenes persistentes (PV) automáticamente para reclamaciones de volúmenes persistentes (PVC) nuevas según lo requiera la demanda de carga de trabajo de GKE:kubectl describe sc enterprise-multishare-rwx Name: enterprise-multishare-rwx IsDefaultClass: No Annotations: components.gke.io/component-name=filestorecsi,components.gke.io/component-version=0.7.2,components.gke.io/layer=addon Provisioner: filestore.csi.storage.gke.io Parameters: instance-storageclass-label=enterprise-multishare-rwx,multishare=true,tier=enterprise AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: <none>
Crea una StorageClass personalizada
Si deseas aprovechar el límite de capacidad más reciente de hasta 80 recursos compartidos por instancia de Filestore, crea una StorageClass personalizada en función de la siguiente plantilla:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-filestore-multishare-256
provisioner: filestore.csi.storage.gke.io
parameters:
tier: enterprise
multishare: "true"
max-volume-size: "256Gi"
network: default
allowVolumeExpansion: true
Cuando cambies el nombre de StorageClass, ten en cuenta los siguientes requisitos:
El nombre de la StorageClass debe ser un nombre de subdominio DNS válido.
El nombre StorageClass de varios recursos también se usa como una etiqueta de instancia y debe seguir los lineamientos para asignar nombres a etiquetas.
Si tu aplicación requiere un aprovisionamiento de volumen inmediato, incluye el modo de vinculación de volumen
Immediate
:volumeBindingMode: Immediate
Usa esta especificación, por ejemplo, si no deseas que el aprovisionamiento de volúmenes dependa de la creación de Pods en el clúster de GKE.
A partir de la versión 1.27 del controlador, si deseas asignar más de 10 recursos compartidos por instancia, incluye el parámetro
max-volume-size
y asígnale uno de los valores aceptados de la primera columna:Tamaño máximo del volumen (tamaño del recurso compartido) Cantidad máxima de recursos compartidos por instancia 128 GiB 80 256 GiB 40 512 GiB 20 1024 GiB 10 Por ejemplo, agregar el par clave-valor
max-volume-size: "128Gi"
garantiza que StorageClass asigne hasta 80 recursos compartidos (cada uno desde 10 GiB hasta 128 GiB) a una sola instancia de nivel empresarial de 10 TiB.Esta función es retrocompatible con instancias de Filestore creadas por las versiones 1.23 a 1.26 del controlador de CSI de Filestore para GKE.
Las instancias existentes pueden crear PVC o recursos compartidos nuevos, con un tamaño mínimo extendido de 10 GiB.
La versión 1.27 del controlador de CSI de Filestore para GKE reconoce las instancias empresariales heredadas y les asigna un tamaño máximo de recurso compartido predeterminado de 1,024 GiB (1 TiB). Como resultado, las instancias heredadas están limitadas a un recuento máximo de 10 recursos compartidos por instancia.
Si deseas obtener más información, consulta Recursos compartidos de Filestore para GKE.
Crea una implementación con múltiples réplicas de Pods mediante una sola PVC.
Crea un archivo de configuración YAML similar al siguiente:
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: web-server-multishare labels: app: nginx spec: replicas: 5 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: test-pvc-fs --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc-fs spec: accessModes: - ReadWriteMany storageClassName: enterprise-multishare-rwx resources: requests: storage: 100Gi EOF
Verifica las réplicas de Pods.
a. En la línea de comandos, ejecuta el siguiente comando para verificar el estado de la PVC:
kubectl get pvc
Deberías ver un resultado similar a la siguiente respuesta:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 35m
b. En la línea de comandos, ejecuta el siguiente comando para verificar el estado del pod:
kubectl get pod
Deberías ver algo similar a la siguiente respuesta:
NAME READY STATUS RESTARTS AGE web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-csdbd 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-rgx82 1/1 Running 0 35m web-server-multishare-76c9ffb4b5-zjl27 1/1 Running 0 35m
Escala las réplicas.
a. En la línea de comandos, ejecuta el siguiente comando para editar el Deployment:
kubectl edit deployment web-server-multishare
b. El archivo se abrirá en la línea de comandos. Busca el campo
spec.replicas
y actualiza el valor a10
.c. En la línea de comandos, ejecuta el siguiente comando para ver el cambio aplicado:
kubectl get pod
Deberías ver un resultado similar a la siguiente respuesta:
NAME READY STATUS RESTARTS AGE web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-5ctkf 1/1 Running 0 3s web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-8dwmw 1/1 Running 0 2s web-server-multishare-76c9ffb4b5-csdbd 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-lndcq 1/1 Running 0 2s web-server-multishare-76c9ffb4b5-rgx82 1/1 Running 0 36m web-server-multishare-76c9ffb4b5-vtd6p 1/1 Running 0 3s web-server-multishare-76c9ffb4b5-xm49s 1/1 Running 0 3s web-server-multishare-76c9ffb4b5-zjl27 1/1 Running 0 36m
Observa que se están ejecutando 10 pods.
d. En la línea de comandos, ejecuta el siguiente comando:
kubectl get deployment
Deberías ver un resultado similar a la siguiente respuesta:
NAME READY UP-TO-DATE AVAILABLE AGE web-server-multishare 10/10 10 10 36m
e. En la línea de comandos, ejecuta el siguiente comando para verificar el estado vinculado a la PVC:
kubectl get pvc
Deberías ver un resultado similar a la siguiente respuesta:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 37m
f. En la línea de comandos, ejecuta el siguiente comando para editar el Deployment:
kubectl edit deployment web-server-multishare
g. El archivo se abrirá en la línea de comandos. Busca el campo
spec.replicas
y actualiza el valor a2
.h. En la línea de comandos, ejecuta el siguiente comando para ver el cambio aplicado:
kubectl get pod
Deberías ver un resultado similar a la siguiente respuesta:
NAME READY STATUS RESTARTS AGE web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 38m web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 38m
Implementa un Statefulset
Implementa una segunda aplicación que comparta la instancia de Filestore subyacente.
Para hacerlo, aprovisiona 200 GiB de espacio y valida que use la misma instancia de Filestore subyacente que la primera aplicación.
Luego, escalarás la aplicación a nueve réplicas con 900 GiB en total (9 réplicas con 100 GiB cada una) y comparte la instancia para verificar que GKE use la misma instancia de Filestore.
Crea un archivo de configuración YAML similar al siguiente:
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: test-pvc-multishare mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: test-pvc-multishare spec: accessModes: [ "ReadWriteMany" ] storageClassName: enterprise-multishare-rwx resources: requests: storage: 100Gi EOF
Verifica las réplicas y los volúmenes del Statefulset.
En la línea de comandos, ejecuta el siguiente comando:
kubectl get pod
Deberías ver un resultado similar a la siguiente respuesta:
NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 4m48s web-1 1/1 Running 0 3m32s web-server-multishare-76c9ffb4b5-2dhml 1/1 Running 0 57m web-server-multishare-76c9ffb4b5-7mtcb 1/1 Running 0 57m
Observa que los dos primeros Pods están asociados con el Statefulset. Los últimos dos Pods están asociados con el Deployment.
En la línea de comandos, ejecuta el siguiente comando:
kubectl get statefulset
Deberías ver un resultado similar a la siguiente respuesta:
NAME READY AGE web 2/2 2m8s
En la línea de comandos, ejecuta el siguiente comando:
kubectl get pvc
Deberías ver un resultado similar a la siguiente respuesta:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 54m test-pvc-multishare-web-0 Bound pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7 100Gi RWX enterprise-multishare-rwx 114s test-pvc-multishare-web-1 Bound pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe 100Gi RWX enterprise-multishare-rwx 38s
La PVC
test-pvc-fs
está asociada con el Deploymentweb-server-multishare
.Las PVC
test-pvc-multishare-web-0
ytest-pvc-multishare-web-1
están asociadas con el Statefulset.Escala las réplicas de Statefulset.
Aumenta el recuento de réplicas a nueve. A medida que el recuento aumenta, se crean las PVC correspondientes.
a. En la línea de comandos, ejecuta el siguiente comando:
kubectl edit statefulset web
b. El archivo se abrirá en la línea de comandos. Busca el campo
spec.replicas
y actualiza el valor a9
.c. En la línea de comandos, ejecuta el siguiente comando para ver el cambio aplicado:
kubectl get statefulset
Deberías ver un resultado similar a la siguiente respuesta:
NAME READY AGE web 9/9 13m
d. En la línea de comandos, ejecuta el siguiente comando:
kubectl get deployment
Deberías ver un resultado similar a la siguiente respuesta:
NAME READY UP-TO-DATE AVAILABLE AGE web-server-multishare 2/2 2 2 65m
e. En la línea de comandos, ejecuta el siguiente comando:
kubectl get pvc
Deberías ver un resultado similar a la siguiente respuesta:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-fs Bound pvc-056d769d-a709-4bb2-b6d3-0361871b27a2 100Gi RWX enterprise-multishare-rwx 65m test-pvc-multishare-web-0 Bound pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7 100Gi RWX enterprise-multishare-rwx 13m test-pvc-multishare-web-1 Bound pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe 100Gi RWX enterprise-multishare-rwx 12m test-pvc-multishare-web-2 Bound pvc-3fcbd132-939f-4364-807a-7c8ac6a3e64e 100Gi RWX enterprise-multishare-rwx 5m12s test-pvc-multishare-web-3 Bound pvc-5894afa5-2502-4ee7-9d5c-b7378cb85479 100Gi RWX enterprise-multishare-rwx 4m57s test-pvc-multishare-web-4 Bound pvc-ebbe452b-bc8f-4624-a830-a2094cce0d67 100Gi RWX enterprise-multishare-rwx 4m36s test-pvc-multishare-web-5 Bound pvc-5a73a698-d174-44cb-a3a1-e767966c3417 100Gi RWX enterprise-multishare-rwx 4m20s test-pvc-multishare-web-6 Bound pvc-102da6a9-2ca6-4f9e-9896-8fe14709db7a 100Gi RWX enterprise-multishare-rwx 3m55s test-pvc-multishare-web-7 Bound pvc-160e81cd-c5bf-4ae6-966e-518e8249e02d 100Gi RWX enterprise-multishare-rwx 3m38s test-pvc-multishare-web-8 Bound pvc-9b52d773-2e9a-40de-881c-dc06945ba3d7 100Gi RWX enterprise-multishare-rwx 118s
Verifica el estado de la instancia de Filestore.
Ahora tienes una implementación con dos Pods de réplica y un Statefulset con nueve Pods de réplica, y un total de 10 PVC, cada una con 100 GiB de tamaño. Todos los volúmenes se empaquetan en una sola instancia de recursos compartidos de Filestore.
a. En la línea de comandos, ejecuta el siguiente comando
instances list
:gcloud beta filestore instances list --project=YOUR_PROJECT_ID --region=REGION
Donde:
YOUR_PROJECT_ID es el nombre del proyecto que se usa. Por ejemplo,
my-project
REGION es el nombre de la región que se usa. Por ejemplo,
us-central1
Deberías ver un resultado similar a la siguiente respuesta:
INSTANCE_NAME LOCATION TIER CAPACITY_GB FILE_SHARE_NAME IP_ADDRESS STATE CREATE_TIME fs-a767cef8-738e-4c8e-b70b-09cbb872d016 us-central1 ENTERPRISE 1024 N/A 10.192.53.2 READY 2022-06-21T21:15:30
b. En la línea de comandos, ejecuta el siguiente comando
instances describe
:gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION capacityGb: '1024' capacityStepSizeGb: '256' createTime: '2022-06-21T21:15:30.464237089Z' labels: storage_gke_io_created-by: filestore_csi_storage_gke_io storage_gke_io_storage-class-id: enterprise-multishare-rwx maxCapacityGb: '10240' maxShareCount: '10' multiShareEnabled: true name: projects/YOUR_PROJECT_ID/locations/REGION/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016 networks: - connectMode: DIRECT_PEERING ipAddresses: - 10.192.53.2 modes: - MODE_IPV4 network: csi-filestore-test-network reservedIpRange: 10.192.53.0/26 state: READY tier: ENTERPRISE
Donde:
Expande una PVC y verifica la instancia de Filestore
En esta sección, se muestra cómo expandir una PVC existente y verificar el tamaño de la instancia de Filestore.
Expande una PVC.
Las PVC, respaldadas por recursos compartidos en una instancia de recursos compartidos de Filestore, pueden crecer al tamaño máximo especificado en el parámetro
max-volume-size
. Para verificar esto, expande uno de los volúmenes asociados con el Statefulset mientras el Pod lo usa.Desde la línea de comandos, ejecuta el siguiente comando para verificar el tamaño actual de la PVC de la réplica 0:
kubectl get pvc test-pvc-multishare-web-0 -o json { "apiVersion": "v1", "kind": "PersistentVolumeClaim", "metadata": { "annotations": { "pv.kubernetes.io/bind-completed": "yes", "pv.kubernetes.io/bound-by-controller": "yes", "volume.beta.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io", "volume.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io" }, "creationTimestamp": "2022-06-21T22:07:42Z", "finalizers": [ "kubernetes.io/pvc-protection" ], "labels": { "app": "nginx" }, "name": "test-pvc-multishare-web-0", "namespace": "default", "resourceVersion": "48395", "uid": "7aa21b5a-5343-4547-b7d7-414c16af15a7" }, "spec": { "accessModes": [ "ReadWriteMany" ], "resources": { "requests": { "storage": "100Gi" } }, "storageClassName": "enterprise-multishare-rwx", "volumeMode": "Filesystem", "volumeName": "pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7" }, "status": { "accessModes": [ "ReadWriteMany" ], "capacity": { "storage": "100Gi" }, "phase": "Bound" } }
Desde la línea de comandos, ejecuta el siguiente comando para aumentar el tamaño a 500 GiB:
kubectl edit pvc test-pvc-multishare-web-0
El archivo se abrirá en la línea de comandos. Busca el campo
spec.resources.requests.storage
y actualiza el valor a500Gi
.En la línea de comandos, ejecuta el siguiente comando para ver el cambio aplicado:
kubectl get pvc test-pvc-multishare-web-0
Deberías ver un resultado similar a la siguiente respuesta:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc-multishare-web-0 Bound pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7 500Gi RWX enterprise-multishare-rwx 28m
El controlador de CSI de Filestore aceptó la solicitud; primero expande la instancia de Filestore subyacente y, luego, expande el recurso compartido que respalda la PVC.
En particular, el controlador de CSI de Filestore expandió la instancia a 1536 Gi de forma automática para adaptarse al nuevo tamaño compartido de 500 Gi.
En la línea de comandos, ejecuta el siguiente comando
instances describe
para verificar la capacidad de la instancia de Filestore:gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION capacityGb: '1536' capacityStepSizeGb: '256' createTime: '2022-06-21T21:15:30.464237089Z' labels: storage_gke_io_created-by: filestore_csi_storage_gke_io storage_gke_io_storage-class-id: enterprise-multishare-rwx maxCapacityGb: '10240' maxShareCount: '10' multiShareEnabled: true name: projects/YOUR_PROJECT_ID/locations/us-central1/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016 networks: - connectMode: DIRECT_PEERING ipAddresses: - 10.192.53.2 modes: - MODE_IPV4 network: csi-filestore-test-network reservedIpRange: 10.192.53.0/26 state: READY tier: ENTERPRISE
Donde:
Aprovisionamiento dinámico en una VPC compartida
El controlador de CSI de Filestore para GKE admite el aprovisionamiento dinámico de volúmenes en un proyecto de servicio en una VPC compartida. La siguiente sección muestra cómo usar el controlador de CSI de Filestore para aprovisionar volúmenes de forma dinámica en instancias de recursos compartidos de Filestore en un proyecto de servicio en una red de VPC compartida.
Completa los pasos de configuración para una red de VPC compartida y el acceso privado a servicios.
Crea una StorageClass para aprovisionar de forma dinámica volúmenes respaldados por una instancia de recursos compartidos de Filestore en una VPC compartida.
Ejecuta el siguiente comando para implementar un recurso
StorageClass
:cat <<EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-filestore-multishare-sharedvpc provisioner: filestore.csi.storage.gke.io parameters: network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME" connect-mode: PRIVATE_SERVICE_ACCESS tier: enterprise multishare: "true" allowVolumeExpansion: true EOF
Donde:
HOST_PROJECT_ID es el ID o el nombre del proyecto host de la red de VPC compartida. Por ejemplo,
my-host-project
SHARED_VPC_NAME es el nombre de la red de VPC compartida. Por ejemplo,
my-shared-vpc
Si deseas implementar el recurso dentro de un rango de direcciones IP reservado, agrega la siguiente línea a los parámetros que se usaron en el comando:
reserved-ip-range: RESERVED_NAME
En el ejemplo anterior, RESERVED_NAME es el nombre del rango de direcciones IP reservado dentro del cual se puede aprovisionar una instancia de Filestore. Por ejemplo,
filestore-reserved-ip-range
Si se especifica un rango de IP reservado, debe ser un rango de direcciones con nombre en lugar de un valor CIDR directo.Para obtener más información, consulta Asigna rangos de direcciones IP o Configura un rango de direcciones IP reservado. Para ver un ejemplo de cómo crear un nombre reservado con la consola de Google Cloud, consulta Crea una asignación de IP.
Crea una implementación.
Ejecuta el siguiente comando para crear un recurso
Deployment
:cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: web-server-multishare labels: app: nginx spec: replicas: 5 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: test-pvc-fs-sharedvpc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc-fs-sharedvpc spec: accessModes: - ReadWriteMany storageClassName: csi-filestore-multishare-sharedvpc resources: requests: storage: 100Gi EOF
Instancias de Filestore con CMEK habilitada
Puedes crear volúmenes de GKE alojados en instancias de recursos compartidos de Filestore con CMEK habilitada. En esta sección, verás cómo configurar una clave de encriptación administrada por el cliente (CMEK) para tu instancia de Filestore.
Los detalles de la clave administrada por el cliente se pueden proporcionar en la StorageClass. Cualquier instancia que el controlador de CSI de Filestore cree de forma dinámica, que haga referencia a esta StorageClass, tendrá habilitada la CMEK.
Crea una StorageClass con CMEK habilitada.
a. Ejecuta el siguiente comando:
cat <<EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-filestore-multishare-cmek provisioner: filestore.csi.storage.gke.io parameters: tier: enterprise multishare: "true" instance-encryption-kms-key: projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME allowVolumeExpansion: true EOF
Donde:
KEY_PROJECT_ID es el nombre del proyecto en el que se encuentra la clave. Por ejemplo,
my-key-project
REGION es el nombre de la región que se usa. Por ejemplo,
us-central1
RING_NAME es el nombre del llavero de claves. Por ejemplo,
my-key-ring-name
KEY_NAME es el nombre de la clave. Por ejemplo,
my-key-name
Crea una implementación.
b. Ejecuta el siguiente comando para crear un recurso
Deployment
:cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: web-server-multishare labels: app: nginx spec: replicas: 5 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: test-pvc-fs-cmek --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc-fs-cmek spec: accessModes: - ReadWriteMany storageClassName: csi-filestore-multishare-cmek resources: requests: storage: 100Gi EOF
Asigna PVC a instancias de Filestore
En esta sección, verás cómo asignar tus PVC a las instancias de Filestore.
Con las instancias de recursos compartidos de Filestore, cada PVC se aloja en una instancia de Filestore mediante el controlador de CSI de Filestore. Los detalles de la instancia subyacente de Filestore que aloja el volumen y el recurso compartido que representa el volumen de Kubernetes se capturan en el campo volumeHandle
de la especificación de los volúmenes persistentes. El formato del controlador de volumen es el siguiente:
modeMultishare/<storageclass-prefix>/<project>/<region>/<filestore-instance-name>/<filestore-share-name>
El siguiente comando de kubectl
se puede usar para determinar con rapidez las asignaciones entre una PVC, un PV, una instancia de Filestore y un recurso compartido de Filestore.
En la línea de comandos, ejecuta el siguiente comando:
kubectl get pv -o jsonpath='{range .items[*]}{"pv="}{.metadata.name}{",pvc="}{.spec.claimRef.name}{",volumeHandle="}{.spec.csi.volumeHandle}{"\n"}{end}'
Deberías ver un resultado similar a la siguiente respuesta:
pv=pvc-67ad9abd-f25e-4130-b7ca-64d28bd29525,pvc=test-pvc-multishare,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_67ad9abd_f25e_4130_b7ca_64d28bd29525
pv=pvc-c80f4de0-9916-4957-b8ae-b21206650ac0,pvc=test-pvc-fs-sharedvpc,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_c80f4de0_9916_4957_b8ae_b21206650ac0
Donde:
- YOUR_PROJECT_ID es el nombre del proyecto que se usa. Por ejemplo,
my-project
Observa que dos volúmenes persistentes en el clúster se alojan en una sola instancia de Filestore.
¿Qué sigue?
- Crea una instancia en una red de VPC compartida en proyectos de servicio.
- Compara las ventajas relativas de almacenamiento de bloques, archivos y objetos.
- Opciones de almacenamiento para cargas de trabajo de HPC en Google Cloud.