1. CSI(Container Storage Interface) 란?
: CSI(Container Storage Interface)는 쿠버네티스와 같은 컨테이너 오케스트레이션이 다양한 스토리지 시스템과 상호 작용할 수 있도록 표준화된 인터페이스를 제공하는 기술입니다.
[Caption] CSI 소개
CSI 주요 역할
•
스토리지 시스템과 쿠버네티스 간의 연결을 표준화 합니다.
•
정적 및 동적 프로비저닝을 지원합니다.
•
볼륨에 대한 생성, 삭제, 스냅샷, 확장 등의 작업을 처리할 수 있습니다.
CSI 구성 요소
1.
Provisioner
•
[역할]
◦
PV(Persistent Volume)을 생성하거나 삭제하는 작업을 담당합니다.
◦
PVC(Persistent Volume Claim) 요청에 따라 스토리지 시스템에서 볼륨을 동적으로 프로비저닝합니다.
•
[작동 방식]
◦
사용자가 PVC 생성
◦
쿠버네티스가 StorageClass를 참조하여 Provisioner 호출
◦
Provisioner가 스토리지 시스템에 API를 통해 새로운 볼륨을 생성
◦
Provisioner가 대상 볼륨을 쿠버네티스 환경에 등록
2.
Attacher
•
[역할]
◦
생성된 볼륨을 특정 노드에 연결하는 작업을 수행합니다.
◦
클라우드 제공자나 외부 스토리지 시스템에서 볼륨을 노드에 마운트할 수 있도록 지원합니다.
•
[작동 방식]
◦
Pod가 특정 노드에서 실행
◦
Attacher가 해당 노드에 볼륨을 연결하기 위해 스토리지 시스템 API를 호출
◦
연결이 완료되면 쿠버네티스가 이를 파드에 마운트할 준비
3.
Controller
•
[역할]
◦
CSI 드라이버의 중앙 제어 역할을 수행합니다.
◦
클러스터 수준에서 볼륨 관리 작업(생성, 삭제, 확장 등)을 처리합니다.
•
[작동 방식]
◦
Controller가 Provisioner 및 Attacher와 연계하여 볼륨 생성 및 연결 작업을 조정
4.
NodeServer
•
[역할]
◦
노드 수준에서 실행되며, 실제로 볼륨을 컨테이너 파일 시스템에 마운트하거나 언마운트하는 작업을 수행합니다.
•
[작동 방식]
◦
Attacher가 볼륨을 노드에 연결
◦
NodeServer가 해당 볼륨을 Pod 내 컨테이너 파일 시스템에 마운트
◦
파드가 삭제되거나 이동될 경우
◦
NodeServer가 이를 언마운트하고 리소스를 해제
CSI 도입에 따른 장점
•
새로운 스토리지 드라이버를 쿠버네티스와 독립적으로 개발 및 배포 가능합니다.
•
다양한 스토리지 제공자와 통합하여 유연성 및 확장성 제공합니다.
이번 포스팅은 Amazon EKS를 기준으로 CSI 드라이버를 알아봅니다.
Amazon EKS는 AWS 스토리지 서비스와 통합된 다양한 CSI 드라이버를 제공합니다.
2. Amazon EBS CSI Driver
: Amazon EBS(Elastic Block Store)를 쿠버네티스 클러스터에서 사용할 수 있도록 지원하는 CSI 드라이버입니다.
[Caption] Amazon EBS CSI Driver 구조
주요 특징
•
동적 프로비저닝 지원
◦
PVC 요청 시 EBS 볼륨을 자동으로 생성합니다.
•
볼륨 확장 (Resizing)
◦
인서비스 상태에서 기존 EBS 볼륨 크기 조정 가능합니다.
•
스냅샷 지원
◦
볼륨 백업 및 복구가 가능합니다.
•
Access Mode는 ReadWriteOnce로만 설정됩니다.
◦
EBS 볼륨 스토리지 특성 상 1:1 연결만 가능하기 때문
•
EBS 볼륨이 구성되는 가용 영역에 Node Affinity가 설정됩니다.
◦
EBS 볼륨 스토리지 특성 상 1:1 연결만 가능하기 때문
구성 요소
•
Provisioner
•
Attacher
•
Controller-Plugin
•
Resizer
•
Snapshotter
•
Node-Plugin
•
Node-Registrar
•
Liveness-Probe
설치 방법
•
Helm Chart 또는 EKS Add-On을 통해 설치 가능
eksctl create addon --name aws-ebs-csi-driver --cluster {CLUSTER NAME}
Bash
복사
# EKS Add-On을 통한 ebs-csi-driver 설치
3. Amazon EFS CSI Driver
: Amazon EFS(Elastic File System)를 쿠버네티스 클러스터에서 사용할 수 있도록 지원하는 CSI 드라이버입니다.
[Caption] Amazon EFS CSI Driver 구조
주요 특징
•
동적 프로비저닝 지원
◦
PVC 요청 시 EBS 볼륨을 자동으로 생성합니다.
•
Access Mode는 ReadWriteMany(다중 노드 액세스)도 설정할 수 있습니다.
◦
EFS 파일 시스템 특성 상 1:N 연결 구조이기 때문
•
Node Affinity가 설정을 할 필요가 없습니다.
◦
EFS 파일 시스템 특성 상 다수의 가용 영역에 걸쳐 데이터를 저장하기 때문
•
파일 확장성
◦
페타바이트(PB) 단위로 확장 가능합니다.
•
리사이징이나 스냅샷 미지원
구성 요소
•
Provisioner
•
Controller-Plugin
•
Node-Plugin
•
Node-Registrar
•
Liveness-Probe
설치 방법
•
Helm Chart 또는 EKS Add-On을 통해 설치 가능
eksctl create addon --name aws-efs-csi-driver --cluster {CLUSTER NAME}
Bash
복사
# EKS Add-On을 통한 efs-csi-driver 설치
4. Amazon S3 CSI Driver
: Amazon S3(Simple Storage Service)를 쿠버네티스 클러스터에서 사용할 수 있도록 지원하는 CSI 드라이버입니다.
[Caption] Amazon S3 CSI Driver 구조
주요 특징
•
정적 프로비저닝만 지원
•
Amazon S3 버킷을 파일 시스템처럼 마운트하여 사용합니다.
◦
해당 특징에 따라 정식 이름은 Mountpoint for Amazon S3 CSI Driver입니다.
•
별도의 CSI Provisioner와 Controller가 존재하지 않습니다.
◦
정적 프로비저닝만 존재함에 따라 CSI Node만 존재
•
Windows 기반의 컨테이너와 AWS Fargate에서 지원하지 않습니다.
구성 요소
•
S3-Plugin
•
Node-Driver-Registrar
•
Liveness-Probe
설치 방법
•
Helm Chart 또는 EKS Add-On을 통해 설치 가능
eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster {CLUSTER NAME}
Bash
복사
# EKS Add-On을 통한 mountpoint-s3-csi-driver 설치
EKS 버전에 따라 Add-On으로 지원하지 않을 수 있습니다.
5. 결론
AWS EKS는 다양한 스토리지 요구사항을 충족하기 위해 여러 CSI 드라이버(EBS, EFS, S3)를 제공합니다. 각 드라이버는 고유한 특성과 사용 사례를 가지고 있으며, 애플리케이션의 요구사항에 따라 적절한 드라이버를 선택할 수 있습니다.
•
EBS는 고성능 블록 스토리지가 필요한 애플리케이션에 적합합니다.
•
EFS는 다중 노드에서 공유 파일 시스템이 필요한 경우 이상적입니다.
•
S3는 데이터 백업 및 아카이빙과 같은 객체 기반 워크로드에 적합합니다.
기준 | EBS CSI Driver | EFS CSI Driver | S3 CSI Driver |
스토리지 유형 | 블록 스토리지 | 파일 스토리지 | 객체 스토리지 |
데이터 액세스 방식 | EC2 인스턴스에 디스크로 직접 연결 | 다수 인스턴스에서 공유 파일 시스템 | S3 버킷을 직접 마운트하여 연결 |
성능 | 낮은 지연 시간, 높은 IOPS 제공 | 파일 시스템 성능, 수천 개의 동시 연결 지원 | 높은 지연 시간 (네트워킹 종속) |
확장성 | 단일 볼륨 크기는 최대 16TB (다수 볼륨 사용 가능) | 파일 시스템 크기가 PB 규모로 자동 확장 | 거의 무제한 확장 |
사용 사례 | 데이터베이스, 트랙젝션 워크로드, 고성능 애플리케이션 | 컨테이너 스토리지, 미디어 처리, 빅데이터 분석 | 백업, 아카이빙, 정적 웹 호스팅, 데이터 레이크 |
Access Mode | ReadWriteOnce | ReadWriteOnce, ReadWriteMany, ReadOnlyMany | ReadWriteOnce, ReadWriteMany, ReadOnlyMany |
프로비저닝 방식 | 정적 및 동적 프로비저닝 | 정적 및 동적 프로비저닝 | 정적 프로비저닝만 지원 |
지원 플랫폼 | Linux, Windows | Linux, Windows | Linux (Windows 컨테이너나 AWS Fargate 미지원) |