새소식

AWS/EKS

[EKS Study 3주차] EKS Storage - EBS CSI Driver

  • -

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

이번 포스팅에서는 EKS Storage 중 EBS CSI Driver 에 대해 알아보겠습니다.

 

1. EBS CSI Driver

 

EBS CSI Driver 는 AWS EBS Storage 를 사용하여 EKS PV 를 생성할 수 있게 해주는 CSI Driver 입니다.

 

1.1. EBS CSI Driver 설치를 위한 IRSA 설정

 

  • EKS Cluster 를 eksctl 로 설치했기 때문에 아래 명령어를 통해 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

 

  • eksctl 명령어 수행 시, CloudFormation Stack 이 생성되는 것을 알 수 있습니다.

 

1.2. EBS CSI Driver 설치 - eksctl addons

 

EBS CSI Driver 는 eksctl 명령어로 간단하게 설치할 수 있습니다.

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 \
  --force

 

2. EBS PV/PVC 사용

 

EBS CSI Driver 에서는 gp2 타입의 EBS가 Default 입니다.

 

2.1. Storage Class 추가

 

gp3 타입을 사용하기 위해 다음과 같은 Storage Class 를 추가해줍니다.

cat <<EOT > gp3-sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: gp3
allowVolumeExpansion: true
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
  allowAutoIOPSPerGBIncrease: 'true'
  encrypted: 'true'
EOT
kubectl apply -f gp3-sc.yaml

 

 

2.2. PV/PVC 배포

 

cat <<EOT > awsebs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
  storageClassName: gp3
EOT
kubectl apply -f awsebs-pvc.yaml

 

2.3. PV를 사용하는 Pod 배포

 

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
kubectl apply -f awsebs-pod.yaml

 

AWS 볼륨 콘솔

 

EBS PV 의 nodeAffinity 를 확인해보면, AZ 를 구분하여 배포 하는 것을 알 수 있습니다.

  • 이는 EBS 의 특징때문인데, EBS 는 각 가용영역에만 속할 수 있기 때문입니다.
kubectl get pv -o yaml | grep nodeAffinity: -A8 | yh
kubectl get node --label-columns=topology.ebs.csi.aws.com/zone,topology.kubernetes.io/zone

 

 

2.4. EBS Volume Size Up

EKS PV 에 부착된 EBS 의 볼륨 사이즈를 변경해보겠습니다.

 

현재 EBS Volume Size 를 확인해봅니다.

kubectl exec -it app -- sh -c 'df -hT --type=ext4'

 

 

EBS Size Up

kubectl patch pvc ebs-claim -p '{"spec":{"resources":{"requests":{"storage":"10Gi"}}}}'

 

 

AWS 볼륨 콘솔

 


 

이번 포스팅에서는 EBS CSI Driver 에 대해 알아보았습니다.
EKS 를 사용하며 굉장히 많이 사용되는 서비스이지만, EBS 가 AZ 에 한정되다보니 어느정도 제한이 있기도 합니다.

다음 포스팅에서는 이렇게 생성한 EBS PV 를 Snapshot 으로 보관하는 방법인 Snapshot Driver 에 대해 알아보겠습니다.

 

참고 문서

https://malwareanalysis.tistory.com/598

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/ebs-csi.html

https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/parameters.md

Contents

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