Puedes usar la función de creación de copias de seguridad de volúmenes de Kubernetes para volúmenes persistentes y aprovisionamiento dinámico en tus clústeres de GKE.
Las capturas de volumen te permiten crear una copia de tu volumen en un momento concreto. Puedes usar esta copia para restaurar un volumen a un estado anterior o para aprovisionar un volumen de sustitución.
Puedes aprovisionar y adjuntar copias de seguridad de volúmenes con los siguientes componentes:
Requisitos
Para usar las capturas de volumen en GKE en AWS, debes tener lo siguiente:
Un volumen que usa un controlador de interfaz de almacenamiento de contenedor (CSI) que admite instantáneas. Los controladores de Elastic Block Store (EBS) que usa GKE on AWS de forma predeterminada admiten instantáneas.
Para ver una lista de todos los controladores CSI que admiten instantáneas, consulta la columna "Otras funciones" de Controladores en la documentación de Kubernetes.
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 que estás usando un controlador CSI, verifica que la especificaciónPersistentVolume
tenga una seccióncsi
condriver: ebs.csi.aws.com
. Si tu clúster provisiona PersistentVolumes de forma dinámica mediante el controlador CSI, tal como se describe en las siguientes secciones, el controlador CSI lo gestiona.
Antes de empezar
Crear y usar una captura de volumen
En los ejemplos de este documento se muestra cómo realizar las siguientes tareas:
- Crea un ejemplo de
PersistentVolumeClaim
yPod
. - Crea un VolumeSnapshot.
- Restaura la captura del volumen.
- 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
VolumeSnapshot
para solicitar una instantánea de un PersistentVolumeClaim. - 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 ejemplo de PersistentVolumeClaim
y Pod
Para crear el objeto
PersistentVolumeClaim
, guarda el siguiente manifiesto comoexample-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
En el caso de
spec.storageClassName
, puedes especificar cualquier clase de almacenamiento que utilice un controlador CSI compatible. En este ejemplo se usa la clase de almacenamientostandard-rwo
predeterminada.Aplica el archivo de manifiesto:
kubectl apply -f example-pvc.yaml
Crea un pod que escriba la fecha y la hora actuales en el volumen. Para crear un Pod, guarda el siguiente manifiesto como
snapshot-shell.yaml
:apiVersion: v1 kind: Pod metadata: name: snapshot-shell spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "echo $(date -u) >> /data/out.txt"] volumeMounts: - name: snapshot-volume mountPath: /data restartPolicy: Never volumes: - name: snapshot-volume persistentVolumeClaim: claimName: example-pvc
Aplica el archivo de manifiesto:
kubectl apply -f snapshot-shell.yaml
Comprueba el estado del Pod:
kubectl get pod snapshot-shell
El pod puede tardar un tiempo en ejecutarse y completarse. Puedes ejecutar el comando anterior hasta que veas un resultado similar al siguiente:
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
Crear un VolumeSnapshot
Un objeto VolumeSnapshot
es una solicitud de una instantánea de un objeto PersistentVolumeClaim
. Cuando creas un objeto VolumeSnapshot
, tu clúster 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: example-snapshot spec: source: persistentVolumeClaimName: example-pvc
Aplica el archivo de manifiesto:
kubectl apply -f volumesnapshot.yaml
Después de crear una copia de seguridad de un volumen, el clúster crea un objeto
VolumeSnapshotContent
correspondiente. Este objeto almacena la instantánea y las vinculaciones de los objetosVolumeSnapshot
. No interactúas directamente con los objetosVolumeSnapshotContents
.Confirma que tu clúster 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
Confirmar que la instantánea de volumen está lista
Una vez que se haya creado el contenido de la captura del volumen, el controlador CSI que hayas especificado en VolumeSnapshotClass
creará una captura en el sistema de almacenamiento correspondiente. Una vez que el clúster crea una captura en el sistema de almacenamiento y la vincula a un objeto VolumeSnapshot
, la captura 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
example-snapshot true
Restaurar la captura del volumen
Puedes hacer referencia a una VolumeSnapshot
en un PersistentVolumeClaim
para aprovisionar un volumen nuevo con datos de un volumen ya creado o restaurar un volumen a un estado que hayas capturado en la captura.
Para hacer referencia a un VolumeSnapshot
en un PersistentVolumeClaim
, añade el campo dataSource
al PersistentVolumeClaim
.
En este ejemplo, haces referencia al VolumeSnapshot
que has creado en un nuevo PersistentVolumeClaim
y creas un pod que monta el PersistentVolumeClaim
.
Guarda el siguiente archivo de manifiesto como
pvc-restore.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: example-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Aplica el archivo de manifiesto:
kubectl apply -f pvc-restore.yaml
Inicia un pod temporal que monte el PVC en el pod e imprima el contenido de
out.txt
en los registros.Guarda el siguiente archivo de manifiesto como
restore-log.yaml
:apiVersion: v1 kind: Pod metadata: name: restore-verify spec: volumes: - name: restore-data persistentVolumeClaim: claimName: pvc-restore containers: - name: shell-container image: ubuntu:bionic volumeMounts: - mountPath: "/data" name: restore-data command: [ "/bin/sh" ] args: ["-c", "cat /data/out.txt", "exit", "1"] restartPolicy: Never
Aplica el archivo de manifiesto:
kubectl apply -f restore-log.yaml
Comprobar que la instantánea se ha restaurado correctamente
El pod que has creado en el paso anterior lee la instantánea. Para ver los datos de la instantánea, usa el comando kubectl logs
.
kubectl logs restore-verify
El resultado debe incluir una marca de tiempo de la instantánea.
Limpieza
Para evitar que se apliquen cargos por los recursos utilizados en esta página, sigue estos pasos.
Elimina el
VolumeSnapshot
:kubectl delete volumesnapshot example-snapshot
Elimina el pod temporal:
kubectl delete -f restore-log.yaml
Elimina el pod:
kubectl delete -f snapshot-shell.yaml
Elimina los
PersistentVolumeClaim
objetos:kubectl delete pvc example-pvc pvc-restore
Siguientes pasos
- Consulta la documentación de Volumen de instantánea de Kubernetes.
- Instala otros controladores de CSI.