Data Engineering/s3 minio

📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #20] MinIO → High Availability 구성 실습

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

목표: MinIO를 Kubernetes 환경에서 High Availability(HA) 방식으로 구성하여,
MinIO 클러스터의 고가용성을 확보하고 장애 대응 및 데이터 복구 기능을 실습합니다.


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

  1. MinIO 고가용성(HA) 구성 개념 이해
  2. MinIO StatefulSet을 사용하여 HA 클러스터 구성
  3. MinIO의 데이터 동기화 및 장애 대응 실험
  4. Cilium을 활용한 HA 환경에서의 네트워크 보안 제어

🧠 1단계: MinIO 고가용성(HA) 구성 개념

이 단계의 목적: MinIO의 고가용성(HA) 구성을 이해하고,
여러 MinIO 인스턴스를 클러스터로 묶어 장애에 강한 스토리지 시스템을 만드는 방법을 배웁니다.

  • MinIO High Availability데이터를 여러 노드에 복제하여,
    하나의 노드가 실패해도 다른 노드에서 데이터를 복구할 수 있도록 구성합니다.
  • MinIO의 erasure coding 기능을 사용하여, N+1 redundancy로 데이터를 보호할 수 있습니다.

✅ HA 구성에서는 StatefulSet을 사용하여 MinIO의 여러 인스턴스를 배포하고,
PVPVC를 통해 데이터를 분산하여 고가용성을 제공합니다.


⚙️ 2단계: MinIO StatefulSet을 활용한 HA 클러스터 구성

이 단계의 목적: MinIO를 StatefulSet으로 배포하여 HA 클러스터를 구성하고,
여러 MinIO 인스턴스를 통해 고가용성을 구현합니다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio-ha
  namespace: minio
spec:
  serviceName: "minio-ha"
  replicas: 4  # HA를 위해 MinIO 인스턴스를 4개로 설정
  selector:
    matchLabels:
      app: minio
  template:
    metadata:
      labels:
        app: minio
    spec:
      containers:
      - name: minio
        image: minio/minio:RELEASE.2021-05-10T23-50-27Z  # MinIO Docker 이미지
        args:
          - server
          - /data
          - --console-address
          - ":9001"  # MinIO의 콘솔 포트
        ports:
          - containerPort: 9000  # S3 API 포트
          - containerPort: 9001  # 콘솔 포트
        volumeMounts:
        - name: minio-pv
          mountPath: /data  # PVC를 /data 경로에 마운트
  volumeClaimTemplates:
  - metadata:
      name: minio-pv
    spec:
      accessModes:
        - ReadWriteOnce         # PVC 접근 모드 설정
      resources:
        requests:
          storage: 10Gi         # PVC 크기 설정
      storageClassName: managed-nfs-storage  # 스토리지 클래스 설정
# StatefulSet 배포 후 상태 확인
kubectl get pods -n minio

✅ 위 YAML 파일은 MinIO HA StatefulSet을 구성하며,
여러 인스턴스를 클러스터로 묶어 고가용성을 제공합니다.


🧪 3단계: MinIO 데이터 동기화 및 장애 대응 실험

이 단계의 목적: MinIO의 데이터 동기화장애 대응 기능을 실험하고,
하나의 노드가 실패할 때 다른 노드에서 데이터 복구가 가능한지 확인합니다.

# MinIO 서버 상태 확인
mc admin info myminio

# 장애 테스트: MinIO 파드 하나 종료
kubectl delete pod <minio-pod-name> -n minio
# 장애 복구 후 MinIO의 데이터 확인
mc ls myminio/mybucket  # 데이터가 복구되어 있어야 함

MinIO HA 클러스터에러 검출 및 장애 복구 기능을 자동으로 처리하며,
데이터가 복구되어 정상적으로 동작함을 확인할 수 있습니다.


🔍 4단계: Cilium을 활용한 HA 환경에서의 네트워크 보안 제어

이 단계의 목적: Cilium을 사용하여 MinIO HA 클러스터에서 발생하는 네트워크 요청을
보안 정책으로 제어하고, MinIO의 네트워크 보안을 강화합니다.

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: minio-ha-network-policy
  namespace: minio
spec:
  endpointSelector:
    matchLabels:
      app: minio
  ingress:
    - fromEndpoints:
        - matchLabels:
            app: minio
      toPorts:
        - ports:
            - port: "9000"
              protocol: TCP
# Cilium 정책 적용 후 상태 확인
kubectl apply -f minio-ha-network-policy.yaml

Cilium 네트워크 정책을 사용하여 MinIO 클러스터 내에서 보안 제어를 강화하고,
MinIO의 네트워크 접근을 제한할 수 있습니다.


📎 요약 및 핵심 정리

  • MinIO HA 구성StatefulSetPVC를 사용하여 고가용성을 확보하며,
    여러 MinIO 인스턴스를 통해 장애 복구 기능을 제공합니다.
  • MinIO의 데이터 동기화 및 장애 대응은 고가용성 환경에서 중요한 요소로,
    하나의 노드가 실패하더라도 자동으로 복구되고 정상 동작을 유지합니다.
  • Cilium 네트워크 정책을 사용하여 MinIO 클러스터의 네트워크 보안을 강화하고,
    보안 그룹정책을 적용하여 트래픽을 세밀하게 제어할 수 있습니다.
728x90