[EKS] Dynamic 볼륨 설정
EKS EBS를 동적으로 확장하는 방법과 IAM 역할 설정 및 StorageClass 생성을 안내합니다.
개요
EKS EBS를 동적으로 확장하기 위한 방법을 정리하였습니다.
- AWS IAM 서비스와 OIDC 연동이 필요합니다.
Role 생성
OIDC 주소 확인이 필요합니다.
aws eks describe-cluster --name bjchoi-test-cluster-eks --query "cluster.identity.oidc.issuer" --output text
해당 OIDC를 아래 <OIDC-ID>
란에 추가하고 Role을 생성합니다.
cat <<EOF > trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::.......:oidc-provider/oidc.eks.ap-northeast-2.amazonaws.com/id/<YOUR-OIDC-ID>"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.ap-northeast-2.amazonaws.com/id/<YOUR-OIDC-ID>:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
}
}
}
]
}
EOF
aws iam create-role \
--role-name AmazonEKS_EBS_CSI_DriverRole_bjchoi \
--assume-role-policy-document file://trust-policy.json
생성된 Role에 AWS 관리형 정책을 추가합니다.
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--role-name AmazonEKS_EBS_CSI_DriverRole_bjchoi

Amazon EBS CSI 드라이버 설치
EKS 추가기능 > 애드온 구성으로 이동합니다.
EBS CSI 드라이버를 클릭한 뒤 IRSA를 클릭하여 생성한 role을 추가합니다.

해당 IAM 역할을 등록하고 저장합니다.
아래 cluster 이름을 통해 등록된 IAM Role을 확인해볼 수 있습니다.
eksctl get addon --cluster <CLUSTER_NAME>

StorageClass 생성
에드온이 EKS 설치까지 완료되었다면, kubectl get pvc
를 확인해보면 gp2 StorageClass가 생성된 것을 확인할 수 있습니다. gp2 storageclass를 지정하여 생성한다면 gp2 storage가 바로 생성되지만, 우리는 gp3를 활용하여야하므로 새로운 StorageClass를 생성합니다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp3
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
allowVolumeExpansion: true
reclaimPolicy: Delete
provisioner: ebs.csi.aws.com
로 등록하고 생성하여야만 PVC가 생성됐을 때 동적으로 생성될 수 있습니다. 생성하고 PVC 연결을 확인합니다.
StorageClass를 gp3로 지정하고 pvc를 확인해보면 정상적으로 바운딩 된 것을 확인할 수 있습니다.
이후 EBS 볼륨 콘솔에서 확인해봤을 때 Dynamic 볼륨이 생성된 것을 확인할 수 있습니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
data-loki-backend-0 Bound pvc-3024440b-7288-49cc-bac6-f53eb20322b1 2Gi RWO gp3 <unset> 12m
data-loki-backend-1 Bound pvc-c4c6f497-e2ae-4f45-98b6-5d41699e347c 2Gi RWO gp3 <unset> 12m
data-loki-write-0 Bound pvc-6b8ccba8-3ca8-4ea4-b0d4-36f88b3abc41 2Gi RWO gp3 <unset> 12m
data-loki-write-1 Bound pvc-a595a1dd-ec78-41cd-bc7d-8dd6b662af27 2Gi RWO gp3 <unset> 12m
data-loki-write-2 Bound pvc-e2f6d33f-9181-4012-a45f-e84d9e93dd82 2Gi RWO gp3 <unset> 12m
export-0-loki-minio-0 Bound pvc-3069d73c-3b58-4925-9e0e-0e7ccef308b9 2Gi RWO gp3 <unset> 12m
export-1-loki-minio-0 Bound pvc-bacc5a26-5015-4940-9bf9-7d8f2cc30ec1 2Gi RWO gp3 <unset> 12m

해당 볼륨은 reclaimPolicy
정책에 따라 관리되며 현재 reclaimPolicy: Delete
로 생성하였기 때문에 할당된 파드가 삭제되면 자동으로 볼륨은 삭제되므로 주의하여야합니다.