GKE 클러스터의 영구 볼륨 및 동적 프로비저닝에 Kubernetes 볼륨 스냅샷 기능을 사용할 수 있습니다.
볼륨 스냅샷을 사용하면 특정 시점의 볼륨 사본을 만들 수 있습니다. 이 복사본을 사용하여 볼륨을 이전 상태로 되돌리거나 대체 볼륨을 프로비저닝할 수 있습니다.
다음 구성요소로 볼륨 스냅샷을 프로비저닝하고 연결할 수 있습니다.
요구사항
AWS용 GKE에서 볼륨 스냅샷을 사용하려면 다음이 필요합니다.
스냅샷을 지원하는 컨테이너 스토리지 인터페이스(CSI) 드라이버를 사용하는 볼륨 AWS용 GKE가 기본적으로 사용하는 Elastic Block Store(EBS) 드라이버는 스냅샷을 지원합니다.
스냅샷을 지원하는 모든 CSI 드라이버의 목록은 Kubernetes 문서의 드라이버에서 '기타 기능' 열을 참조하세요.
스냅샷에 사용할 기존
PersistentVolumeClaim이 있어야 합니다. 스냅샷 소스에 사용하는PersistentVolume은 CSI 드라이버로 관리되어야 합니다.PersistentVolume사양의driver: ebs.csi.aws.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: 1Gispec.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.yamlPVC를 포드에 마운트하고
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.yamlPersistentVolumeClaim객체를 삭제합니다.kubectl delete pvc example-pvc pvc-restore
다음 단계
- Kubernetes 볼륨 스냅샷 문서 읽어보기
- 추가 CSI 드라이버 설치