Trabajar con instantáneas
Las snapshots de volúmenes de Kubernetes de Persistent Volumes (VP) permiten copias puntuales de volúmenes. Es posible crear una copia Snapshot de un volumen creado con Astra Trident, importar una copia de Snapshot creada fuera de Astra Trident, crear un volumen nuevo a partir de una copia de Snapshot existente y recuperar datos de volumen de copias Snapshot.
Descripción general
Admite copias de Snapshot de volumen ontap-nas
, ontap-nas-flexgroup
, ontap-san
, ontap-san-economy
, solidfire-san
, gcp-cvs
, y. azure-netapp-files
de windows
Debe tener un controlador de instantánea externo y definiciones de recursos personalizados (CRD) para trabajar con instantáneas. Esta es la responsabilidad del orquestador de Kubernetes (por ejemplo: Kubeadm, GKE, OpenShift).
Si su distribución de Kubernetes no incluye el controlador de instantáneas ni los CRD, consulte Implemente una controladora Snapshot de volumen.
No cree una controladora Snapshot si crea instantáneas de volumen bajo demanda en un entorno de GKE. GKE utiliza un controlador de instantáneas oculto integrado. |
Cree una copia de Snapshot de volumen
-
Cree un
VolumeSnapshotClass
. Para obtener más información, consulte "VolumeSnapshotClass".-
La
driver
Señala el controlador CSI de Astra Trident. -
deletionPolicy
puede serDelete
o.Retain
. Cuando se establece enRetain
, la instantánea física subyacente en el clúster de almacenamiento se conserva incluso cuandoVolumeSnapshot
el objeto se ha eliminado.Ejemplocat snap-sc.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
Crear una instantánea de una RVP existente.
Ejemplos-
En este ejemplo, se crea una copia Snapshot de una RVP existente.
cat snap.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1
-
En este ejemplo, se crea un objeto Snapshot de volumen para una RVP denominada
pvc1
y el nombre de la copia de snapshot se establece enpvc1-snap
. Un VolumeSnapshot es análogo a un PVC y está asociado a unVolumeSnapshotContent
objeto que representa la instantánea real.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
Puede identificar el
VolumeSnapshotContent
objeto parapvc1-snap
VolumeSnapshot, describiéndolo. LaSnapshot Content Name
Identifica el objeto VolumeSnapshotContent que sirve esta snapshot. LaReady To Use
El parámetro indica que la snapshot se puede usar para crear una nueva RVP.kubectl describe volumesnapshots pvc1-snap Name: pvc1-snap Namespace: default . . . Spec: Snapshot Class Name: pvc1-snap Snapshot Content Name: snapcontent-e8d8a0ca-9826-11e9-9807-525400f3f660 Source: API Group: Kind: PersistentVolumeClaim Name: pvc1 Status: Creation Time: 2019-06-26T15:27:29Z Ready To Use: true Restore Size: 3Gi . .
-
Cree una RVP a partir de una snapshot de volumen
Puede utilizar dataSource
Para crear una RVP con una Snapshot de volumen llamada <pvc-name>
como la fuente de los datos. Una vez creada la RVP, se puede conectar a un pod y utilizarla como cualquier otro PVC.
La RVP se creará en el mismo back-end que el volumen de origen. Consulte "KB: La creación de una RVP a partir de una snapshot de RVP de Trident no se puede crear en un back-end alternativo". |
En el siguiente ejemplo se crea la RVP con pvc1-snap
como origen de datos.
cat pvc-from-snap.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-from-snap spec: accessModes: - ReadWriteOnce storageClassName: golden resources: requests: storage: 3Gi dataSource: name: pvc1-snap kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
Importe una copia de Snapshot de volumen
Astra Trident es compatible con el "Proceso de snapshot aprovisionado previamente de Kubernetes" para habilitar al administrador de clúster para crear un VolumeSnapshotContent
Objetos e importación de copias de Snapshot creadas fuera de Astra Trident.
Astra Trident debe haber creado o importado el volumen principal del snapshot.
-
Administrador del clúster: Crear un
VolumeSnapshotContent
objeto que hace referencia a la instantánea de backend. Esto inicia el flujo de trabajo de las copias Snapshot en Astra Trident.-
Especifique el nombre de la instantánea de backend en
annotations
comotrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">
. -
Especifique
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
pulgsnapshotHandle
. Esta es la única información que el snapshot externo proporciona a Astra Trident en laListSnapshots
llame.La <volumeSnapshotContentName>
No siempre se puede coincidir con el nombre de instantánea de backend debido a restricciones de nomenclatura de CR.EjemploEn el siguiente ejemplo se crea un
VolumeSnapshotContent
objeto que hace referencia a la instantánea backendsnap-01
.
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: import-snap-content annotations: trident.netapp.io/internalSnapshotName: "snap-01" # This is the name of the snapshot on the backend spec: deletionPolicy: Retain driver: csi.trident.netapp.io source: snapshotHandle: pvc-f71223b5-23b9-4235-bbfe-e269ac7b84b0/import-snap-content # <import PV name or source PV name>/<volume-snapshot-content-name>
-
-
Administrador del clúster: Crear el
VolumeSnapshot
CR que hace referencia alVolumeSnapshotContent
objeto. Esto solicita acceso para utilizar elVolumeSnapshot
en un espacio de nombres determinado.EjemploEn el siguiente ejemplo se crea un
VolumeSnapshot
CR con nombreimport-snap
que hace referencia a laVolumeSnapshotContent
nombreimport-snap-content
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: import-snap spec: # volumeSnapshotClassName: csi-snapclass (not required for pre-provisioned or imported snapshots) source: volumeSnapshotContentName: import-snap-content
-
Procesamiento interno (no se requiere ninguna acción): El Snapshotter externo reconoce el recién creado
VolumeSnapshotContent
y ejecuta elListSnapshots
llame. Astra Trident crea elTridentSnapshot
.-
El dispositivo de instantáneas externo establece el
VolumeSnapshotContent
parareadyToUse
y laVolumeSnapshot
paratrue
. -
Trident vuelve
readyToUse=true
.
-
-
Cualquier usuario: Crear a.
PersistentVolumeClaim
para hacer referencia al nuevoVolumeSnapshot
, dondespec.dataSource
(o.spec.dataSourceRef
) nombre es elVolumeSnapshot
nombre.EjemploEn el siguiente ejemplo se crea una RVP que hace referencia al
VolumeSnapshot
nombreimport-snap
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-from-snap spec: accessModes: - ReadWriteOnce storageClassName: simple-sc resources: requests: storage: 1Gi dataSource: name: import-snap kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
Recuperar datos de volumen mediante copias Snapshot
El directorio de snapshots está oculto de forma predeterminada para facilitar la máxima compatibilidad de los volúmenes aprovisionados con el ontap-nas
y.. ontap-nas-economy
de windows Habilite el .snapshot
directorio para recuperar datos de snapshots directamente.
Use la interfaz de línea de comandos de ONTAP para restaurar un volumen en un estado registrado en una snapshot anterior.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
Cuando se restaura una copia Snapshot, se sobrescribe la configuración de volúmenes existente. Se pierden los cambios que se hagan en los datos del volumen después de crear la copia Snapshot. |
Eliminar un VP con snapshots asociadas
Cuando se elimina un volumen persistente con instantáneas asociadas, el volumen Trident correspondiente se actualiza a un “estado de eliminación”. Quite las snapshots de volumen para eliminar el volumen de Astra Trident.
Implemente una controladora Snapshot de volumen
Si su distribución de Kubernetes no incluye el controlador de snapshots y los CRD, puede implementarlos de la siguiente manera.
-
Crear CRD de snapshot de volumen.
cat snapshot-setup.sh #!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
-
Cree la controladora Snapshot.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
Si es necesario, abra deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
y actualícelonamespace
en el espacio de nombres.