[AWS] 동적 EBS 볼륨 프로비저닝을 구현(feat스냅샷)

JEONG SUJIN·2025년 1월 22일
0
post-thumbnail

Amazon EBS CSI Driver를 이용하여 동적 EBS 볼륨 프로비저닝을 구현

Volume Snapshot 기능을 설정 및 활용

Amazon EBS CSI Driver 설치 및 설정

  • aws-ebs-csi-driver 애드온을 설치하기 전 IRSA (IAM Roles for Service Accounts) 생성.
  • EBS 볼륨 드라이버를 클러스터에 설치한 후 kubectl 명령어로 구성 요소 및 배포 상태를 확인.
  • IRSA에 올바른 권한 (AmazonEBSCSIDriverPolicy)이 연결되었는지 재확인.
# 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가 설치된 경우에도 강제로 재설치를 수행

동적 프로비저닝

  • StorageClass를 정의하고, PVC를 통해 EBS 볼륨을 자동으로 생성 및 관리.

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
...
profile
기록하기

0개의 댓글