개요
- 공식 사이트 / GitHub
- Kubernetes 네이티브 스토리지 솔루션 — 오픈소스, CNCF Sandbox 프로젝트
- CAS (Container Attached Storage) 패턴 — 각 볼륨에 전용 마이크로서비스 스토리지 컨트롤러
- 노드 로컬 스토리지 또는 복제 PV를 동적으로 프로비저닝·관리
- 완전히 Kubernetes 위에서 동작 — 별도 외부 스토리지 클러스터 불필요
| 볼륨 유형 |
적합 워크로드 |
| Local PV |
Cassandra, MongoDB, Elasticsearch 등 분산 DB (자체 복제) |
| Replicated PV |
MySQL, Jira, GitLab 등 단일 인스턴스 상태 저장 워크로드 |
CAS (Container Attached Storage)
- 볼륨마다 컨테이너화된 스토리지 컨트롤러 + 복제본 쌍으로 구성
- 장점
- 민첩성: 볼륨별 독립 컨트롤러 → 개별 스케일·업그레이드·장애 격리
- 세분화된 정책: 볼륨 단위로 복제 수, QoS, 암호화 등 정책 독립 설정
- 낮은 폭발 반경: 단일 볼륨 컨트롤러 장애가 다른 볼륨에 영향 없음
- 벤더 종속 방지: 클라우드·온프레미스 이동 시 볼륨 마이그레이션 단순화
- 클라우드 네이티브: Prometheus, Grafana, Velero 등과 자연스럽게 통합
- 기존 SAN/NAS 대비 차이: 중앙 집중식 스토리지 컨트롤러 없이 워크로드별 분산 컨트롤러
스토리지 엔진
Local PV — Hostpath
- 노드의 디렉터리(hostpath)를 PV로 사용 — 가장 단순, 가장 빠름
- 단일 노드에서만 접근 가능 (노드 어피니티 자동 설정)
- 동적 크기 조정·스냅샷 불가
- 권장: 어플리케이션이 자체 복제를 처리하고 로컬 최고 성능이 필요한 경우
Local PV — Device
- 노드에 연결된 블록 디바이스(전용 디스크) 전체를 PV로 직접 사용
- hostpath 대비 노이즈 이웃(noisy neighbor) 효과 없음, 디스크 수준 성능
- 권장: 디스크 레벨 성능 필요, 공유 볼륨 혼용 방지
Local PV — ZFS / LVM
- 노드 디스크를 ZFS / LVM 풀로 관리 → 스냅샷·볼륨 확장·풀링 지원
- 권장: 로컬 성능 + 스냅샷·확장 기능이 모두 필요한 경우
cStor
- iSCSI 기반 블록 스토리지, 다중 노드 동기식 복제 지원
- 스냅샷, 클론, 씬 프로비저닝, 볼륨 확장, 데이터 일관성 보장
- 각 노드에 여러 디스크 → 공통 스토리지 풀(CSPC) 구성
- 사전 조건: 모든 노드에 iSCSI initiator 필요 (
iscsi-initiator-utils)
- 권장: 엔터프라이즈급 복제·스냅샷, 비-NVMe 환경
Jiva
- iSCSI 기반, Kubernetes 볼륨으로 구현된 경량 복제 스토리지
- cStor 대비 단순하지만 스냅샷·클론 기능 제한
- 권장: 동기식 복제가 필요하고 단일 디스크 환경, 스냅샷 불필요
Mayastor
- NVMe-oF 기반 차세대 고성능 스토리지 엔진 (CNCF 인큐베이팅)
- io_uring + SPDK 기반으로 커널 바이패스 → 최저 지연
- 복제·고가용성 지원
- 권장: NVMe SSD 환경, 최고 성능 요구
스토리지 엔진 선택 가이드
| 엔진 |
복제 |
스냅샷 |
성능 |
사전 조건 |
권장 시나리오 |
| Local PV Hostpath |
✗ |
✗ |
매우 높음 |
없음 |
분산 DB (Cassandra, ES), 최고 성능 |
| Local PV Device |
✗ |
✗ |
최고 |
전용 디스크 |
노이즈 없는 전용 고성능 |
| Local PV ZFS/LVM |
✗ |
✅ |
높음 |
ZFS/LVM 설치 |
로컬 성능 + 스냅샷·확장 |
| cStor |
✅ |
✅ |
중간 |
여러 디스크, iSCSI initiator |
엔터프라이즈 복제·스냅샷, MySQL/GitLab |
| Jiva |
✅ |
✗ |
낮음 |
단일 디스크, iSCSI initiator |
경량 복제, 단순 환경 |
| Mayastor |
✅ |
✅ |
최고 |
NVMe SSD, NVMe-oF |
극한 성능 + 고가용성 |
아키텍처
- 컨트롤 플레인: openebs-operator, NDM DaemonSet, 각 엔진별 operator (cstor-operator 등)
- 데이터 플레인: 볼륨별 스토리지 컨트롤러 Pod + 복제본 Pod (데이터 I/O 처리)
- CSI 드라이버로 표준 Kubernetes PVC 워크플로우와 통합
NDM (Node Disk Manager)
- 각 노드에서 실행되는 DaemonSet — 연결된 블록 디바이스를 감지·분류
- 필터 기반으로 OS 디스크·파티션 제외, 사용 가능한 디스크만
BlockDevice CR로 등록
kubectl get blockdevices.openebs.io -n openebs로 조회
주요 기능
| 기능 |
설명 |
| 동기식 복제 |
cStor / Jiva / Mayastor — 노드 장애 시 데이터 손실 없음 |
| 스냅샷 & 클론 |
Copy-On-Write 방식, kubectl로 관리 (VolumeSnapshot API) |
| 씬 프로비저닝 |
실제 사용량만큼만 디스크 점유 (cStor) |
| 볼륨 확장 |
온라인 볼륨 크기 증가 지원 |
| Velero 백업 |
OpenEBS Velero 플러그인으로 클라우드 스토리지에 백업·복원 |
| Prometheus 메트릭 |
IOPS, 처리량, 지연시간 등 볼륨 메트릭 자동 노출 |
설치
OpenEBS 기본 설치 (Helm 권장)
helm repo add openebs https://openebs.github.io/charts
helm repo update
helm install openebs openebs/openebs \
--namespace openebs --create-namespace
kubectl로 설치
kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml
cStor 엔진 추가 설치
# iSCSI initiator 설치 (각 노드)
dnf install -y iscsi-initiator-utils
systemctl enable --now iscsid
# cStor operator 설치
kubectl apply -f https://openebs.github.io/charts/cstor-operator.yaml
제거
# Helm으로 설치한 경우
helm uninstall openebs -n openebs
# 공식 제거 가이드: https://openebs.io/docs/user-guides/uninstall
기본 StorageClass 변경
kubectl patch storageclass openebs-hostpath \
-p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
볼륨 생성
Local PV Hostpath
# StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-hostpath
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
parameters:
basePath: /var/openebs/local
---
# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-hostpath-pvc
spec:
storageClassName: openebs-hostpath
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 5Gi
-
확인
kubectl get pvc,pv
kubectl exec <pod> -- cat /mnt/store/test.txt
cStor
상태 확인
# PVC / PV 확인
kubectl get persistentvolumeclaims -A
kubectl get persistentvolumes
# cStor 볼륨 확인
kubectl get cstorvolumes -n openebs
# BlockDevice 확인
kubectl get blockdevices.openebs.io -n openebs
# OpenEBS Pod 상태
kubectl get pods -n openebs
스냅샷 & 클론
# VolumeSnapshotClass
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-cstor-snapshotclass
driver: cstor.csi.openebs.io
deletionPolicy: Delete
---
# 스냅샷 생성
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: my-snapshot
spec:
volumeSnapshotClassName: csi-cstor-snapshotclass
source:
persistentVolumeClaimName: cstor-pvc
---
# 스냅샷으로 PVC 복원 (클론)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: restore-pvc
spec:
storageClassName: cstor-csi-disk
dataSource:
name: my-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 5Gi
유사 도구 비교
| 도구 |
방식 |
특징 |
| OpenEBS |
CAS, K8s 네이티브 |
볼륨별 독립 컨트롤러, 다양한 엔진 선택 |
| Rook/Ceph |
분산 스토리지 |
대규모 클러스터, 풍부한 기능, 운영 복잡도 높음 |
| Longhorn |
분산 복제 |
Rancher 생태계, UI 제공, 간단한 설치 |
| Portworx |
엔터프라이즈 |
상용, 고가용성·DR·암호화 강점 |
| local-path-provisioner |
hostpath 단순화 |
Rancher, 경량 환경 (복제 없음) |
관련 포스트