스냅샷 작업
영구 볼륨(PVS)의 Kubernetes 볼륨 스냅샷은 볼륨의 시점 복사본을 지원합니다. Astra Trident를 사용하여 생성된 볼륨의 스냅샷을 생성하고, Astra Trident 외부에서 생성된 스냅샷을 가져오고, 기존 스냅샷에서 새 볼륨을 생성하고, 스냅샷에서 볼륨 데이터를 복구할 수 있습니다.
개요
에서 볼륨 스냅샷을 지원합니다 ontap-nas
, ontap-nas-flexgroup
, ontap-san
, ontap-san-economy
, solidfire-san
, gcp-cvs
, 및 azure-netapp-files
드라이버.
스냅샷을 사용하려면 외부 스냅샷 컨트롤러와 CRD(사용자 정의 리소스 정의)가 있어야 합니다. Kubernetes Orchestrator의 책임입니다(예: Kubeadm, GKE, OpenShift).
Kubernetes 배포 시 스냅샷 컨트롤러 및 CRD가 포함되지 않은 경우 를 참조하십시오 볼륨 스냅샷 컨트롤러를 배포합니다.
|
GKE 환경에서 필요 시 볼륨 스냅샷을 생성할 경우 스냅샷 컨트롤러를 생성하지 마십시오. GKE는 내장된 숨겨진 스냅샷 컨트롤러를 사용합니다. |
볼륨 스냅샷을 생성합니다
-
을 생성합니다
VolumeSnapshotClass
. 자세한 내용은 을 참조하십시오 "VolumeSnapshotClass".-
를 클릭합니다
driver
Astra Trident CSI 드라이버를 가리킵니다. -
deletionPolicy
있을 수 있습니다Delete
또는Retain
. 를 로 설정한 경우Retain
, 스토리지 클러스터의 기본 물리적 스냅샷은 가 있는 경우에도 유지됩니다VolumeSnapshot
객체가 삭제되었습니다.예cat snap-sc.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
기존 PVC의 스냅샷을 생성합니다.
예-
이 예에서는 기존 PVC의 스냅샷을 생성합니다.
cat snap.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1
-
이 예에서는 라는 PVC에 대한 볼륨 스냅샷 객체를 생성합니다
pvc1
스냅샷 이름이 로 설정되어 있습니다pvc1-snap
. VolumeSnapshot은 PVC와 유사하며 와 관련이 있습니다VolumeSnapshotContent
실제 스냅샷을 나타내는 객체입니다.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
를 식별할 수 있습니다
VolumeSnapshotContent
의 개체pvc1-snap
VolumeSnapshot을 설명합니다. 를 클릭합니다Snapshot Content Name
이 스냅샷을 제공하는 VolumeSnapshotContent 객체를 식별합니다. 를 클릭합니다Ready To Use
매개 변수는 스냅샷을 사용하여 새 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 . .
-
볼륨 스냅샷에서 PVC를 생성합니다
을 사용할 수 있습니다 dataSource
이름이 인 VolumeSnapshot을 사용하여 PVC를 생성합니다 <pvc-name>
데이터 소스로 사용됩니다. PVC가 생성된 후 POD에 부착하여 다른 PVC와 마찬가지로 사용할 수 있습니다.
|
PVC는 소스 볼륨과 동일한 백엔드에서 생성됩니다. 을 참조하십시오 "KB: Trident PVC 스냅샷에서 PVC를 생성하는 것은 대체 백엔드에서 생성할 수 없습니다". |
다음 예에서는 를 사용하여 PVC를 작성합니다 pvc1-snap
를 데이터 소스로 사용합니다.
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
볼륨 스냅샷을 가져옵니다
Astra Trident가 를 지원합니다 "Kubernetes 사전 프로비저닝된 스냅샷 프로세스" 클러스터 관리자가 을(를) 생성할 수 있도록 하려면 VolumeSnapshotContent
Astra Trident 외부에 생성된 개체 및 스냅샷 가져오기
Astra Trident가 스냅샷의 상위 볼륨을 생성하거나 가져와야 합니다.
-
* 클러스터 관리자: * 를 생성합니다
VolumeSnapshotContent
백엔드 스냅샷을 참조하는 객체입니다. 그러면 Astra Trident에서 스냅샷 워크플로우가 시작됩니다.-
에서 백엔드 스냅샷의 이름을 지정합니다
annotations
현재trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">
. -
를 지정합니다
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
인치snapshotHandle
. 이 정보는 의 외부 스냅샷 생성자가 Astra Trident에 제공하는 유일한 정보입니다ListSnapshots
통화.를 클릭합니다 <volumeSnapshotContentName>
CR 명명 제한으로 인해 백엔드 스냅샷 이름과 항상 일치할 수 없습니다.예다음 예제에서는 을 만듭니다
VolumeSnapshotContent
백엔드 스냅샷을 참조하는 객체입니다snap-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>
-
-
* 클러스터 관리자: * 를 생성합니다
VolumeSnapshot
을 참조하는 CRVolumeSnapshotContent
오브젝트. 그러면 를 사용할 수 있는 액세스가 필요합니다VolumeSnapshot
지정된 네임스페이스에서.예다음 예제에서는 을 만듭니다
VolumeSnapshot
CR 이름import-snap
을 참조합니다VolumeSnapshotContent
이름 지정import-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
-
* 내부 처리 (아무 조치 필요 없음) : * 외부 snapshotter가 새로 만든 것을 인식합니다
VolumeSnapshotContent
를 실행합니다ListSnapshots
통화. Astra Trident가 을 생성합니다TridentSnapshot
.-
외부 스냅숏 작성기가 를 설정합니다
VolumeSnapshotContent
를 선택합니다readyToUse
및VolumeSnapshot
를 선택합니다true
. -
Trident가 돌아왔습니다
readyToUse=true
.
-
-
* 모든 사용자: * 를 생성합니다
PersistentVolumeClaim
를 눌러 새 를 참조합니다VolumeSnapshot
, 위치spec.dataSource
(또는spec.dataSourceRef
) name 은 입니다VolumeSnapshot
이름.예다음 예에서는 를 참조하는 PVC를 작성합니다
VolumeSnapshot
이름 지정import-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
스냅샷을 사용하여 볼륨 데이터를 복구합니다
스냅샷 디렉토리는 를 사용하여 프로비저닝된 볼륨의 최대 호환성을 지원하기 위해 기본적으로 숨겨져 있습니다 ontap-nas
및 ontap-nas-economy
드라이버. 를 활성화합니다 .snapshot
스냅샷으로부터 직접 데이터를 복구할 디렉토리입니다.
볼륨 스냅샷 복원 ONTAP CLI를 사용하여 볼륨을 이전 스냅숏에 기록된 상태로 복원합니다.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
스냅샷 복사본을 복원하면 기존 볼륨 구성이 덮어쓰여집니다. 스냅샷 복사본이 생성된 후 볼륨 데이터에 대한 변경 사항은 손실됩니다. |
스냅샷 디렉토리는 를 사용하여 프로비저닝된 볼륨의 최대 호환성을 지원하기 위해 기본적으로 숨겨져 있습니다 ontap-nas
및 ontap-nas-economy
드라이버. 를 활성화합니다 .snapshot
스냅샷으로부터 직접 데이터를 복구할 디렉토리입니다.
|
스냅샷 복사본을 복원하면 기존 볼륨 구성이 덮어쓰여집니다. 스냅샷 복사본이 생성된 후 볼륨 데이터에 대한 변경 사항은 손실됩니다. |
스냅샷에서 전체 볼륨 복원
Astra Control Provisioner는 (TASR) CR을 사용하여 스냅샷에서 데이터 이동 없이 신속하게 볼륨을 복원할 수 있도록 TridentActionSnapshotRestore
합니다. 이 CR은 필수 Kubernetes 조치로 작동하며 작업이 완료된 후에도 유지되지 않습니다.
Astra Control Provisioner는 ontap-san
ontap-san-economy
, , ontap-nas
, ontap-nas-flexgroup
, 및 azure-netapp-files
gcp-cvs
solidfire-san
및 드라이버.
바인딩된 PVC 및 사용 가능한 볼륨 스냅샷이 있어야 합니다.
-
PVC 상태가 Bound인지 확인한다.
kubectl get pvc
-
볼륨 스냅샷을 사용할 준비가 되었는지 확인합니다.
kubectl get vs
-
TASR CR을 생성합니다. 이 예에서는 PVC 및 볼륨 스냅샷에 대한 CR을
pvc1
`pvc1-snapshot`생성합니다.cat tasr-pvc1-snapshot.yaml apiVersion: v1 kind: TridentActionSnapshotRestore metadata: name: this-doesnt-matter namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot
-
CR을 적용하여 스냅샷에서 복원합니다. 이 예는 스냅샷에서 `pvc1`복구합니다.
kubectl create -f tasr-pvc1-snapshot.yaml tridentactionsnapshotrestore.trident.netapp.io/this-doesnt-matter created
Astra Control Provisioner는 스냅샷에서 데이터를 복원합니다. 스냅샷 복구 상태를 확인할 수 있습니다.
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: ""
|
|
볼륨 스냅샷 복원 ONTAP CLI를 사용하여 볼륨을 이전 스냅숏에 기록된 상태로 복원합니다.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
연결된 스냅샷이 있는 PV를 삭제합니다
연결된 스냅샷이 있는 영구 볼륨을 삭제하면 해당 Trident 볼륨이 "삭제 상태"로 업데이트됩니다. Astra Trident 볼륨을 삭제하려면 볼륨 스냅샷을 제거하십시오.
볼륨 스냅샷 컨트롤러를 배포합니다
Kubernetes 배포 시 스냅샷 컨트롤러와 CRD가 포함되지 않은 경우 다음과 같이 배포할 수 있습니다.
-
볼륨 스냅샷 CRD를 생성합니다.
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
-
스냅샷 컨트롤러를 생성합니다.
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
필요한 경우 를 엽니다 deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
및 업데이트namespace
네임스페이스로.