Trabajar con instantáneas
Las instantáneas de volúmenes persistentes (PV) de Kubernetes permiten realizar copias puntuales de los volúmenes. Puede crear una instantánea de un volumen creado con Trident, importar una instantánea creada fuera de Trident, crear un nuevo volumen a partir de una instantánea existente y recuperar datos de volumen a partir de instantáneas.
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 , azure-netapp-files , y google-cloud-netapp-volumes conductores.
Para trabajar con instantáneas, debe disponer de un controlador de instantáneas externo y definiciones de recursos personalizados (CRD). Esta es 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, consulteImplementar un controlador de instantáneas de volumen .
|
|
No cree un controlador de instantáneas si va a crear instantáneas de volumen bajo demanda en un entorno GKE. GKE utiliza un controlador de instantáneas integrado y oculto. |
Cree una instantánea de volumen
-
Crear una
VolumeSnapshotClassPara obtener más información, consulte"Clase de instantánea de volumen" .-
El
driverseñala al controlador Trident CSI. -
deletionPolicy`puede ser `DeleteoRetain. Cuando se configura paraRetainLa instantánea física subyacente en el clúster de almacenamiento se conserva incluso cuandoVolumeSnapshotEl objeto ha sido eliminado.Ejemplocat snap-sc.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
Cree una instantánea de un PVC existente.
Ejemplos-
Este ejemplo crea una instantánea de un PVC existente.
cat snap.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1 -
Este ejemplo crea un objeto de instantánea de volumen para un PVC llamado
pvc1y el nombre de la instantánea se establece enpvc1-snap. Un VolumeSnapshot es análogo a un PVC y está asociado con unVolumeSnapshotContentobjeto 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
-
Puedes identificar el
VolumeSnapshotContentobjeto para elpvc1-snapVolumeSnapshot describiéndolo. ElSnapshot Content Nameidentifica el objeto VolumeSnapshotContent que sirve a esta instantánea. ElReady To UseEl parámetro indica que la instantánea se puede utilizar para crear un nuevo PVC.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 un PVC a partir de una instantánea de volumen.
Puedes utilizar dataSource para crear un PVC utilizando un VolumeSnapshot llamado <pvc-name> como fuente de los datos. Una vez creado el PVC, se puede acoplar a una cápsula y utilizar como cualquier otro PVC.
|
|
El PVC se creará en el mismo backend que el volumen fuente. Referirse a"KB: No se puede crear un PVC a partir de una instantánea de PVC de Trident en un backend alternativo." . |
El siguiente ejemplo crea el PVC utilizando pvc1-snap como fuente 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
Importar una instantánea de volumen
Trident apoya a"Proceso de instantáneas preaprovisionadas de Kubernetes" para permitir que el administrador del clúster cree un VolumeSnapshotContent Objetos e instantáneas de importación creadas fuera de Trident.
Trident debe haber creado o importado el volumen principal de la instantánea.
-
Administrador del clúster: Crear un
VolumeSnapshotContentObjeto que hace referencia a la instantánea del backend. Esto inicia el flujo de trabajo de instantáneas en Trident.-
Especifique el nombre de la instantánea del backend en
annotationscomotrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">. -
Especificar
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>ensnapshotHandleEsta es la única información proporcionada a Trident por el capturador de instantáneas externo en elListSnapshotsllamar.El <volumeSnapshotContentName>No siempre puede coincidir el nombre de la instantánea del backend debido a las restricciones de nomenclatura de CR.EjemploEl siguiente ejemplo crea un
VolumeSnapshotContentObjeto que hace referencia a la instantánea del 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> volumeSnapshotRef: name: import-snap namespace: default -
-
Administrador del clúster: Crear el
VolumeSnapshotCR que hace referencia alVolumeSnapshotContentobjeto. Esta solicitud permite el uso deVolumeSnapshoten un espacio de nombres determinado.EjemploEl siguiente ejemplo crea un
VolumeSnapshotCR llamadoimport-snapque hace referencia aVolumeSnapshotContentllamadoimport-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 generador de instantáneas externo reconoce la instantánea recién creada
VolumeSnapshotContenty ejecuta elListSnapshotsllamar. Trident crea elTridentSnapshot.-
El capturador externo establece el
VolumeSnapshotContentareadyToUsey elVolumeSnapshotatrue. -
El Trident regresa
readyToUse=true.
-
-
Cualquier usuario: Crea un
PersistentVolumeClaimpara hacer referencia al nuevoVolumeSnapshot, donde elspec.dataSource(ospec.dataSourceRef) el nombre es elVolumeSnapshotnombre.EjemploEl siguiente ejemplo crea un PVC que hace referencia al
VolumeSnapshotllamadoimport-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 instantáneas
El directorio de instantáneas está oculto de forma predeterminada para facilitar la máxima compatibilidad de los volúmenes aprovisionados mediante ontap-nas y ontap-nas-economy conductores. Habilitar el .snapshot directorio para recuperar datos directamente desde instantáneas.
Utilice la CLI de ONTAP para restaurar instantáneas de volumen para restaurar un volumen a un estado registrado en una instantánea anterior.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Al restaurar una copia de instantánea, se sobrescribe la configuración de volumen existente. Los cambios realizados en los datos del volumen después de la creación de la copia de instantánea se pierden. |
Restauración de volumen in situ a partir de una instantánea
Trident proporciona una restauración de volumen rápida e in situ a partir de una instantánea utilizando la TridentActionSnapshotRestore (TASR) CR. Esta solicitud de cambio (CR) funciona como una acción imperativa de Kubernetes y no persiste una vez finalizada la operación.
Trident admite la restauración de instantáneas en el ontap-san , ontap-san-economy , ontap-nas , ontap-nas-flexgroup , azure-netapp-files , gcp-cvs , google-cloud-netapp-volumes , y solidfire-san conductores.
Debe tener un PVC vinculado y una instantánea de volumen disponible.
-
Verifique que el estado del PVC esté vinculado.
kubectl get pvc -
Verifique que la instantánea del volumen esté lista para usar.
kubectl get vs
-
Cree el TASR CR. Este ejemplo crea una solicitud de cambio para PVC.
pvc1y instantánea de volumenpvc1-snapshot.El CR TASR debe estar en un espacio de nombres donde existan el PVC y el VS. cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot -
Aplique el CR para restaurar desde la instantánea. Este ejemplo restaura desde una instantánea.
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident restaura los datos a partir de la instantánea. Puedes verificar el estado de restauración de la instantánea:
kubectl get tasr -o yaml
apiVersion: trident.netapp.io/v1
items:
- apiVersion: trident.netapp.io/v1
kind: TridentActionSnapshotRestore
metadata:
creationTimestamp: "2023-04-14T00:20:33Z"
generation: 3
name: trident-snap
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 PV con instantáneas asociadas
Al eliminar un volumen persistente con instantáneas asociadas, el volumen Trident correspondiente se actualiza a un estado de "Eliminación". Elimine las instantáneas de volumen para borrar el volumen de Trident .
Implementar un controlador de instantáneas de volumen
Si tu distribución de Kubernetes no incluye el controlador de instantáneas y los CRD, puedes implementarlos de la siguiente manera.
-
Crear CRD de instantáneas 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 -
Crea el controlador de instantáneas.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yamlSi es necesario, abra deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamly actualizarnamespacea tu espacio de nombres.