스냅샷 작업
영구 볼륨(PVS)의 Kubernetes 볼륨 스냅샷은 볼륨의 시점 복사본을 지원합니다. Trident를 사용하여 생성된 볼륨의 스냅샷을 생성하고, Trident 외부에서 생성된 스냅샷을 가져오고, 기존 스냅샷에서 새 볼륨을 생성하고, 스냅샷에서 볼륨 데이터를 복구할 수 있습니다.
개요
볼륨 스냅샷은 다음에서 지원됩니다.  ontap-nas ,  ontap-nas-flexgroup ,  ontap-san ,  ontap-san-economy ,  solidfire-san ,  gcp-cvs ,  azure-netapp-files , 그리고  google-cloud-netapp-volumes 운전자.
스냅샷을 사용하려면 외부 스냅샷 컨트롤러와 CRD(사용자 정의 리소스 정의)가 있어야 합니다. Kubernetes Orchestrator의 책임입니다(예: Kubeadm, GKE, OpenShift).
Kubernetes 배포 시 스냅샷 컨트롤러 및 CRD가 포함되지 않은 경우 를 참조하십시오 볼륨 스냅샷 컨트롤러를 배포합니다.
|  | GKE 환경에서 필요 시 볼륨 스냅샷을 생성할 경우 스냅샷 컨트롤러를 생성하지 마십시오. GKE는 내장된 숨겨진 스냅샷 컨트롤러를 사용합니다. | 
볼륨 스냅샷을 생성합니다
- 
을 생성합니다 VolumeSnapshotClass. 자세한 내용은 을 참조하십시오 "VolumeSnapshotClass".- 
가 driverTrident 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-snapVolumeSnapshot을 설명합니다. 를 클릭합니다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볼륨 스냅샷을 가져옵니다
Trident는 클러스터 관리자가 객체를 생성하고 Trident 외부에서 생성된 스냅샷을 가져올 수 있도록 하기 위해 VolumeSnapshotContent 를 "Kubernetes 사전 프로비저닝된 스냅샷 프로세스"지원합니다.
Trident에서 스냅샷의 상위 볼륨을 생성하거나 가져와야 합니다.
- 
* 클러스터 관리자: * VolumeSnapshotContent백엔드 스냅샷을 참조하는 객체를 생성합니다. 그러면 Trident에서 스냅샷 워크플로우가 시작됩니다.- 
에서 백엔드 스냅샷의 이름을 지정합니다 annotations현재trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">.
- 
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>`에서 `snapshotHandle`지정합니다. 이 정보는 통화에서 외부 스냅숏이 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> volumeSnapshotRef: name: import-snap namespace: default
- 
- 
* 클러스터 관리자: * 를 생성합니다 VolumeSnapshot을 참조하는 CRVolumeSnapshotContent오브젝트. 그러면 를 사용할 수 있는 액세스가 필요합니다VolumeSnapshot지정된 네임스페이스에서.예다음 예제에서는 을 만듭니다 VolumeSnapshotCR 이름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
- 
* 내부 처리(조치 필요 없음): * 외부 스냅숏 작성자가 새로 생성된 을 VolumeSnapshotContent인식하고ListSnapshots통화를 실행합니다. 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
|  | 스냅샷 복사본을 복원하면 기존 볼륨 구성이 덮어쓰여집니다. 스냅샷 복사본이 생성된 후 볼륨 데이터에 대한 변경 사항은 손실됩니다. | 
스냅샷에서 전체 볼륨 복원
Trident는 (TASR) CR을 사용하여 스냅샷에서 제자리에서 신속하게 볼륨을 복원할 수 있도록 TridentActionSnapshotRestore 합니다. 이 CR은 필수 Kubernetes 조치로 작동하며 작업이 완료된 후에도 유지되지 않습니다.
Trident는 ontap-san-economy , , ontap-nas, , , ontap-nas-flexgroup azure-netapp-files 에서 스냅샷 복구를 ontap-san 지원합니다. gcp-cvs, google-cloud-netapp-volumes 및 solidfire-san 드라이버.
바인딩된 PVC 및 사용 가능한 볼륨 스냅샷이 있어야 합니다.
- 
PVC 상태가 Bound인지 확인한다. kubectl get pvc
- 
볼륨 스냅샷을 사용할 준비가 되었는지 확인합니다. kubectl get vs
- 
TASR CR을 생성합니다. 이 예에서는 PVC 및 볼륨 스냅샷에 대한 CR을 pvc1`pvc1-snapshot`생성합니다.TASR CR은 PVC & VS가 있는 네임스페이스에 있어야 합니다. cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot
- 
CR을 적용하여 스냅샷에서 복원합니다. 이 예는 스냅샷에서 `pvc1`복구합니다. kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created 
Trident는 스냅샷에서 데이터를 복원합니다. 스냅샷 복구 상태를 확인할 수 있습니다.
kubectl get tasr -o yamlapiVersion: 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: ""|  | 
 | 
연결된 스냅샷이 있는 PV를 삭제합니다
연결된 스냅샷이 있는 영구 볼륨을 삭제하면 해당 Trident 볼륨이 "삭제 상태"로 업데이트됩니다. 볼륨 스냅샷을 제거하여 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.yamlkubectl 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네임스페이스로.
 PDF
PDF