[EKS] AWS EBS CSI Driver 설치 및 구성하기

vinca·2024년 2월 17일
2

🦓 EKS

목록 보기
14/23
post-thumbnail

Introduction

영구 볼륨환경인 PV의 생성에 실제 스토리지가 생성되는 위치는 크게 2가지의 종류가 있다.

이전 챕터에서 살펴본 것처럼 Local Path Provisioner와 같이 내부의 로컬 스토리지 영역을 사용할 수도 있고, 외부 스토리지 공급자(AWS EBS, EFS)를 사용할 수도 있다.

이번에는 AWS EBS 스토리지를 사용하는 AWS EBS CSI Driver에 대해서 알아볼 것이다.

💡CSI의 구성요소
CSIProvisioner, Attacher, Controller, NodeServer로 구성된다.

AWS EBS CSI Driver

AWS EBS CSI Driver는 EKS 클러스터에 PV의 프로비저닝 및 마운트 작업을 수행할 수 있고, AWS EBS 볼륨을 동적으로 생성하고 삭제할 수도 있다.

즉, 클러스터 내부 PV를 구성하면서, 내부 PV와 연결된 외부 스토리지를 동적으로 생성하는 역할을 수행한다. 🏃🏻‍♂️

AWS EBS CSI Driver의 특징

AWS EBS CSI Driver의 특징에 대해서 간략하게 알아보자.

1. AccessMode는 ReadWriteOnce 고정!

AWS EBS CSI Driver를 구성한다면, PV와 PVC를 구성할때 정의하는 AccessMode는 ReadWriteOnce로 고정된다.
AWS EBS CSI Driver의 특성상 노드당 1:1로 구성되어야 하므로 RWX, ROX는 설정할 수 없기 때문이다.

2. EBS가 있는 가용영역으로 PV의 NodeAffinty를 설정!

AWS EBS 볼륨은 특정 가용 영역에 종속되어 있으므로, EBS 볼륨을 PV로 사용하기 위해서는 해당 EBS 볼륨과 동일한 가용 영역에 있는 노드에 파드가 생성되야 한다.

이를 보장하기 위해, PV에 노드 어피니티(NodeAffinity) 설정을 사용하여 EBS 볼륨의 가용 영역과 일치하는 노드에 있는 파드만이 PV를 사용할 수 있도록 한다.

AWS EBS CSI Driver 설치

먼저 당연하게도 AWS의 자원을 갖다가 생성하고 삭제하는 작업을 하므로 IRSA가 되어야한다.

이후 EBS CSI Driver를 설치하면 된다.

설치 시, 파드 형태로 ebs-sci-controller와 데몬셋 형태로 ebs-csi-node가 설치된다.

자 이제 본격적으로 설치해보자.

🔧설치 과정

Amazon EBS CSI Driver 버전 정보 확인

// Amazon EBS CSI Driver 버전 정보 (True = 기본 설치 버전)
aws eks describe-addon-versions \
    --addon-name aws-ebs-csi-driver \
    --kubernetes-version 1.26 \
    --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \
    --output text

현재 기준 1.27이 가장 최신 드라이버임을 확인할 수 있다.

1. IRSA 생성

// AWS 관리형 IAM Policy인 AmazonEBSCSIDriverPolicy 사용
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}

AWS EBS CSI Driver의 경우 AWS LB Controller와 달리 AWS가 EKS에 공식적으로 Add-on형태로 IAM 정책을 제공한다.

이전에 AWS LB Controller를 사용하기 위해서는 직접 IAM Policy를 다운받고, 역할에 연결하는 과정이 필요했는데 이 과정이 필요없다!🫢

명령어를 통해 생성을 완료하게 되면 실제로 IAM Role과 SA가 생성된 것을 확인할 수 있다.

  • IAM Role 생성 결과

  • SA 생성 결과

2. Amazon 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\
 --force

이제 AWS EBS CSI (Elastic Block Store Container Storage Interface) 드라이버를 EKS 클러스터에 설치하면 된다.

AWS에서 add-on 형태로 제공하므로 eksctl create addon 명령어를 사용해서 설치할 수 있다.
(AWS LB Controller는 Helm으로 설치 했었는데..차별한다😭)

✔️ 이 과정에서 앞에서 생성한 IRSA를 사용해서 EBS CSI Driver인 ebs-csi-controller-saebs-csi-node-sa를 생성하게 된다.

  • EBS CSI Driver

  • 생성 결과

설치 확인

EKS에 Add-On 형태로 설치된 것을 확인할 수 있다.

eksctl get addon --cluster ${CLUSTER_NAME}

Amazon EBS CSI Driver의 파드와 파드 내 컨테이너를 확인해보자.

// ebs-csi-controller 파드에 컨테이너 확인
kubectl get pod -n kube-system -l app=ebs-csi-controller -o jsonpath='{.items[0].spec.containers[*].name}' ; echo

// ebs-csi-node 데몬셋에 컨테이너 확인
kubectl get daemonset -n kube-system -l app.kubernetes.io/name=aws-ebs-csi-driver -o jsonpath='{.items[0].spec.template.spec.containers[*].name}' ; echo

ebs-csi-contoller에 6개의 컨테이너, ebs-csi-node에 3개의 컨테이너로 총 9개의 컨테이너가 EBS CSI Driver를 이루며 동작하는 것을 확인할 수 있다.

  • 총 9개의 컨테이너가 동작

  • 파드 확인

이처럼 2개의 파드의 총 9개의 컨테이너를 통해서 EBS CSI Driver가 동작하게 된다. 이를 정리하자면 다음과 같다.📒

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글