상세 컨텐츠

본문 제목

MinIO DirectPV 소개 및 설치

> Tech

by Ryusstory 2025. 9. 18.

본문

DirectPV 소개

MinIO DirectPV는 쿠버네티스 환경에서 직접 연결된 스토리지(DAS: Direct Attached Storage)를 효율적으로 관리할 수 있게 해주는 Container Storage Interface(CSI) 드라이버입니다. 이 솔루션은 기존의 네트워크 스토리지 시스템 대신 노드의 로컬 디스크를 활용하여 높은 성능과 안정성을 제공합니다. DirectPV는 StorageClass로 동적 프로비저닝되어, 애플리케이션에서는 영구 볼륨 클레임(PVC)으로 사용할 수 있습니다.

MinIO 스터디를 진행하며 정리한 내용으로, 스터디 실습과 일부 다를 수 있습니다.

주요 특징

  • Kubernetes CSI 표준 준수
  • 로컬 디스크의 직접 활용으로 높은 I/O 성능
  • 분산 환경에서의 통합된 스토리지 관리
  • XFS 파일시스템 기반의 안정성

장점

  • 성능 향상: 네트워크 오버헤드를 제거하여 I/O 집약적 워크로드에 적합
  • 경량화 및 확장성: 분산 환경에서 가볍게 배포 가능하며, Kubernetes의 네이티브 스토리지 기능을 보완
  • 호환성: Kubernetes의 표준 CSI 인터페이스를 따르므로, 기존 클러스터에 쉽게 통합

구성요소 및 아키텍처

DirectPV CSI 드라이버

아키텍처 - Controller

Controller

Controller는 Deployment로 배포되며, 리더가 선출되어 요청을 처리합니다.

  • CSI Provisioner: PVC로부터의 볼륨 생성 및 삭제 요청을 CSI Controller로 전달
  • CSI Resizer: PVC로부터의 볼륨 확장 요청을 CSI Controller로 전달
  • Controller Server: 실제 볼륨 생성, 삭제, 확장 작업을 수행하고 DirectPV CRD를 관리

아키텍처 - Node Server

Node Server

Node-server는 DaemonSet으로 모든 노드에서 실행됩니다.

  • Node Driver Registrar: CSI RPC 호출을 받기 위해 kubelet에 노드 서버를 등록
  • Node Server: 볼륨의 stage, unstage, publish, unpublish, expand 작업을 처리
  • Node Controller: DirectPVDrive, DirectPVVolume, DirectPVNode, DirectPVInitRequest CRD 이벤트를 처리
  • Liveness Probe: Kubernetes가 노드 서버 상태를 확인할 수 있는 /healthz 엔드포인트 제공

DirectPV 플러그인 (krew)

Krew는 kubectl 플러그인 관리자이며, DirectPV는 Krew 플러그인으로 제공되어 드라이버를 쉽게 관리할 수 있습니다.

설치방법

플러그인 설치

방법1. Krew를 통한 설치

krew를 설치합니다

(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  KREW="krew-${OS}_${ARCH}" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
  tar zxvf "${KREW}.tar.gz" &&
  ./"${KREW}" install krew
)

PATH에 등록합니다

echo "export PATH=\"$(echo "${KREW_ROOT:-$HOME/.krew}/bin"):\$PATH\"" >> ~/.bashrc
source ~/.bashrc

krew로 DirectPV 플러그인을 설치한 뒤 kubectl directpv 명령으로 사용합니다.

kubectl krew update
kubectl krew install directpv

방법2. 바이너리를 통한 설치

바이너리로 설치하는 경우 kubectl-directpv 명령으로 사용합니다.

# Download DirectPV plugin. https://docs.min.io/community/minio-directpv/installation/#install-directpv-plugin-as-a-binary

$ release=$(curl -sfL "https://api.github.com/repos/minio/directpv/releases/latest" | awk '/tag_name/ { print substr($2, 3, length($2)-4) }')
$ curl -fLo kubectl-directpv https://github.com/minio/directpv/releases/download/v${release}/kubectl-directpv_${release}_linux_amd64
# Make the binary executable.
$ chmod a+x kubectl-directpv
$ mv kubectl-directpv /usr/local/bin/kubectl-directpv

드라이버 설치

DirectPV CSI 드라이버를 현재 클러스터에 설치합니다

kubectl directpv install

설치확인

kubectl directpv info
kubectl get pods -n directpv

실제 사용은 다음 글에서 다뤄보겠습니다.

관련글 더보기