OpenEBS 는 하나의 제품이 아니라 여러 스토리지 엔진의 묶음이다. 반입할 이미지와 노드 요구사항이 엔진마다 다르므로 이것부터 정해야 한다[1].
| 엔진 | 성격 | 쓰는 경우 |
|---|---|---|
| Local PV (hostpath · device · LVM · ZFS) | 노드 로컬 디스크를 그대로 쓴다. 복제 없음 | 애플리케이션이 스스로 복제하는 경우(카프카, 데이터베이스 복제 구성) |
| Replicated PV Mayastor | NVMe 기반 복제 스토리지 | 노드 장애에도 볼륨이 살아야 하는 경우 |
Jiva 와 cStor 는 유지보수 단계로 넘어갔으므로 신규 구축에 고르지 않는다.
Local PV 는 요구사항이 가장 적고 운영이 단순하다. 복제가 필요하지 않은 워크로드라면 이쪽을 기본으로 둔다.
Local PV hostpath 는 별도 커널 요구사항이 없다. 데이터 디렉터리로 쓸 경로만 준비한다.
Local PV LVM · ZFS 는 해당 도구와 커널 모듈이 필요하다.
dnf install -y lvm2
lsmod | grep -E 'dm_snapshot|dm_thin_pool'
Mayastor 는 요구사항이 많다. 커널 모듈, 하드웨어 설정, 전용 노드 라벨이 필요하다.
modprobe nvme_tcp
lsmod | grep -E 'nvme_tcp|nvme_fabrics'
sysctl -w vm.nr_hugepages=1024
echo 'vm.nr_hugepages = 1024' > /etc/sysctl.d/99-mayastor.conf
공통으로 iscsid 가 필요한 엔진이 있으므로 사용할 엔진 문서를 확인하고 미리 켜 둔다.
systemctl enable --now iscsid
문서에 적힌 이미지 목록은 버전마다 달라지므로 그대로 옮겨 적으면 반드시 빠지는 것이 생긴다. 설치에 쓸 차트에서 직접 뽑아내는 것이 유일하게 안전한 방법이다.
인터넷이 되는 장비에서 차트를 받고 렌더링한 뒤 이미지를 추출한다.
helm repo add openebs https://openebs.github.io/openebs
helm repo update
helm pull openebs/openebs --version <버전> -d ./bundle
helm template openebs ./bundle/openebs-<버전>.tgz -n openebs \
--set engines.replicated.mayastor.enabled=false \
| grep -Eo 'image: *"?[^"]+' | awk '{print $2}' | tr -d '"' | sort -u > images.txt
cat images.txt
뽑은 목록을 내려받아 tar 로 저장한다.
mkdir -p images
while read -r img; do
docker pull "$img"
docker save "$img" -o "images/$(echo "$img" | tr '/:' '__').tar"
done < images.txt
for f in images/*.tar; do docker load -i "$f"; done
docker tag openebs/provisioner-localpv:<태그> harbor.example.com/openebs/provisioner-localpv:<태그>
docker push harbor.example.com/openebs/provisioner-localpv:<태그>
설치 시 레지스트리를 바꿔 지정한다. 값 이름은 차트 버전에 따라 다르므로 helm show values 로 확인한다.
helm show values ./openebs-<버전>.tgz | grep -in -A2 registry
helm install openebs ./openebs-<버전>.tgz -n openebs --create-namespace \
-f values-airgap.yaml
CSI 사이드카 이미지(csi-provisioner · csi-attacher · csi-resizer · csi-snapshotter · node-driver-registrar · livenessprobe)는 registry.k8s.io 에서 온다. OpenEBS 이미지만 챙기고 이것을 빠뜨리면 파드가 ImagePullBackOff 로 멈춘다. 위 방식으로 추출하면 함께 나온다.
스냅샷을 쓸 계획이라면 external-snapshotter 의 CRD 와 컨트롤러를 따로 반입해야 한다. OpenEBS 차트에 포함되지 않는 경우가 있다.
Helm 차트 자체와 helm 바이너리도 반입 목록에 넣는다.
설치 후 StorageClass 의 이름과 기본값 여부를 확인한다. 기존 클러스터에 이미 기본 StorageClass 가 있으면 충돌한다.
kubectl get sc
kubectl get pods -n openebs
최신 버전 v4.6.1 — 2026-09-20 확인. https://github.com/openebs/openebs/releases/latest ↩︎