Volume Snapshot 기능을 설정 및 활용
# IRSA 생성
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster ${CLUSTER_NAME} \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EBS_CSI_DriverRole
# IRSA 확인
eksctl get iamserviceaccount --cluster ${CLUSTER_NAME}
# EBS CSI Driver 설치
eksctl create addon --name aws-ebs-csi-driver\ #설치할 애드온의 이름
--cluster ${CLUSTER_NAME}\ #설치할 클러스터의 이름을 지정
--service-account-role-arn arn:aws:iam::${ACCOUNT_ID}:role/AmazonEKS_EBS_CSI_DriverRole\ #EBS CSI Driver가 사용하는 IAM 역할 ARN을 지정
--force #EBS CSI Driver가 설치된 경우에도 강제로 재설치를 수행
1.스토리지가 동적으로 프로비저닝
StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-storage-class
allowVolumeExpansion: true #pvc가 동적으로 생성한 ebs볼륨의 크기를 이후에 확장할수있다.
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer # Pod 배치 후 프로비저닝
parameters:
type: gp3 #EBS 볼륨 유형을 지정
allowAutoIOPSPerGBIncrease: 'true' #IOPS 최적화 설정
encrypted: 'true' # 생성되는 EBS 볼륨은 기본적으로 암호화
2.PVC(PersistentVolumeClaim) 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc-claim # PVC의 이름
spec:
accessModes:
- ReadWriteOnce # 단일 노드에서 읽기와 쓰기가 가능,AWS EBS 볼륨은 일반적으로 ReadWriteOnce 모드만 지원
resources:
requests:
storage: 4Gi # 4GiB 크기의 스토리지를 요청
storageClassName: my-storage-class # PVC가 참조할 StorageClass의 이름
3.Pod 생성
PVC를 사용하는 Pod를 정의.
Pod가 실행될 때 PVC와 연결된 볼륨이 노드에 자동으로 마운트된다.
apiVersion: v1 # v1 버전의 API
kind: Pod #파일이 정의하는 리소스 종류
metadata:
name: ebs-my-app # pod의 이름
spec:
terminationGracePeriodSeconds: 3 #Pod가 종료될 때, 종료 신호를 받은 후 3초 동안 종료를 기다리도록 설정
containers: # Pod 내에서 실행될 컨테이너에 대한 설정을 정의
- name: app # 컨테이너의 이름
image: centos # CentOS 이미지를 사용하여 컨테이너를 실행
command: ["/bin/sh"] # 컨테이너가 실행될 때 실행할 명령어를 지정, 여기서는 shell로 지정
args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 10; done"] # 매 10초마다 UTC 시간(date -u)을 /data/out.txt 파일에 기록, Pod 내에서 마운트된 EBS 볼륨을 통해 저장
volumeMounts: # 컨테이너에서 사용할 볼륨을 정의하는 부분
- name: persistent-storage # 볼륨의 이름
mountPath: /data #볼륨은 컨테이너 내에서 /data 경로에 마운트
volumes: #스토리지(볼륨)를 정의하는 부분
- name: persistent-storage
persistentVolumeClaim:
claimName: my-pvc-claim # PVC를 사용하여 Pod에 스토리지를 연결
이렇게하면 볼륨이 자동으로 생성 동적프로비저닝이 된다.
kubectl exec ebs-my-app -- tail -f /data/out.txt
2025-01-22T10:15:25Z
2025-01-22T10:15:35Z
2025-01-22T10:15:45Z
...