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
La instantánea de volumen es compatible con ontap-nas, , , ontap-nas-flexgroup ontap-san ontap-san-economy solidfire-san , , , gcp-cvs, y azure-netapp-files los conductores.
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 y 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".-
`driver`Los puntos al controlador CSI de Astra Trident.
-
deletionPolicypuede serDeleteo.RetainCuando se establece enRetain, la instantánea física subyacente del clúster de almacenamiento se conserva incluso si se elimina elVolumeSnapshotobjeto.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
pvc1y el nombre de la Snapshot se establece enpvc1-snap. Una Snapshot de volumen es similar a una RVP y se asocia conVolumeSnapshotContentun objeto que representa la snapshot real.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
Es posible identificar
VolumeSnapshotContentel objeto depvc1-snapla Snapshot de volumen describiéndolo. ElSnapshot Content Nameidentifica el objeto VolumeSnapshotContent que sirve para esta snapshot. `Ready 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 usar dataSource para crear una RVP con una VolumeSnapshot llamada <pvc-name> como origen 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 utilizando 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 admite "Proceso de snapshot aprovisionado previamente de Kubernetes"para permitir al administrador de clúster crear VolumeSnapshotContent un objeto e importar copias de Snapshot creadas fuera de Astra Trident.
Astra Trident debe haber creado o importado el volumen principal del snapshot.
-
Cluster admin: Crear un
VolumeSnapshotContentobjeto que haga referencia a la instantánea backend. Esto inicia el flujo de trabajo de las copias Snapshot en Astra Trident.-
Especifique el nombre de la instantánea de backend en
annotationscomotrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">. -
Especificar
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>ensnapshotHandle. Esta es la única información proporcionada a Astra Trident por el Snapshotter externo en laListSnapshotsllamada.`<volumeSnapshotContentName>`No siempre puede coincidir con el nombre de instantánea de backend debido a restricciones de nomenclatura de CR. EjemploEn el siguiente ejemplo se crea un
VolumeSnapshotContentobjeto 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> -
-
Cluster admin: Crear el
VolumeSnapshotCR que hace referencia alVolumeSnapshotContentobjeto. Esto solicita acceso para utilizarVolumeSnapshoten un espacio de nombres determinado.EjemploEn el siguiente ejemplo se crea una
VolumeSnapshotCR denominadaimport-snapque hace referencia a laVolumeSnapshotContentimport-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 acción): El Snapshotter externo reconoce el recién creado
VolumeSnapshotContenty ejecuta laListSnapshotsllamada. Astra Trident crea elTridentSnapshot.-
El dispositivo de instantáneas externo establece el
VolumeSnapshotContentenreadyToUsey elVolumeSnapshotentrue. -
Trident devuelve
readyToUse=true.
-
-
Cualquier usuario: Crear un
PersistentVolumeClaimpara hacer referencia al nuevoVolumeSnapshot, donde elspec.dataSourcenombre (ospec.dataSourceRef) es el nombreVolumeSnapshot.EjemploEn el siguiente ejemplo se crea una RVP que hace referencia a la
VolumeSnapshotllamadaimport-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 mediante los ontap-nas controladores y. ontap-nas-economy Permita que .snapshot el directorio recupere 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. |
El directorio de snapshots está oculto de forma predeterminada para facilitar la máxima compatibilidad de los volúmenes aprovisionados mediante los ontap-nas controladores y. ontap-nas-economy Permita que .snapshot el directorio recupere datos de snapshots directamente.
|
|
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. |
Restauración de volumen sin movimiento a partir de una copia de Snapshot
Astra Control Provisioning ofrece una restauración de volumen rápida y in situ a partir de una copia Snapshot mediante TridentActionSnapshotRestore CR (TASR). Esta CR funciona como una acción imprescindible de Kubernetes y no persiste una vez que finaliza la operación.
Astra Control Provisioner admite la restauración de instantáneas en el ontap-san, , ontap-san-economy, ontap-nas, ontap-nas-flexgroup azure-netapp-files, , gcp-cvs, y solidfire-san los conductores.
Debe tener una snapshot de volumen disponible y la RVP vinculada.
-
Compruebe que el estado de la RVP es de enlace.
kubectl get pvc
-
Compruebe que la copia de Snapshot de volumen esté lista para utilizarse.
kubectl get vs
-
Cree el CR de TASR. En este ejemplo, se crea una CR para la RVP
pvc1y una instantánea de volumenpvc1-snapshot.cat tasr-pvc1-snapshot.yaml apiVersion: v1 kind: TridentActionSnapshotRestore metadata: name: this-doesnt-matter namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot
-
Aplique el CR para restaurar a partir de la instantánea. Este ejemplo restaura desde la instantánea
pvc1.kubectl create -f tasr-pvc1-snapshot.yaml tridentactionsnapshotrestore.trident.netapp.io/this-doesnt-matter created
El aprovisionador de Astra Control restaura los datos a partir de la snapshot. Es posible verificar el estado de restauración de la Snapshot.
kubectl get tasr -o yaml
apiVersion: v1
items:
- apiVersion: trident.netapp.io/v1
kind: TridentActionSnapshotRestore
metadata:
creationTimestamp: "2023-04-14T00:20:33Z"
generation: 3
name: this-doesnt-matter
namespace: trident
resourceVersion: "3453847"
uid: <uid>
spec:
pvcName: pvc1
volumeSnapshotName: pvc1-snapshot
status:
startTime: "2023-04-14T00:20:34Z"
completionTime: "2023-04-14T00:20:37Z"
state: Succeeded
kind: List
metadata:
resourceVersion: ""
|
|
|
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.yamly actualicenamespacesu espacio de nombres.