동적으로 스냅샷을 프로비저닝하거나 vSphere with Tanzu TKG 클러스터에서 블록 볼륨의 미리 프로비저닝된 볼륨 스냅샷을 생성할 수 있습니다. 기존 스냅샷을 복원할 수도 있습니다.

참고: 볼륨 스냅샷 클래스를 생성하고 이를 사용하여 볼륨 스냅샷을 생성해서는 안 됩니다. 기존 볼륨 스냅샷 클래스만 사용합니다. 기존 볼륨 스냅샷 클래스는 deletionPolicy 삭제만 지원합니다. deletionPolicy 보존을 사용하여 볼륨 스냅샷 클래스를 생성하는 것은 지원되지 않습니다.

TKG 클러스터에서 동적으로 프로비저닝된 스냅샷 생성

vSphere with Tanzu TKG 클러스터에서 스냅샷을 동적으로 프로비저닝합니다.

프로시저

  1. StorageClass가 있는지 확인합니다.
    $ kubectl get sc
    NAME                             PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gc-storage-profile               csi.vsphere.vmware.com   Delete          Immediate              true                   11d
    gc-storage-profile-latebinding   csi.vsphere.vmware.com   Delete          WaitForFirstConsumer   true                   11d
    
  2. 1단계의 StorageClass를 사용하여 PVC를 생성합니다.
    다음 YAML을 예제로 사용합니다.
    $ cat example-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-raw-block-pvc
    spec:
      volumeMode: Block
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: gc-storage-profile
    
    $ kubectl apply -f example-pvc.yaml
    $ kubectl get pvc
    NAME                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    example-raw-block-pvc   Bound    pvc-4c0c030d-25ac-4520-9a04-7aa9361dfcfc   1Gi        RWO            gc-storage-profile   2m1s
    
  3. VolumeSnapshotClass를 사용할 수 있는지 확인합니다.
    $ kubectl get volumesnapshotclass
    NAME                         DRIVER                   DELETIONPOLICY   AGE
    volumesnapshotclass-delete   csi.vsphere.vmware.com   Delete           11d
    
  4. 3단계에서 얻은 VolumeSnapshotClass를 사용하여 VolumeSnapshot을 생성합니다.
    $cat example-snapshot.yaml
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: example-raw-block-snapshot
    spec:
      volumeSnapshotClassName: volumesnapshotclass-delete
      source:
        persistentVolumeClaimName: example-raw-block-pvc
    
    $ kubectl apply -f example-snapshot.yaml
    $ kubectl get volumesnapshot
    NAME                         READYTOUSE   SOURCEPVC               SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS                SNAPSHOTCONTENT
                                CREATIONTIME   AGE
    example-raw-block-snapshot   true         example-raw-block-pvc                           1Gi           volumesnapshotclass-delete   snapcontent-ae019c16-b07c-4a92-868b-029babd641d3   6s             6s
    
    

TKG 클러스터에서 사전 프로비저닝된 스냅샷 생성

감독자에서 동일한 블록 볼륨(PVC)의 볼륨 스냅샷을 사용하여 TKG 클러스터에서 블록 볼륨(PVC)의 미리 프로비저닝된 볼륨 스냅샷을 생성합니다.

다음 단계에 따라 감독자에 남아 있는 기본 스냅샷의 정보를 사용하여 새 TKG 클러스터에 볼륨 스냅샷을 정적으로 생성합니다.

참고: 볼륨 스냅샷은 감독자에서 직접 생성할 수 없습니다.

사전 요구 사항

  • Kubernetes 스냅샷 생성에 대한 정보를 숙지해야 합니다. 자세한 내용은 Kubernetes 설명서의 볼륨 스냅샷 페이지를 참조하십시오.
  • 볼륨 스냅샷이 다음 조건을 충족하는지 확인합니다.
    • 볼륨 스냅샷이 소스 PVC가 상주하는 동일한 네임스페이스에 있습니다.
    • 볼륨 스냅샷이 TKG 클러스터가 상주하는 동일한 네임스페이스에 있습니다.

또한 동일한 네임스페이스의 다른 TKG 클러스터에서 더 이상 필요하지 않은 볼륨 스냅샷을 새 TKG 클러스터에서 재사용할 수도 있습니다. 이렇게 하려면 원래 TKG 클러스터에 있는 VolumeSnapshotContentdeletionPolicyRetain으로 변경한 다음 해당하는 VolumeSnapshotVolumeSnapshotContent 개체를 삭제합니다.

프로시저

  1. 감독자에 있는 원래 VolumeSnapshot 개체의 이름을 기록해둡니다.
    이전 TKG 클러스터의 볼륨 스냅샷을 재사용하는 경우 이전 TKG 클러스터에 있는 이전 VolumeSnapshotContent 개체의 snapshotHandle에서 감독자 VolumeSnapshot 이름을 검색할 수도 있습니다.
  2. VolumeSnapshotContent 개체를 생성합니다.
    YAML 파일에서 다음 항목의 값을 지정합니다.
    snapshotHandle의 경우 1단계에서 얻은 감독자 VolumeSnapshot 이름을 입력합니다.
    참고: 참고: 다른 TKG 클러스터의 볼륨 스냅샷을 재사용하는 경우 새 TKG 클러스터에서 VolumeSnapshotContent를 생성하기 전에 deletionPolicy를 [보존]으로 설정하고 이전 TKG 클러스터에서 VolumeSnapshotVolumeSnapshotContent 개체를 삭제합니다.
    다음 YAML 매니페스트를 예제로 사용합니다.
    --------
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent 
    metadata:
     name: static-tkg-block-snapshotcontent 
    spec:
     deletionPolicy: Delete
     driver: csi.vsphere.vmware.com
     source:
      snapshotHandle: "supervisor-block-volumeSnapshot-name" # Enter the VolumeSnapshot name from the Supervisor.
     volumeSnapshotRef:
      name: static-tkg-block-snapshot
      namespace: "supervisor-tkg-namespace" # Enter the namespace of Tanzu Kubernetes Grid Cluster.
    ---------
  3. 2단계에서 생성한 VolumeSnapshotContent 개체와 일치하도록 VolumeSnapshot을 생성합니다.
    ---------
    apiVersion: snapshot.storage.k8s.io/vl
    kind: VolumeSnapshot
    metadata:
     name: static-tkg-block-snapshot 
    spec: 
     source:
      volumeSnapshotContentName: static-tkg-block-snapshotcontent
    ---------
    
  4. 3단계에서 생성한 VolumeSnapshot에서 ReadyToUse가 "true"로 표시되는지 확인합니다.
    kubecti getvolumesnapshot static-tkg-block-snapshot
    NAME	                   READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT            RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT	              CREATIONTIME AGE
    static-tkg-block-snapshot  true	             static-tkg-biock-snapshotcontent 5Gi	                   static-tkg-block-snapsnotcontent 76m	      22m
    

TKG 클러스터에서 볼륨 스냅샷 복원

이미 생성된 볼륨 스냅샷을 복원합니다.

프로시저

  1. 복원할 볼륨 스냅샷이 TKG 클러스터에 있는지 확인합니다.
    $ kubectl get volumesnapshot
    NAME                         READYTOUSE   SOURCEPVC               SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS                SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    example-raw-block-snapshot   true         example-raw-block-pvc                           1Gi           volumesnapshotclass-delete   snapcontent-ae019c16-b07c-4a92-868b-029babd641d3   2m36s          2m36s
    
  2. 볼륨 스냅샷에서 PVC를 생성합니다.
    $ cat example-restore.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-raw-block-restore
    spec:
      storageClassName: gc-storage-profile
      dataSource:
        name: example-raw-block-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      volumeMode: Block
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    
    $ kubectl apply -f example-restore.yaml
    $ kubectl get pvc
    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    example-raw-block-pvc       Bound    pvc-4c0c030d-25ac-4520-9a04-7aa9361dfcfc   1Gi        RWO            gc-storage-profile   11m
    example-raw-block-restore   Bound    pvc-96eaab16-9ec1-446a-9392-e86d13c9b2e2   1Gi        RWO            gc-storage-profile   2m8s