PersistentVolume 스냅샷 만들기
GKE 클러스터의 영구 볼륨 및 동적 프로비저닝에 Kubernetes 볼륨 스냅샷 기능을 사용할 수 있습니다.
볼륨 스냅샷을 사용하면 특정 시점의 볼륨 사본을 만들 수 있습니다. 이 복사본을 사용하여 볼륨을 이전 상태로 되돌리거나 대체 볼륨을 프로비저닝할 수 있습니다.
다음 구성요소로 볼륨 스냅샷을 프로비저닝하고 연결할 수 있습니다.
요구사항
Azure용 GKE에서 볼륨 스냅샷을 사용하려면 다음이 필요합니다.
스냅샷을 지원하는 컨테이너 스토리지 인터페이스(CSI) 드라이버를 사용하는 볼륨 Azure용 GKE에서 사용하는 Azure 디스크 및 Azure File 드라이버는 기본적으로 스냅샷을 지원합니다.
스냅샷을 지원하는 모든 CSI 드라이버의 목록은 Kubernetes 문서의 드라이버에서 '기타 기능' 열을 참조하세요.
스냅샷에 사용할 기존
PersistentVolumeClaim
이 있어야 합니다. 스냅샷 소스에 사용하는PersistentVolume
은 CSI 드라이버로 관리되어야 합니다.PersistentVolume
사양의driver: disk.csi.azure.com
또는file.csi.azure.com
에csi
섹션이 있는지 확인하여 CSI 드라이버를 사용 중인지 확인할 수 있습니다. 다음 섹션의 설명대로 클러스터가 CSI 드라이버에서 동적으로 PersistentVolumes를 프로비저닝하면 CSI 드라이버로 관리됩니다.
시작하기 전에
볼륨 스냅샷 만들기 및 사용
이 문서의 예시에서는 다음 작업을 수행하는 방법을 보여줍니다.
볼륨 스냅샷을 사용하려면 다음 단계를 완료해야 합니다.
VolumeSnapshot
객체를 만들어 기존 PersistentVolumeClaim의 스냅샷을 요청합니다.PersistentVolumeClaim
에서VolumeSnapshot
을 참조하여 볼륨을 해당 스냅샷으로 복원하거나 스냅샷을 사용하여 새 볼륨을 만듭니다.
PersistentVolumeClaim
및 Pod
예시 만들기
PersistentVolumeClaim
객체를 만들려면 다음 매니페스트를example-pvc.yaml
로 저장합니다.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
spec.storageClassName
에는 지원되는 CSI 드라이버를 사용하는 모든 스토리지 클래스를 지정할 수 있습니다. 이 예시에서는 기본standard-rwo
스토리지 클래스를 사용합니다.매니페스트 적용
kubectl apply -f example-pvc.yaml
현재 날짜와 시간을 볼륨에 쓰는 포드를 만듭니다. 포드를 만들려면 다음 매니페스트를
snapshot-shell.yaml
로 저장합니다.apiVersion: v1 kind: Pod metadata: name: snapshot-shell spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "echo $(date -u) >> /data/out.txt"] volumeMounts: - name: snapshot-volume mountPath: /data restartPolicy: Never volumes: - name: snapshot-volume persistentVolumeClaim: claimName: example-pvc
매니페스트 적용
kubectl apply -f snapshot-shell.yaml
포드 상태를 확인합니다.
kubectl get pod snapshot-shell
포드가 실행 및 완료되는 데 다소 시간이 걸릴 수 있습니다. 다음과 비슷한 출력이 표시될 때까지 위의 명령어를 실행하면 됩니다.
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
VolumeSnapshot 만들기
VolumeSnapshot
객체는 기존 PersistentVolumeClaim
객체의 스냅샷에 대한 요청입니다. VolumeSnapshot
객체를 만드는 경우 클러스터는 PersistentVolume
객체와 같은 클러스터의 리소스인 VolumeSnapshotContent
객체를 사용하여 자동으로 만들고 바인딩합니다.
다음 매니페스트를
volumesnapshot.yaml
로 저장합니다.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvc
매니페스트 적용
kubectl apply -f volumesnapshot.yaml
볼륨 스냅샷을 만들면 클러스터에서 해당
VolumeSnapshotContent
객체를 만듭니다. 이 객체는VolumeSnapshot
객체의 스냅샷과 바인딩을 저장합니다.VolumeSnapshotContents
객체와는 직접 상호작용하지 않습니다.클러스터에서
VolumeSnapshotContents
객체를 만들었는지 확인합니다.kubectl get volumesnapshotcontents
출력은 다음과 비슷합니다.
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
볼륨 스냅샷이 준비되었는지 확인
볼륨 스냅샷 콘텐츠가 생성되면 VolumeSnapshotClass
에서 지정한 CSI 드라이버가 해당 스토리지 시스템에 스냅샷을 만듭니다. 클러스터가 스토리지 시스템에 스냅샷을 만들고 VolumeSnapshot
객체에 바인딩하면 스냅샷을 사용할 수 있습니다. 다음 명령어를 실행하여 상태를 확인할 수 있습니다.
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
스냅샷을 사용할 수 있으면 다음과 비슷한 출력이 표시됩니다.
NAME READY
example-snapshot true
볼륨 스냅샷 복원
PersistentVolumeClaim
의 VolumeSnapshot
을 참조하여 기존 볼륨의 데이터가 포함된 새 볼륨을 프로비저닝하거나 스냅샷으로 캡처한 상태로 볼륨을 복원할 수 있습니다.
PersistentVolumeClaim
의 VolumeSnapshot
을 참조하려면 dataSource
필드를 PersistentVolumeClaim
에 추가합니다.
이 예시에서는 새 PersistentVolumeClaim
에서 만든 VolumeSnapshot
을 참조하고 PersistentVolumeClaim
을 마운트하는 포드를 만듭니다.
다음 매니페스트를
pvc-restore.yaml
로 저장합니다.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: example-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
매니페스트 적용
kubectl apply -f pvc-restore.yaml
PVC를 포드에 마운트하고
out.txt
콘텐츠를 로그로 출력하는 임시 포드를 시작합니다.다음 매니페스트를
restore-log.yaml
로 저장합니다.apiVersion: v1 kind: Pod metadata: name: restore-verify spec: volumes: - name: restore-data persistentVolumeClaim: claimName: pvc-restore containers: - name: shell-container image: ubuntu:bionic volumeMounts: - mountPath: "/data" name: restore-data command: [ "/bin/sh" ] args: ["-c", "cat /data/out.txt", "exit", "1"] restartPolicy: Never
매니페스트 적용
kubectl apply -f restore-log.yaml
스냅샷 복원 여부 확인
이전 단계에서 만든 포드가 스냅샷에서 읽습니다. 스냅샷에서 데이터를 보려면 kubectl logs
명령어를 사용합니다.
kubectl logs restore-verify
출력에는 스냅샷의 타임스탬프가 포함되어야 합니다.
삭제
이 페이지에서 사용한 리소스에 대한 비용이 발생하지 않도록 하려면 다음 단계를 수행합니다.
VolumeSnapshot
을 삭제합니다.kubectl delete volumesnapshot example-snapshot
임시 포드를 삭제합니다.
kubectl delete -f restore-log.yaml
포드를 삭제합니다.
kubectl delete -f snapshot-shell.yaml
PersistentVolumeClaim
객체를 삭제합니다.kubectl delete pvc example-pvc pvc-restore
다음 단계
- Kubernetes 볼륨 스냅샷 문서 읽어보기
- 추가 CSI 드라이버 설치