Container Storage Interface
Container Storage Interface 는 Kubernetes, Mesos, Docker 등의 다양한 컨테이너 오케스트레이터에서 블록/파일 스토리지를 표준 방식으로 연동하기 위해 정의된 인터페이스 사양이다. CNCF (Cloud Native Computing Foundation) 산하 프로젝트이며, 스토리지 벤더가 자사의 드라이버를 단일 표준에 따라 구현함으로써, 오케스트레이터와 독립적으로 운영이 가능하도록 설계되었다.
기존에는 오케스트레이터마다 독자적인 스토리지 드라이버를 요구하였으나, CSI를 도입함으로써 스토리지와 오케스트레이터 간의 호환성 문제를 해소하고, 개발과 유지보수의 효율성을 확보할 수 있게 되었다.
주요 특징
- 표준화된 스토리지 인터페이스: 모든 컨테이너 플랫폼에서 통합된 방식으로 스토리지를 마운트·관리할 수 있도록 하였다.
- 벤더 독립성 보장: 특정 오케스트레이터에 종속되지 않으며, 다양한 환경에서 동일한 드라이버를 재사용 가능하다.
- 컨테이너 외부 실행: 스토리지 드라이버는 오케스트레이터와 별도 컨테이너로 실행되므로 충돌이나 복잡도가 줄어든다.
- 스토리지 유형 분리 지원: 블록 스토리지, 파일 스토리지 모두를 지원하며, 다양한 볼륨 정책을 적용할 수 있다.
- 동적 프로비저닝 지원: 스토리지 리소스를 수동이 아닌 자동으로 생성 및 삭제할 수 있다.
장점
- 운영 효율성: 스토리지 드라이버를 한번 구현하면 다양한 플랫폼에서 반복 사용이 가능하다.
- 플러그인 형태의 확장성: 새로운 스토리지 유형도 CSI 사양에 맞게 쉽게 추가 가능하다.
- Kubernetes 완전 연동: PersistentVolumeClaim(PVC), StorageClass 등과 긴밀하게 작동하여 자동화된 스토리지 운영이 가능하다.
- 동일한 사용자 경험: 클라우드, 온프레미스, 하이브리드 환경을 불문하고 동일한 방식으로 스토리지를 다룰 수 있다.
- 모듈화 및 격리: CSI 드라이버는 컨테이너로 분리되어 운영되므로, 장애 격리와 유지보수가 용이하다.
관련 용어
- Persistent Volume (PV): 클러스터 내에서 관리되는 스토리지 자원.
- Persistent Volume Claim (PVC): 사용자가 필요로 하는 스토리지 용량 및 속성을 정의한 요청 객체.
- StorageClass: 동적 프로비저닝을 위해 스토리지 유형, 성능, 접근 방식 등을 정의한 정책.
- Controller Plugin: CSI 드라이버 구성 요소 중 스토리지의 생성, 삭제, 마운트 등을 제어하는 핵심 역할을 수행함.
- Node Plugin: 개별 노드에서 볼륨을 실제로 연결·마운트하는 역할을 하는 CSI 구성 요소.
주요 솔루션 및 사용 사례
- 주요 솔루션
- Rook + Ceph CSI: 클라우드 네이티브 분산 스토리지로 Ceph를 Kubernetes 환경에 통합하여 블록 및 파일 기반 스토리지 제공.
- AWS EBS CSI Driver: Amazon Elastic Block Store(EBS)를 Kubernetes에서 동적으로 프로비저닝 및 마운트.
- Azure Disk/File CSI Driver: Azure의 디스크 및 파일 스토리지를 Kubernetes에 연동 가능.
- OpenEBS: Kubernetes 내에서 동작하는 완전 오픈소스 기반 CSI 스토리지 솔루션.
- Longhorn: Rancher Labs가 개발한 클라우드 네이티브 블록 스토리지 시스템.
- 사용 사례
- DevOps 환경의 동적 스토리지 생성: 애플리케이션 배포 시 자동으로 PVC를 생성하고 볼륨을 연동함.
- 멀티 클러스터 스토리지 연동: 동일한 CSI 드라이버를 사용하여 온프레미스와 클라우드 간 스토리지 연결 일관성 확보.
- 컨테이너 기반 DB 운영: StatefulSet 환경에서 안정적인 블록 스토리지 제공.
- 스토리지 클래스 분리 운영: 고성능, 일반, 아카이빙 등 목적별 스토리지 유형을 CSI 기반으로 선택적으로 구성.
- 유지보수 자동화: CSI 인터페이스를 통해 스토리지 확장, 마운트, 정리 등을 자동화 처리.