Puede utilizar la función de instantáneas de volumen de Kubernetes para volúmenes persistentes y aprovisionamiento dinámico en sus clústeres de GKE.
Las instantáneas de volumen permiten crear una copia de su volumen en un momento específico. Puede usar esta copia para restaurar un volumen a un estado anterior o para aprovisionar un volumen de reemplazo.
Puede aprovisionar y adjuntar instantáneas de volumen con los siguientes componentes:
Requisitos
Para usar instantáneas de volumen en GKE en AWS, debe tener lo siguiente:
Un volumen que utiliza un controlador de interfaz de almacenamiento de contenedores (CSI) compatible con instantáneas. Los controladores de Elastic Block Store (EBS) que GKE en AWS utiliza de forma predeterminada admiten instantáneas.
Para obtener una lista de todos los controladores CSI que admiten instantáneas, consulte la columna "Otras características" en Controladores en la documentación de Kubernetes.
Tenga un
PersistentVolumeClaim
existente para usar en una instantánea. ElPersistentVolume
que use para una fuente de instantánea debe ser administrado por un controlador CSI. Puede verificar que esté usando un controlador CSI comprobando que la especificaciónPersistentVolume
incluya una seccióncsi
condriver: ebs.csi.aws.com
. Si su clúster aprovisiona dinámicamente PersistentVolumes mediante el controlador CSI, como se describe en las siguientes secciones, este lo administra.
Antes de empezar
Crear y usar una instantánea de volumen
Los ejemplos de este documento le muestran cómo realizar las siguientes tareas:
- Cree un ejemplo
PersistentVolumeClaim
yPod
. - Crear un VolumeSnapshot .
- Restaurar la instantánea del volumen .
- Verifique que la restauración funcionó .
Para utilizar una instantánea de volumen, debe completar los siguientes pasos:
- Cree un objeto
VolumeSnapshot
para solicitar una instantánea de un PersistentVolumeClaim existente. - Haga referencia a
VolumeSnapshot
en unPersistentVolumeClaim
para restaurar un volumen a esa instantánea o crear un nuevo volumen usando la instantánea.
Cree un ejemplo de PersistentVolumeClaim
y Pod
Para crear el objeto
PersistentVolumeClaim
, guarde el siguiente manifiesto comoexample-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Para
spec.storageClassName
, puede especificar cualquier clase de almacenamiento que utilice un controlador CSI compatible. En este ejemplo, se utiliza la clase de almacenamientostandard-rwo
predeterminada.Aplicar el manifiesto:
kubectl apply -f example-pvc.yaml
Cree un pod que escriba la fecha y hora actuales en el volumen. Para crear un pod, guarde 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
Aplicar el manifiesto:
kubectl apply -f snapshot-shell.yaml
Compruebe el estado del Pod:
kubectl get pod snapshot-shell
El pod podría tardar un tiempo en ejecutarse y completarse. Puede ejecutar el comando anterior hasta que vea un resultado similar al siguiente:
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
Crear una instantánea de volumen
Un objeto VolumeSnapshot
es una solicitud de instantánea de un objeto PersistentVolumeClaim
existente. Al crear un objeto VolumeSnapshot
, el clúster lo crea y vincula automáticamente con un objeto VolumeSnapshotContent
, que es un recurso del clúster, al igual que un objeto PersistentVolume
.
Guarde el siguiente manifiesto como
volumesnapshot.yaml
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvc
Aplicar el manifiesto:
kubectl apply -f volumesnapshot.yaml
Tras crear una instantánea de volumen, el clúster crea el objeto
VolumeSnapshotContent
correspondiente. Este objeto almacena la instantánea y las vinculaciones de los objetosVolumeSnapshot
. No se interactúa directamente con los objetosVolumeSnapshotContents
.Confirme que su clúster creó el objeto
VolumeSnapshotContents
:kubectl get volumesnapshotcontents
La salida es similar a la siguiente:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Confirme que la instantánea del volumen esté lista
Tras crear el contenido de la instantánea de volumen, el controlador CSI especificado en VolumeSnapshotClass
crea una instantánea en el sistema de almacenamiento correspondiente. Una vez que el clúster crea una instantánea en el sistema de almacenamiento y la vincula a un objeto VolumeSnapshot
, la instantánea está lista para usarse. Puede comprobar el estado ejecutando el siguiente comando:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Si la instantánea está lista para usarse, la salida es similar a la siguiente:
NAME READY
example-snapshot true
Restaurar la instantánea del volumen
Puede hacer referencia a un VolumeSnapshot
en un PersistentVolumeClaim
para aprovisionar un nuevo volumen con datos de un volumen existente o restaurar un volumen a un estado que capturó en la instantánea.
Para hacer referencia a un VolumeSnapshot
en un PersistentVolumeClaim
, agregue el campo dataSource
a su PersistentVolumeClaim
.
En este ejemplo, hace referencia al VolumeSnapshot
que creó en un nuevo PersistentVolumeClaim
y crea un Pod que monta el PersistentVolumeClaim
.
Guarde el siguiente 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
Aplicar el manifiesto:
kubectl apply -f pvc-restore.yaml
Inicie un Pod temporal que monte el PVC en el Pod e imprima el contenido de
out.txt
en los registros.Guarde el siguiente 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
Aplicar el manifiesto:
kubectl apply -f restore-log.yaml
Compruebe que la instantánea se haya restaurado correctamente
El pod que creó en el paso anterior lee la instantánea. Para ver los datos de la instantánea, use el comando kubectl logs
.
kubectl logs restore-verify
La salida debe incluir una marca de tiempo de la instantánea.
Limpiar
Para evitar incurrir en cargos por los recursos utilizados en esta página, siga estos pasos.
Eliminar
VolumeSnapshot
:kubectl delete volumesnapshot example-snapshot
Eliminar el Pod temporal:
kubectl delete -f restore-log.yaml
Eliminar el Pod:
kubectl delete -f snapshot-shell.yaml
Eliminar los objetos
PersistentVolumeClaim
:kubectl delete pvc example-pvc pvc-restore
¿Qué sigue?
- Lea la documentación de instantáneas de volumen de Kubernetes.
- Instalar controladores CSI adicionales .