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 예제나 실제 애플리케이션 연동 방법도 다뤄볼 예정입니다.