스냅샷(Snapshot) 은 현재 상태를 저장하여 나중에 해당 상태로 복원할 수 있는 일종의 백업 파일이다
curl -s -O https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
curl -s -O https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
curl -s -O https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
kubectl apply -f snapshot.storage.k8s.io_volumesnapshots.yaml,snapshot.storage.k8s.io_volumesnapshotclasses.yaml,snapshot.storage.k8s.io_volumesnapshotcontents.yaml
kubectl get crd | grep snapshot
VolumeSnapshot 리소스를 사용하려면 먼저 Kubernetes 클러스터에 필요한 Custom Resource Definitions(CRDs)을 등록
# rbac-snapshot-controller.yaml 파일을 다운로드
curl -s -O https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
# setup-snapshot-controller.yaml 파일 다운로드
curl -s -O https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
# 두 개의 YAML 파일을 Kubernetes 클러스터에 적용하는 명령어
kubectl apply -f rbac-snapshot-controller.yaml,setup-snapshot-controller.yaml
# 배포 상태 확인
kubectl get deploy -n kube-system snapshot-controller
# VolumeSnapshotClass 생성
curl -s -O https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/snapshot/manifests/classes/snapshotclass.yaml
kubectl apply -f snapshotclass.yaml
kubectl get vsclass
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot # EBS 볼륨의 스냅샷을 생성
metadata:
name: ebs-volume-snapshot # VolumeSnapshot의 이름을 ebs-volume-snapshot
spec:
volumeSnapshotClassName: csi-aws-vsc
source:
persistentVolumeClaimName: my-pvc-claim
스냅샷이 생성된걸 확인할 수 있다.
만들었던 ebs-my-app[pod] 와 my-pvc-claim[pvc] 를 삭제
이름은 변경해서 지금 코드와 캡쳐본이 다름.!
🔖 볼륨이 삭제되는지는 ReclaimPolicy 설정에 따라 다른데.
Retain: PVC를 삭제해도 EBS 볼륨은 삭제되지 않고 남아있다.
Delete: PVC를 삭제하면 자동으로 EBS 볼륨도 삭제됨
❗️❗️ 동적 프로비저닝을 사용하면 Kubernetes가 PersistentVolume (PV) 리소스를 자동으로 생성되기 때문에, ReclaimPolicy가 기본값인 Delete로 설정된다. ❗️ ❗️
다시 pvc,pod를 생성해주면 볼륨이 다시 생긴다.!
pvc 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ebs-snapshot-restored-claim
spec:
storageClassName: my-storage-class
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
dataSource:
name: ebs-volume-snapshot # 복원할 스냅샷의 이름을 적어줘야함.
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
pod생성
apiVersion: v1
kind: Pod
metadata:
name: ebs-my-app
spec:
containers:
- name: app
image: centos
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 10; done"]
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: ebs-snapshot-restored-claim