새소식

AWS/EKS

[EKS Study 3주차] EKS Storage - Snapshot Controller

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 3주차 스터디 내용 정리

이번 포스팅에서는 EKS Storage 를 Snapshot 으로 생성해주는 EBS Volume Snapshot Controller 에 대해 알아보겠습니다.

 

1. EBS Volume Snapshot Controller

 

PV 로 사용하고 있는 중요한 EBS 를 EKS 에서 바로 Snapshot 으로 백업할 수 있도록 하는 서비스입니다.

 

현재 Snapshot Controller 는 EKS Addon으로 추가되지 않았습니다.
그렇기 때문에 직접 Snapshot Controller 설치가 필요합니다.

 

  • Snapshot Controller 설치 순서

1. kubernetes crd 설치

2. Snapshot Controller 설치

 

 

1.1. CRD 설치

 

CRD 설치

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

 

CRD 리소스 확인

kubectl get crd | grep snapshot
kubectl api-resources  | grep snapshot

 

1.2. Snapshot Controller 설치

 

curl -s -O https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
curl -s -O https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
kubectl apply -f rbac-snapshot-controller.yaml,setup-snapshot-controller.yaml

 

1.3. Test Pod 배포

 

cat << EOT > awsebs-vpc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
  storageClassName: gp3
EOT
cat << EOT > awsebs-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: app
spec:
  terminationGracePeriodSeconds: 3
  containers:
  - name: app
    image: centos
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"]
    volumeMounts:
    - name: persistent-storage
      mountPath: /data
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: ebs-claim
EOT

 

1.4. Volume Snapshot CRD 생성

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: ebs-volume-snapshot
spec:
  volumeSnapshotClassName: csi-aws-vsc
  source:
    persistentVolumeClaimName: ebs-claim

 

  • CRD 를 생성하면 AWS 콘솔에서 Snapshot 이 생성된 것을 확인할 수 있습니다.

 

2. Snapshot 복원

 

강제적인 상황 설정을 위해 Pod , VPC, PVC 를 모두 삭제해보겠습니다.

해당 리소스를 삭제하면 AWS EBS 볼륨 또한 삭제됩니다. (Delete PV Reclaim Policy)

kubectl delete pod app && kubectl delete pvc ebs-claim

 

2.1. Snapshot Restore

cat << EOT > ebs-snapshot-restored-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-snapshot-restored-claim
spec:
  storageClassName: gp3
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
  dataSource:
    name: ebs-volume-snapshot
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
EOT
kubectl apply -f ebs-snapshot-restored-claim.yaml

 

  • PVC 를 생성하되, 기존에 있던 Snapshot 으로 생성하도록 기능 추가

 

2.2. Pod 배포

 

cat << EOT > ebs-snapshot-restored-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: app
spec:
  containers:
  - name: app
    image: centos
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"]
    volumeMounts:
    - name: persistent-storage
      mountPath: /data
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: ebs-snapshot-restored-claim
EOT
kubectl apply -f ebs-snapshot-restored-pod.yaml

 

 

AWS 볼륨 콘솔에서 확인해보면 Snapshot 을 이용하여 PV에 사용할 EBS 를 생성한 후 EKS Node 에 Attach 된 것을 알 수 있습니다. 

 

 

 

Contents

포스팅 주소를 복사했습니다