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: 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 드라이버 설치