En esta página se explica cómo crear copias de seguridad y restaurar el almacenamiento de Filestore subyacente asociado a tus clústeres de GKE mediante las copias de seguridad de volúmenes de Kubernetes.
Crear una instantánea de volumen de Kubernetes es lo mismo que crear una copia de seguridad de Filestore.
Para obtener más información, consulta el artículo Acerca de las capturas de volúmenes de Kubernetes.
Requisitos
Para usar capturas de volumen en GKE, debes cumplir los siguientes requisitos:
Debes desplegar el controlador de CSI para Filestore. Solo se admiten los siguientes niveles de servicio de Filestore:
- HDD básico con GKE 1.21 o versiones posteriores
- HDD básico (de 100 GiB a 63,9 TiB) con la versión 1.33 de GKE o una posterior
- SSD básica con GKE 1.21 o una versión posterior
- Zonal (de 1 a 9,75 TiB) con la versión 1.31 o posterior de GKE
- Zonal (de 10 a 100 TiB) con GKE versión 1.27 o posterior
- Regional con la versión 1.33 de GKE o una posterior
- Enterprise con la versión 1.25 o posterior de GKE
Usa las versiones 1.17 o posteriores del plano de control. Para usar el controlador de CSI para Filestore en un
VolumeSnapshot
, usa el número de versión de GKE aplicable a tu nivel de servicio.
- Tener un
PersistentVolumeClaim
que quieras usar para una captura. ElPersistentVolume
que uses para una fuente de captura debe gestionarse mediante un controlador CSI. Para comprobar si estás usando un controlador CSI, verifica que la especificaciónPersistentVolume
tenga una seccióncsi
condriver: pd.csi.storage.gke.io
ofilestore.csi.storage.gke.io
. Si elPersistentVolume
se aprovisiona dinámicamente mediante el controlador CSI, tal como se describe en las siguientes secciones, lo gestiona el controlador CSI.
Limitaciones
Los volúmenes de instantánea tienen las mismas restricciones de tamaño que los volúmenes normales. Por ejemplo, las copias de seguridad de Filestore deben tener un tamaño igual o superior a 1 TiB en el nivel HDD básico.
El controlador CSI de Filestore no admite el aprovisionamiento dinámico ni los flujos de trabajo de copia de seguridad del nivel de servicio regional de Filestore:
Solo puedes crear una copia de seguridad de un recurso compartido por instancia a la vez. En cuanto a los grupos de almacenamiento, las solicitudes de copia de seguridad emitidas desde dos recursos compartidos diferentes de dos instancias de Filestore distintas se ejecutarán simultáneamente.
Las copias de seguridad de Singleshare solo se pueden restaurar en volúmenes de Singleshare. Con el controlador de CSI para Filestore, solo puedes restaurar un volumen de un solo recurso compartido en una nueva instancia de Filestore.
- La nueva instancia debe usar el mismo nivel de servicio que la copia de seguridad.
- La nueva instancia debe tener la misma capacidad mínima que la copia de seguridad.
No se admiten las operaciones de Filestore
backup restore
en el origen ni en una instancia de Filestore. Para ver una lista completa de las limitaciones de las funciones, consulta Limitaciones de la función de copia de seguridad de Filestore.No se admiten las copias de seguridad compartidas con varios usuarios.
Antes de empezar
Antes de empezar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
Crear y usar una captura de volumen
En los ejemplos de este documento se muestra cómo realizar las siguientes tareas:
- Crea un
PersistentVolumeClaim
y unDeployment
. - Añade un archivo al
PersistentVolume
que usa elDeployment
. - Crea una
VolumeSnapshotClass
para configurar la captura. - Crea una captura de volumen de
PersistentVolume
. - Elimina el archivo de prueba.
- Restaura el
PersistentVolume
a la captura que has creado. - Verifica que la restauración se haya realizado correctamente.
Para usar una copia de seguridad de un volumen, debes completar los siguientes pasos:
- Crea un objeto
VolumeSnapshotClass
para especificar el controlador CSI y la política de eliminación de tu snapshot. - Crea un objeto
VolumeSnapshot
para solicitar una captura de unPersistentVolumeClaim
. - Haz referencia a la
VolumeSnapshot
en unPersistentVolumeClaim
para restaurar un volumen a esa captura o crear un volumen nuevo a partir de la captura.
Crear un PersistentVolumeClaim
y un Deployment
Para crear el objeto
PersistentVolumeClaim
, guarda el siguiente manifiesto comomy-pvc.yaml
:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1Ti
En este ejemplo se crea un PVC de Filestore de nivel Enterprise. Para obtener más información, consulta Acceder a instancias de Filestore con el controlador de CSI de Filestore.
En el caso de
spec.storageClassName
, puedes especificar cualquier clase de almacenamiento que utilice un controlador CSI compatible.Aplica el archivo de manifiesto:
kubectl apply -f my-pvc.yaml
Para crear un
Deployment
, guarda el siguiente archivo de manifiesto comomy-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app spec: selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: sdk-volume mountPath: /usr/share/hello/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: my-pvc
Aplica el archivo de manifiesto:
kubectl apply -f my-deployment.yaml
Comprueba el estado de la
Deployment
:kubectl get deployment hello-app
Puede que el
Deployment
tarde un poco en estar listo. Puedes ejecutar el comando anterior hasta que veas un resultado similar al siguiente:NAME READY UP-TO-DATE AVAILABLE AGE hello-app 1/1 1 1 2m55s
Añade un archivo de prueba al volumen
Enumera los
Pods
de laDeployment
:kubectl get pods -l app=hello-app
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56s
Crea un archivo de prueba en un
Pod
:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'
Sustituye
POD_NAME
por el nombre de laPod
.Comprueba que el archivo exista:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'
El resultado debería ser similar al siguiente:
Hello World!
Crear un objeto VolumeSnapshotClass
Crea un objeto VolumeSnapshotClass
para especificar el controlador CSI y deletionPolicy
de tu instantánea de volumen. Puedes hacer referencia a objetos VolumeSnapshotClass
al crear objetos VolumeSnapshot
.
Guarda el siguiente archivo de manifiesto como
volumesnapshotclass.yaml
.Filestore
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: filestore.csi.storage.gke.io parameters: type: backup deletionPolicy: Delete
En este ejemplo:
- El controlador de CSI usa el campo
driver
para aprovisionar la instantánea. En este ejemplo,filestore.csi.storage.gke.io
usa el controlador de CSI para Filestore. - El campo
deletionPolicy
indica a GKE qué debe hacer con el objetoVolumeSnapshotContent
y la instantánea subyacente cuando se elimine el objetoVolumeSnapshot
enlazado. EspecificaDelete
para eliminar el objetoVolumeSnapshotContent
y la instantánea subyacente. EspecificaRetain
si quieres conservar elVolumeSnapshotContent
y la instantánea subyacente.
- El controlador de CSI usa el campo
Aplica el archivo de manifiesto:
kubectl apply -f volumesnapshotclass.yaml
Crear un VolumeSnapshot
Un objeto VolumeSnapshot
es una solicitud de una instantánea de un objeto PersistentVolumeClaim
. Cuando creas un objeto VolumeSnapshot
, GKE lo crea y lo vincula automáticamente con un objeto VolumeSnapshotContent
, que es un recurso de tu clúster, como un objeto PersistentVolume
.
Guarda el siguiente archivo de manifiesto como
volumesnapshot.yaml
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvc
Aplica el archivo de manifiesto:
kubectl apply -f volumesnapshot.yaml
Después de crear una
Volume
instantánea, GKE crea un objetoVolumeSnapshotContent
correspondiente en el clúster. Este objeto almacena la instantánea y las vinculaciones de los objetosVolumeSnapshot
. No interactúas directamente con los objetosVolumeSnapshotContents
.Confirma que GKE ha creado el objeto
VolumeSnapshotContents
:kubectl get volumesnapshotcontents
El resultado debería ser similar al siguiente:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Una vez que se haya creado el contenido de la captura Volume
, el controlador CSI que hayas especificado en VolumeSnapshotClass
creará una captura en el sistema de almacenamiento correspondiente. Una vez que GKE crea una instantánea en el sistema de almacenamiento y la vincula a un objeto VolumeSnapshot
en el clúster, la instantánea está lista para usarse. Para comprobar el estado, ejecuta el siguiente comando:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Si la instantánea está lista para usarse, el resultado será similar al siguiente:
NAME READY
my-snapshot true
Eliminar el archivo de prueba
Elimina el archivo de prueba que has creado:
kubectl exec POD_NAME \ -- sh -c 'rm /usr/share/hello/hello.txt'
Comprueba que el archivo ya no existe:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'
El resultado debería ser similar al siguiente:
cat: /usr/share/hello/hello.txt: No such file or directory
Restaurar la captura del volumen
Guarda el siguiente archivo de manifiesto como
pvc-restore.yaml
:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1Ti
Aplica el archivo de manifiesto:
kubectl apply -f pvc-restore.yaml
Actualiza el archivo
my-deployment.yaml
para usar el nuevoPersistentVolumeClaim
:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restore
Aplica el archivo de manifiesto actualizado:
kubectl apply -f my-deployment.yaml
Comprobar que la instantánea se ha restaurado correctamente
Obtén el nombre del nuevo
Pod
que GKE crea para elDeployment
actualizado:kubectl get pods -l app=hello-app
Verifica que el archivo de prueba exista:
kubectl exec NEW_POD_NAME \
-- sh -c 'cat /usr/share/hello/hello.txt'
Sustituye NEW_POD_NAME
por el nombre del nuevo Pod
que ha creado GKE.
El resultado debería ser similar al siguiente:
Hello World!
Importar una copia de seguridad
Puedes usar una instantánea de volumen creada fuera del clúster actual para aprovisionar manualmente el objeto VolumeSnapshotContents
. Por ejemplo, puedes rellenar un volumen en GKE con una instantánea de otroGoogle Cloud recurso creado en otro clúster.
Busca el nombre de la copia.
Google Cloud consola
Google Cloud CLI
Ejecuta el siguiente comando:
gcloud compute snapshots list
El resultado debería ser similar al siguiente:
NAME DISK_SIZE_GB SRC_DISK STATUS snapshot-5e6af474-cbcc-49ed-b53f-32262959a0a0 1 us-central1-b/disks/pvc-69f80fca-bb06-4519-9e7d-b26f45c1f4aa READY
Guarda el siguiente manifiesto
VolumeSnapshot
comorestored-snapshot.yaml
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: restored-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: volumeSnapshotContentName: restored-snapshot-content
Aplica el archivo de manifiesto:
kubectl apply -f restored-snapshot.yaml
Guarda el siguiente manifiesto
VolumeSnapshotContent
comorestored-snapshot-content.yaml
. Sustituye el camposnapshotHandle
por el ID de tu proyecto y el nombre de la instantánea. TantovolumeSnapshotRef.name
comovolumeSnapshotRef.namespace
deben apuntar alVolumeSnapshot
creado anteriormente para que el enlace bidireccional sea válido.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: restored-snapshot-content spec: deletionPolicy: Retain driver: filestore.csi.storage.gke.io source: snapshotHandle: projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME volumeSnapshotRef: kind: VolumeSnapshot name: restored-snapshot namespace: default
Aplica el archivo de manifiesto:
kubectl apply -f restored-snapshot-content.yaml
Guarda el siguiente manifiesto
PersistentVolumeClaim
comorestored-pvc.yaml
. El controlador de almacenamiento de Kubernetes buscará unVolumeSnapshot
llamadorestored-snapshot
y, a continuación, intentará encontrar o crear dinámicamente unPersistentVolume
como fuente de datos. Después, puedes usar este PVC en un pod para acceder a los datos restaurados.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restored-pvc spec: dataSource: name: restored-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Aplica el archivo de manifiesto:
kubectl apply -f restored-pvc.yaml
Guarda el siguiente manifiesto
Pod
comorestored-pod.yaml
haciendo referencia a laPersistentVolumeClaim
. El controlador de CSI aprovisionará unPersistentVolume
y lo rellenará con la información de la instantánea.apiVersion: v1 kind: Pod metadata: name: restored-pod spec: containers: - name: busybox image: busybox args: - sleep - "3600" volumeMounts: - name: source-data mountPath: /demo/data volumes: - name: source-data persistentVolumeClaim: claimName: restored-pvc readOnly: false
Aplica el archivo de manifiesto:
kubectl apply -f restored-pod.yaml
Verifica que el archivo se haya restaurado:
kubectl exec restored-pod -- sh -c 'cat /demo/data/hello.txt'
Limpieza
Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, sigue estos pasos.
Elimina el
VolumeSnapshot
:kubectl delete volumesnapshot my-snapshot
Elimina el
VolumeSnapshotClass
:kubectl delete volumesnapshotclass my-snapshotclass
Elimina el
Deployment
:kubectl delete deployments hello-app
Elimina los
PersistentVolumeClaim
objetos:kubectl delete pvc my-pvc pvc-restore
Siguientes pasos
- Consulta la documentación sobre creación de copias de seguridad de volúmenes de Kubernetes.
- Consulta información sobre la ampliación de volumen.
- Consulta cómo instalar manualmente un controlador de CSI.
- Consulta información sobre Filestore como opción de almacenamiento de archivos para GKE.