En esta página, se muestra cómo crear una copia de seguridad y restablecer el almacenamiento de Filestore mediante instantáneas de volumen de Kubernetes.
Crear una instantánea de volumen de Kubernetes equivale a crear una copia de seguridad de Filestore. Para obtener más información, consulta Acerca de las instantáneas de volúmenes de Kubernetes.
Requisitos
Para usar instantáneas de volumen en GKE, debes cumplir con los siguientes requisitos:
Debes implementar el controlador CSI de Filestore. Solo se admiten los siguientes niveles de servicio de Filestore:
- HDD básico con versión 1.21 de GKE o posterior
- HDD básico (de 100 GiB a 63.9 TiB) con la versión 1.33 de GKE o una posterior
- SSD básico con versión 1.21 de GKE o posterior
- Zonal (de 1 TiB a 9.75 TiB) con la versión 1.31 de GKE o una posterior
- Zonal (de 10 TiB a 100 TiB) con la versión 1.27 de GKE o una posterior
- Regional con la versión 1.33.4-gke.1172000 de GKE o posterior
- Enterprise con la versión 1.25 de GKE o posterior
Usa las versiones 1.17 o posteriores del plano de control. Para usar el controlador CSI de Filestore en un
VolumeSnapshot, usa el número de versión de GKE aplicable a tu nivel de servicio.
- Tienes un
PersistentVolumeClaimexistente para usar en una instantánea. ElPersistentVolumeque usas para una fuente de instantáneas debe ser administrado por un controlador CSI. Puedes verificar que usas un controlador CSI si verificas que la especificación dePersistentVolumetenga una seccióncsicondriver: pd.csi.storage.gke.ioofilestore.csi.storage.gke.io. Si el controlador CSI aprovisiona de forma dinámica elPersistentVolumecomo se describe en las siguientes secciones, entonces lo administra el controlador CSI.
Limitaciones
Los volúmenes de instantáneas tienen las mismas restricciones de tamaño que los volúmenes regulares. Por ejemplo, las instantáneas de Filestore deben ser mayores o iguales que 1 TiB en tamaño para el nivel HDD básico.
El controlador de CSI de Filestore no admite el aprovisionamiento dinámico ni los flujos de trabajo de copia de seguridad para el nivel de servicio de Filestore regional:
Solo puedes crear una copia de seguridad de un recurso compartido por instancia a la vez. Esto significa que no puedes crear una copia de seguridad de varios recursos compartidos ni restablecer una copia de seguridad en una instancia con varios recursos compartidos. Sin embargo, las solicitudes de copia de seguridad de dos recursos compartidos diferentes en dos instancias de Filestore diferentes se ejecutarán al mismo tiempo.
Puedes restablecer una copia de seguridad de una instancia básica en la instancia de origen del mismo nivel de servicio, en una instancia existente o en una instancia nueva. Si eliges una instancia nueva, puedes elegir entre una instancia de HDD básico y una de SSD básico, independientemente del nivel de la instancia de origen.
No puedes restablecer instancias zonales, regionales ni empresariales en una instancia existente o de origen, sino solo en una instancia nueva. El nivel de instancia nuevo no tiene que coincidir con el nivel de instancia de origen. Por ejemplo, puedes restablecer una copia de seguridad de una instancia regional en una instancia zonal. La capacidad aprovisionada de la instancia nueva debe ser igual o superior a la capacidad aprovisionada de la instancia de origen.
Para obtener una lista completa de las limitaciones de las funciones, consulta Limitaciones de la función de copia de seguridad de Filestore.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando
gcloud components updatepara obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se describen en este documento.
Crea y usa una instantánea de volumen
En los ejemplos de este documento, se muestra cómo hacer las siguientes tareas:
- Crea un
PersistentVolumeClaimy unDeployment. - Agrega un archivo a
PersistentVolumeque usaDeployment. - Crear un
VolumeSnapshotClasspara configurar la instantánea. - Crear una instantánea de volumen del
PersistentVolume - Borrar el archivo de prueba.
- Restablecer el
PersistentVolumeen la instantánea que creaste. - Verificar que la restauración funcionó.
Para usar una instantánea de volumen, debes completar los siguientes pasos:
- Crea un objeto
VolumeSnapshotClassa fin de especificar el controlador CSI y la política de eliminación para tu instantánea. - Crea un objeto
VolumeSnapshotpara solicitar una instantánea de unPersistentVolumeClaimexistente. - Haz referencia a
VolumeSnapshoten unaPersistentVolumeClaimpara restablecer un volumen en esa instantánea o crear un volumen nuevo con la instantánea.
Crea 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: 1TiEn este ejemplo se crea una PVC de nivel empresarial de Filestore. Para obtener más información, consulta Accede a instancias de Filestore con el controlador de CSI de Filestore.
Para
spec.storageClassName, puedes especificar cualquier clase de almacenamiento que use un controlador CSI compatible.Aplica el manifiesto:
kubectl apply -f my-pvc.yamlPara crear un
Deployment, guarda el siguiente 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-pvcAplica el manifiesto:
kubectl apply -f my-deployment.yamlVerifica el estado de
Deployment:kubectl get deployment hello-appEs posible que
Deploymenttarde 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
Agrega un archivo de prueba al volumen
Enumera los
Podsen elDeployment:kubectl get pods -l app=hello-appEl resultado es similar al siguiente:
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56sCrea un archivo de prueba en un
Pod:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'Reemplaza
POD_NAMEpor el nombre delPod.Verifica que el archivo exista:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'El resultado es similar al siguiente:
Hello World!
Crea un objeto VolumeSnapshotClass
Crea un objeto VolumeSnapshotClass a fin de especificar el controlador CSI y deletionPolicy para la instantánea de volumen. Puedes hacer referencia a objetos VolumeSnapshotClass cuando creas objetos VolumeSnapshot.
Guarda el siguiente 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: DeleteEn este ejemplo:
- El controlador de CSI usa el campo
driverpara aprovisionar la instantánea. En este ejemplo,filestore.csi.storage.gke.iousa el controlador de CSI de Filestore. - El campo
deletionPolicyle indica a GKE qué hacer con el objetoVolumeSnapshotContenty la instantánea subyacente cuando se borra el objetoVolumeSnapshotvinculado. EspecificaDeletepara borrar el objetoVolumeSnapshotContenty la instantánea subyacente. EspecificaRetainsi deseas conservarVolumeSnapshotContenty la instantánea subyacente.
- El controlador de CSI usa el campo
Aplica el manifiesto:
kubectl apply -f volumesnapshotclass.yaml
Crea una VolumeSnapshot
Un objeto VolumeSnapshot es una solicitud de una instantánea de un objeto PersistentVolumeClaim existente. Cuando creas un objeto VolumeSnapshot, GKE lo crea y lo vincula de forma automática con un objeto VolumeSnapshotContent, que es un recurso en el clúster similar a un objeto PersistentVolume.
Guarda el siguiente manifiesto como
volumesnapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvcAplica el manifiesto:
kubectl apply -f volumesnapshot.yamlDespués de crear una instantánea de
Volume, GKE crea un objetoVolumeSnapshotContentcorrespondiente en el clúster. Este objeto almacena la instantánea y las vinculaciones de objetosVolumeSnapshot. No se interactúa directamente con los objetosVolumeSnapshotContents.Confirma que GKE creó el objeto
VolumeSnapshotContents:kubectl get volumesnapshotcontentsEl resultado es similar al siguiente:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Después de crear el contenido de la instantánea Volume, el controlador CSI que especificaste en VolumeSnapshotClass crea una instantánea 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 de VolumeSnapshot del clúster, la instantánea está lista para usarse. Para verificar 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 es similar al siguiente:
NAME READY
my-snapshot true
Borra el archivo de prueba
Borra el archivo de prueba que creaste:
kubectl exec POD_NAME \ -- sh -c 'rm /usr/share/hello/hello.txt'Verifica que el archivo ya no exista:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'El resultado es similar al siguiente:
cat: /usr/share/hello/hello.txt: No such file or directory
Restablece la instantánea de volumen
Puedes hacer referencia a una VolumeSnapshot en un PersistentVolumeClaim para aprovisionar un volumen nuevo con datos de un volumen existente.
Para hacer referencia a una VolumeSnapshot en un PersistentVolumeClaim, agrega el campo dataSource a tu PersistentVolumeClaim.
En este ejemplo, debes hacer referencia a la VolumeSnapshot que creaste en un PersistentVolumeClaim nueva y actualizar Deployment para que use la reclamación nueva.
Guarda el siguiente 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: 1TiAplica el manifiesto:
kubectl apply -f pvc-restore.yamlActualiza el archivo
my-deployment.yamlpara usar elPersistentVolumeClaimnuevo:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restoreAplica el manifiesto actualizado:
kubectl apply -f my-deployment.yaml
Verifica que la instantánea se haya restablecido correctamente
Obtén el nombre del nuevo
Podque GKE crea para elDeploymentactualizado: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'
Reemplaza NEW_POD_NAME por el nombre del nuevo Pod que creó GKE.
El resultado es similar al siguiente:
Hello World!
Importa una instantánea preexistente
Puedes usar una instantánea de volumen existente creada fuera del clúster actual para aprovisionar de forma manual el objeto VolumeSnapshotContents. Por ejemplo, puedes propagar un volumen en GKE con una instantánea de otro recurso deCloud de Confiance creado en un clúster diferente.
Ubica el nombre de tu instantánea.
Consola de Cloud de Confiance
Google Cloud CLI
Ejecuta el siguiente comando:
gcloud compute snapshots listEl resultado es 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 READYGuarda el siguiente manifiesto
VolumeSnapshotcomorestored-snapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: restored-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: volumeSnapshotContentName: restored-snapshot-contentAplica el manifiesto:
kubectl apply -f restored-snapshot.yamlGuarda el siguiente manifiesto
VolumeSnapshotContentcomorestored-snapshot-content.yaml. Reemplaza el camposnapshotHandlecon el ID del proyecto y el nombre de la instantánea. TantovolumeSnapshotRef.namecomovolumeSnapshotRef.namespacedeben apuntar alVolumeSnapshotque se creó previamente para que la vinculación bidireccional sea válida.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: defaultAplica el manifiesto:
kubectl apply -f restored-snapshot-content.yamlGuarda el siguiente manifiesto
PersistentVolumeClaimcomorestored-pvc.yaml. El controlador de almacenamiento de Kubernetes encontrará unVolumeSnapshotllamadorestored-snapshoty, luego, intentará buscar o crear de forma dinámica unPersistentVolumecomo la fuente de datos. Luego, puedes usar este PVC en un Pod para acceder a los datos restablecidos.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: 1GiAplica el manifiesto:
kubectl apply -f restored-pvc.yamlGuarda el siguiente manifiesto
Podcomorestored-pod.yamlque hace referencia aPersistentVolumeClaim. El controlador CSI aprovisionará unPersistentVolumey lo propagará a partir 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: falseAplica el manifiesto:
kubectl apply -f restored-pod.yamlVerifica que el archivo se haya restablecido:
kubectl exec restored-pod -- sh -c 'cat /demo/data/hello.txt'
Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Cloud de Confiance by S3NS por los recursos que usaste en esta página.
Borra
VolumeSnapshot:kubectl delete volumesnapshot my-snapshotBorra
VolumeSnapshotClass:kubectl delete volumesnapshotclass my-snapshotclassBorra
Deployment:kubectl delete deployments hello-appBorra los objetos
PersistentVolumeClaim:kubectl delete pvc my-pvc pvc-restore
¿Qué sigue?
- Lee la documentación de Instantáneas de volumen de Kubernetes.
- Obtenga información sobre volume expansion (expansión de volumen).
- Obtén más información sobre cómo instalar un controlador CSI de forma manual.
- Obtén más información acerca de Filestore como una opción de almacenamiento de archivos para GKE.