Data Engineering/s3 minio

📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #19] MinIO → PVC 기반 확장성 실험

ygtoken 2025. 3. 26. 20:51
728x90

목표: MinIO의 **PersistentVolumeClaim(PVC)**을 활용하여,
MinIO 스토리지 확장성을 실험하고 PVC 기반의 확장성을 테스트하는 방법을 실습합니다.


🔎 이번 글에서 수행할 작업 요약

  1. PVC 기반 MinIO 확장성 실험
  2. MinIO PVC의 리소스 할당과 확장성 테스트
  3. MinIO의 성능 측정 및 데이터 접근 최적화
  4. PVC와 StatefulSet을 활용한 확장성 실험

🧠 1단계: MinIO PVC 설정 및 기본 확장성 개념

이 단계의 목적: PVC를 사용하여 MinIO의 스토리지를 동적으로 확장할 수 있음을 이해하고,
PVC와 관련된 기본 설정을 다룹니다.

  • MinIO는 StatefulSet으로 배포되며, **Persistent Volume (PV)**을 활용하여 데이터를 저장합니다.
  • PVC는 클러스터의 스토리지 리소스를 요청하고, MinIO의 데이터 저장소로 사용됩니다.
  • 리소스 확장성을 위해 PVC의 **storageClass**와 size 값을 조정할 수 있습니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: minio-pvc
  namespace: minio
spec:
  accessModes:
    - ReadWriteOnce                       # 스토리지를 한 번에 하나의 파드만 접근 가능하게 설정
  resources:
    requests:
      storage: 10Gi                        # 요청하는 PVC 크기 (예: 10GB)
  storageClassName: managed-nfs-storage   # 스토리지 클래스 설정 (NFS 등)
# PVC가 생성된 후 클러스터에서 확인
kubectl apply -f pvc-minio.yaml

✅ MinIO는 PVC를 통해 데이터를 영구적으로 저장하고, 디스크 용량 확장이 가능합니다.


⚙️ 2단계: StatefulSet을 이용한 PVC 기반 MinIO 확장성 실험

이 단계의 목적: MinIO를 StatefulSet으로 배포하고, PVC를 활용하여 동적으로 스토리지를 확장하는 방법을 실습합니다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio
  namespace: minio
spec:
  serviceName: "minio"
  replicas: 1                  # MinIO의 파드 수 (1개로 설정)
  selector:
    matchLabels:
      app: minio               # 앱 라벨로 MinIO 파드를 선택
  template:
    metadata:
      labels:
        app: minio             # MinIO를 식별하는 라벨
    spec:
      containers:
      - name: minio
        image: minio/minio:RELEASE.2021-05-10T23-50-27Z   # MinIO Docker 이미지
        args:
          - server
          - /data               # 데이터를 저장할 경로
        ports:
          - containerPort: 9000  # MinIO 기본 포트
        volumeMounts:
        - name: minio-pv
          mountPath: /data       # PVC를 /data 경로에 마운트
  volumeClaimTemplates:
  - metadata:
      name: minio-pv           # PVC 이름
    spec:
      accessModes:
        - ReadWriteOnce         # 읽기-쓰기 모드
      resources:
        requests:
          storage: 10Gi         # PVC 크기
      storageClassName: managed-nfs-storage  # 스토리지 클래스 설정
# StatefulSet 배포 후 상태 확인
kubectl get pods -n minio

StatefulSetPVC자동으로 마운트하고, 디스크 용량 확장 실험을 위해 파드를 쉽게 관리할 수 있습니다.


🧪 3단계: PVC 용량 확장 및 성능 비교

이 단계의 목적: PVC 용량을 확장하고, MinIO의 성능을 측정하여 확장성에 미치는 영향을 실험합니다.

# PVC 용량 확장 (기존 PVC 크기에서 증가)
kubectl patch pvc minio-pvc -n minio -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'

# 용량 변경 후 상태 확인
kubectl get pvc minio-pvc -n minio

✅ PVC 크기를 동적으로 확장하고, MinIO 성능을 비교하여 용량 확장이 미치는 영향을 분석할 수 있습니다.

# MinIO에서 업로드/다운로드 성능 테스트
mc alias set local http://minio.minio.svc.cluster.local:9000 minioadmin minioadmin
mc cp /path/to/largefile local/test-bucket/  # MinIO에 대용량 파일 업로드

✅ PVC 용량 확장 후, MinIO 성능 테스트를 통해 데이터 처리 속도와 안정성을 점검합니다.


🔍 4단계: 성능 최적화 및 데이터 접근 속도 개선

이 단계의 목적: PVC 기반의 스토리지 환경에서 MinIO의 성능을 최적화하고,
데이터 접근 속도 개선을 위한 설정을 실습합니다.

✅ 성능 최적화를 위한 설정

# MinIO 서버에서 빠른 업로드를 위한 최적화 설정
mc admin config set local upload.disable-storagedump true  # 스토리지 덤프 비활성화
mc admin config set local upload.parallelism 8             # 업로드 병렬화 설정

✅ 빠른 업로드 설정을 통해 파일 전송 속도를 최적화할 수 있습니다.


📎 요약 및 핵심 정리

  • PVC 기반 스토리지는 StatefulSet을 통해 확장성과 내결함성을 제공하며,
    스토리지 용량을 동적으로 확장할 수 있습니다.
  • PVC 크기 조정성능 최적화 설정을 통해 MinIO의 성능을 최적화하고,
    대용량 파일 처리 시 성능 저하 없이 안정적인 서비스를 제공할 수 있습니다.
  • MinIO + PVC를 활용한 확장성 실험을 통해, 확장 가능한 데이터 플랫폼을 구축할 수 있음을 실험하였습니다.
728x90