SeaweedFS 설치 및 Kubernetes CSI 드라이버 연동 가이드

1–2분

Kubernetes 환경에서 안정적이고 유연한 스토리지가 필요하다면, SeaweedFS는 꽤 매력적인 선택입니다. 이 글에서는 SeaweedFS가 어떤 파일 시스템인지 간단히 소개하고, Kubernetes 클러스터에서 어떻게 설치하고 CSI 드라이버를 연동하는지 정리해보겠습니다.


SeaweedFS란?

SeaweedFS는 대용량 데이터를 빠르게 저장하고 접근할 수 있는 분산 파일 시스템입니다. 특히 단순한 구조와 높은 성능 덕분에, 클라우드 환경이나 컨테이너 기반 시스템에서 잘 활용됩니다.

주요 특징

  • 고성능 & 확장성: 페타바이트 단위까지 수평 확장 가능
  • S3 API 지원: 기존 오브젝트 스토리지 워크플로우와 호환
  • 간단한 구조
  • Master: 메타데이터 관리
    • Volume: 실제 데이터 저장
    • Filer: 파일 시스템 인터페이스
    • S3 Gateway: S3 호환 API 제공
  • Kubernetes 연동: CSI 드라이버를 통해 동적 볼륨 프로비저닝 지원
  • 오픈소스 기반: 활발한 커뮤니티와 업데이트
  • ✅ 노드에서 k8s 위에 seaweedfs를 구축하는 것이 아닌 노드 위에 서비스가 실행 시키는 방식으로 구축 진행

1. SeaweedFS 설치

먼저, SeaweedFS 바이너리를 설치하고 각 컴포넌트를 실행

설치 및 실행

# 바이너리 다운로드
wget <https://github.com/seaweedfs/seaweedfs/releases/download/3.85/linux_amd64.tar.gz>
tar -xvf linux_amd64.tar.gz
sudo cp weed /usr/local/bin/


서비스 실행

각 컴포넌트를 백그라운드에서 실행합니다. <node ip>는 실제 IP 변경 필요

# master 서버
weed master -ip=192.168.135.71 -port=9333 >> /var/log/seaweedfs/master.log 2>&1 &

# volume 서버
weed volume -mserver=192.168.135.71:9333 -dir=/data/seaweedfs >> /var/log/seaweedfs/volume.log 2>&1 &

# filer 서버
weed filer -master=192.168.135.71:9333 -ip=192.168.135.71 -port=8888 >> /var/log/seaweedfs/filer.log 2>&1 &

# S3 게이트웨이
weed s3 -filer=192.168.135.71:8888 -ip.bind=192.168.135.71 -port=8333 >> /var/log/seaweedfs/s3.log 2>&1 &

필요 시 아래 명령어로 모든 프로세스를 종료 가능

ps -ef | grep -v csi | grep weed | awk '{print $2}' | xargs kill -9


2. Kubernetes에서 CSI 드라이버 구성

Kubernetes 환경에서 SeaweedFS를 활용하려면, CSI 드라이버를 설치해야 합니다. Helm을 이용해 간단히 설정

1) 드라이버 클론

git clone <https://github.com/seaweedfs/seaweedfs-csi-driver.git>

2) Helm 설치

filer의 IP 주소를 설정한 뒤 Helm으로 설치

helm install --set seaweedfsFiler=192.168.135.71:8888 seaweedfs-csi-driver \\
./seaweedfs-csi-driver/deploy/helm/seaweedfs-csi-driver \\
-f ./seaweedfs-csi-driver/deploy/helm/seaweedfs-csi-driver/values.yaml \\
-n seaweedfs --create-namespace


3) StorageClass 기본값 설정

설치가 완료되면, StorageClass를 기본값으로 설정

kubectl edit sc seaweedfs-storage

아래 라인을 metadata에 추가

storageclass.kubernetes.io/is-default-class: "true"

전체 예시

allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    meta.helm.sh/release-name: seaweedfs-csi-driver
    meta.helm.sh/release-namespace: seaweedfs
    storageclass.kubernetes.io/is-default-class: "true"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: seaweedfs-storage
provisioner: seaweedfs-csi-driver
reclaimPolicy: Delete
volumeBindingMode: Immediate



마무리

이제 Kubernetes 클러스터에서 SeaweedFS를 기반으로 동적으로 Persistent Volume을 생성하고 사용할 수 있게 됐습니다.

S3 API 호환성과 간편한 구조 덕분에, 다양한 워크로드에 적용해 보기 좋습니다.

이후 글에서 PersistentVolumeClaim 예제나 실제 애플리케이션 연동 방법도 다뤄볼 예정입니다.