모험가

EKS on Outposts - EBS CSI Driver 배포 본문

쿠버네티스/EKS

EKS on Outposts - EBS CSI Driver 배포

라리음 2025. 5. 20. 09:04

 

 

* 잘못된 정보들은 계속해서 수정할 예정이니 말씀 부탁드리겠습니다.

 

 


EBS CSI Driver란?

 

일반적인 EKS에서 EBS CSI Driver는 기본적으로 관리형 addon으로 설치가 됩니다.

https://rhims.tistory.com/74

 

AEWS 3주차 - Storage(PV, PVC, EBS)

본 글은 가시다님이 진행하시는 AEWS(AWS EKS Workshop Study)를 참여하여 정리한 글입니다. 모르는 부분이 많아서 틀린 내용이 있다면 말씀 부탁드리겠습니다! 스토리지 이해 pv를 사용하지 않으면 파

rhims.tistory.com

 

 

하지만 Local Cluster는 관리형 addon을 지원하지 않아서 기본적으로 Local Path Provisioner을 이용합니다.

 

만약 Outposts에서 Local Cluster을 운용하려면 EBS CSI Driver은 Helm으로 설치하시면 될 것 같습니다.

 

 

주의 사항

기본적으로 EBS CSI Driver은 IRSA(IAM Role for Service Account)로 동작합니다.
하지만 Local Cluster은 IRSA을 지원하지 않으므로 최소 권한에 지장이 있지만, 실습에서는 Node의 Role에 해당 권한을 부여하여
default 사용자가 EBS CSI Driver을 이용해서 EBS을 생성 및 부착 가능하게 합니다.

 

 

 


EBS CSI Driver 배포

 

 

순서는 아래와 같습니다.

 

1. Data Plane에 부착된 Role에 EBS 관련 권한 추가

2. Helm을 이용한 EBS CSI Driver 배포

3. 테스트 및 검증

 

 


Node Role에 EBS 권한 추가

 

 

 

Node에 부착된 Role을 IAM 콘솔에서 확인합니다.

Data Plane Role

 

 

해당 권한 정책중 EBS를 부착할 수 있는 권한이 없습니다.

권한 추가를 클릭하여 [AmazonEBSCSIDriverPolicy]를 클릭하여 추가합니다.

 

EBS Role

 

 

이제 Node들은 EBS를 생성 및 부착할 수 있는 권한을 취득하였습니다.

 

 


EBS CSI Driver 배포

 

 

Helm을 이용해서 EBS CSI Driver을 배포합니다.

 

 

Helm Repo 추가

helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver
helm repo update

 

배포

helm upgrade --install aws-ebs-csi-driver aws-ebs-csi-driver/aws-ebs-csi-driver \
  --namespace kube-system \
  --set controller.serviceAccount.create=true \
  --set controller.serviceAccount.name=ebs-csi-controller-sa \
  --set node.serviceAccount.create=true \
  --set node.serviceAccount.name=ebs-csi-node-sa

 

 

각 옵션 설명


옵션 설명
controller.serviceAccount.create=true 컨트롤러용 서비스 어카운트를 생성하라는 의미입니다.
컨트롤러는 StatefulSet/Deployment 등을 관리하는 중앙 컴포넌트입니다.
controller.serviceAccount.name=ebs-csi-controller-sa 생성되거나 사용할 서비스 어카운트의 이름을 명시합니다.
IRSA를 사용하는 경우 이 이름에 IAM 역할을 연결합니다.
node.serviceAccount.create=true 노드 컴포넌트용 서비스 어카운트 생성 여부입니다.
ebs-csi-node는 각 노드에 배포되는 DaemonSet입니다.
node.serviceAccount.name=ebs-csi-node-sa 마찬가지로 노드용 서비스 어카운트 이름입니다. 노드에 볼륨을 attach/detach할 때 사용됩니다.

 

* EBS CSI Driver은 Daemonset으로 배포되기에 만약 Control Plane에 배포되는 것을 방지하려면

   NodeSelector을 이용해서 배포하면 됩니다. ( --set node.nodeSelector."node-role\.kubernetes\.io\/worker"="" )

 

Selector을 안줄 경우 아래와 같이 남습니다.

Control Plane에 CSI Driver 배포 실패 화면

 


테스트 및 검증

 

아래와 같이 Worker Node들에는 EBS CSI Driver가 배포된 것을 확인할 수 있습니다.

EBS CSI Driver pod

 

 

이제 Storage Class, pvc를 배포하고 pod로 띄웠을때 pv(EBS)가 정상적으로 붙는지 확인해봅니다.

 

 

StorageClass 배포

 

yaml 내용

# ebs-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp2

 

배포

kubectl apply -f ebs-sc.yaml

StorageClass 화면

 

 

pvc 배포

 

yaml 내용

# ebs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-test-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
  storageClassName: ebs-sc

 

배포

kubectl apply -f ebs-pvc.yaml

pvc 화면

 

 

 

이제 pod에서 해당 내용을 참조하여 배포합니다.

 

 

Pod 배포

 

yaml 내용

# ebs-test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: ebs-test-pod
spec:
  containers:
    - name: app
      image: busybox
      command: [ "sleep", "3600" ]
      volumeMounts:
        - mountPath: /data
          name: ebs-volume
  volumes:
    - name: ebs-volume
      persistentVolumeClaim:
        claimName: ebs-test-pvc

 

배포

kubectl apply -f ebs-test-pod.yaml

Pod, pv 화면
pvc 화면

 

 

정상적으로 pv가 생성되어서 pvc 상태도 Bound로 바뀐 것을 확인가능합니다.

 

 

 

콘솔에서도 생성된 EBS를 확인할 수 있습니다.

콘솔 화면

 

 

 

이렇게 관리형 addon이 없는 Local Cluster환경에서 EBS CSI Driver을 배포해보았습니다.