5.3.5. 볼륨 스냅샷 생성

VolumeSnapshot 오브젝트를 생성할 때 OpenShift Container Platform은 볼륨 스냅샷을 생성합니다.

사전 요구 사항

  • 실행 중인 OpenShift Container Platform 클러스터에 로그인합니다.
  • VolumeSnapshot 오브젝트를 지원하는 CSI 드라이버를 사용하여 생성된 PVC입니다.
  • 스토리지 백엔드를 프로비저닝하는 스토리지 클래스입니다.
  • 스냅샷을 사용하려는 PVC(영구 볼륨 클레임)를 사용하는 Pod가 없습니다.

    참고

    Pod가 이를 사용하는 경우 PVC의 볼륨 스냅샷을 생성하지 마십시오. 그러면 PVC가 quiesced(일시 중지됨)되지 않기 때문에 데이터 손상이 발생할 수 있습니다. 일관된 스냅샷을 유지하기 위해 실행 중인 Pod를 먼저 제거해야 합니다.

절차

볼륨 스냅샷을 동적으로 생성하려면 다음을 수행합니다.

  1. 다음 YAML로 설명된 VolumeSnapshotClass 오브젝트로 파일을 생성합니다.

    volumesnapshotclass.yaml

    apiVersion: snapshot.storage.k8s.io
    kind: VolumeSnapshotClass 1
    metadata:
      name: csi-hostpath-snap
    driver: hostpath.csi.k8s.io
    deletionPolicy: Delete

    1
    볼륨 스냅샷에 속하는 다른 속성을 지정할 수 있습니다.
  2. 다음 명령을 입력하여 이전 단계에서 저장한 오브젝트를 생성합니다.

    $ oc create -f volumesnapshotclass.yaml
  3. VolumeSnapshot 오브젝트를 생성합니다.

    volumesnapshot-dynamic.yaml

    apiVersion: snapshot.storage.k8s.io
    kind: VolumeSnapshot
    metadata:
      name: mysnap
    spec:
      volumeSnapshotClassName: csi-hostpath-snap 1
      source:
        persistentVolumeClaimName: myclaim 2

    1
    볼륨 스냅샷의 특정 클래스에 대한 요청입니다. volumeSnapshotClassName 이 비어 있으면 스냅샷이 생성되지 않습니다.
    2
    영구 볼륨에 바인딩된 PersistentVolumeClaim 오브젝트의 이름입니다. 이 명령은 스냅샷을 생성할 대상을 정의합니다. 스냅샷을 동적으로 프로비저닝하는 데 필요합니다.
  4. 다음 명령을 입력하여 이전 단계에서 저장한 오브젝트를 생성합니다.

    $ oc create -f volumesnapshot-dynamic.yaml

스냅샷을 수동으로 프로비저닝하려면 다음을 수행합니다.

  1. 위에서 설명한 볼륨 스냅샷 클래스를 정의하는 것 외에도 volumeSnapshotContentName 매개변수 값을 스냅샷의 소스로 제공해야 합니다.

    volumesnapshot-manual.yaml

    apiVersion: snapshot.storage.k8s.io
    kind: VolumeSnapshot
    metadata:
      name: snapshot-demo
    spec:
      source:
        volumeSnapshotContentName: mycontent 1

    1
    사전 프로비저닝된 스냅샷에는 volumeSnapshotContentName 매개변수가 필요합니다.
  2. 다음 명령을 입력하여 이전 단계에서 저장한 오브젝트를 생성합니다.

    $ oc create -f volumesnapshot-manual.yaml

검증

클러스터에서 스냅샷을 생성한 후 스냅샷에 대한 추가 세부 정보를 사용할 수 있습니다.

  1. 생성된 볼륨 스냅샷에 대한 세부 정보를 표시하려면 다음 명령을 입력합니다.

    $ oc describe volumesnapshot mysnap

    다음 예시는 mysnap 볼륨 스냅샷에 대한 세부 정보를 표시합니다.

    volumesnapshot.yaml

    apiVersion: snapshot.storage.k8s.io
    kind: VolumeSnapshot
    metadata:
      name: mysnap
    spec:
      source:
        persistentVolumeClaimName: myclaim
      volumeSnapshotClassName: csi-hostpath-snap
    status:
      boundVolumeSnapshotContentName: snapcontent-1af4989e-a365-4286-96f8-d5dcd65d78d6 1
      creationTime: "2020-01-29T12:24:30Z" 2
      readyToUse: true 3
      restoreSize: 500Mi

    1
    컨트롤러가 생성한 실제 스토리지 콘텐츠의 포인터입니다.
    2
    스냅샷이 생성된 시간입니다. 스냅샷에는 이 표시된 시점에서 사용 가능한 볼륨 내용이 포함되어 있습니다.
    3
    값을 true로 설정하면 스냅샷을 사용하여 새 PVC로 복원할 수 있습니다.
    값을 false로 설정하면 스냅샷이 생성됩니다. 하지만 스토리지 백엔드는 스냅샷을 사용할 수 있도록 추가 작업을 수행하여 새 볼륨으로 복원해야 합니다. 예를 들어, Amazon Elastic Block Store 데이터를 다른 저렴한 위치로 이동할 수 있으며, 이 작업에는 몇 분이 걸릴 수 있습니다.
  2. 볼륨 스냅샷이 생성되었는지 확인하려면 다음 명령을 입력합니다.

    $ oc get volumesnapshotcontent

    실제 컨텐츠에 대한 포인터가 표시됩니다. boundVolumeSnapshotContentName 필드가 입력된 경우 VolumeSnapshotContent 오브젝트가 존재하고 스냅샷이 생성된 것입니다.

  3. 스냅샷이 준비되었는지 확인하려면 VolumeSnapshot 오브젝트에 readyToUse: true가 있는지 확인합니다.