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