[EKS] Dynamic 볼륨 설정

EKS EBS를 동적으로 확장하는 방법과 IAM 역할 설정 및 StorageClass 생성을 안내합니다.

[EKS] Dynamic 볼륨 설정
Photo by Patrick Lindenberg / Unsplash

개요

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
Notion Image

Amazon EBS CSI 드라이버 설치

EKS 추가기능 > 애드온 구성으로 이동합니다.

EBS CSI 드라이버를 클릭한 뒤 IRSA를 클릭하여 생성한 role을 추가합니다.

Notion Image

해당 IAM 역할을 등록하고 저장합니다.

아래 cluster 이름을 통해 등록된 IAM Role을 확인해볼 수 있습니다.

eksctl get addon --cluster <CLUSTER_NAME>
Notion Image

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
Notion Image

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