✅ 목표: MinIO를 Kubernetes 환경에서 High Availability(HA) 방식으로 구성하여,
MinIO 클러스터의 고가용성을 확보하고 장애 대응 및 데이터 복구 기능을 실습합니다.
🔎 이번 글에서 수행할 작업 요약
- MinIO 고가용성(HA) 구성 개념 이해
- MinIO StatefulSet을 사용하여 HA 클러스터 구성
- MinIO의 데이터 동기화 및 장애 대응 실험
- Cilium을 활용한 HA 환경에서의 네트워크 보안 제어
🧠 1단계: MinIO 고가용성(HA) 구성 개념
이 단계의 목적: MinIO의 고가용성(HA) 구성을 이해하고,
여러 MinIO 인스턴스를 클러스터로 묶어 장애에 강한 스토리지 시스템을 만드는 방법을 배웁니다.
- MinIO High Availability는 데이터를 여러 노드에 복제하여,
하나의 노드가 실패해도 다른 노드에서 데이터를 복구할 수 있도록 구성합니다. - MinIO의 erasure coding 기능을 사용하여, N+1 redundancy로 데이터를 보호할 수 있습니다.
✅ HA 구성에서는 StatefulSet을 사용하여 MinIO의 여러 인스턴스를 배포하고,
PV와 PVC를 통해 데이터를 분산하여 고가용성을 제공합니다.
⚙️ 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 구성은 StatefulSet과 PVC를 사용하여 고가용성을 확보하며,
여러 MinIO 인스턴스를 통해 장애 복구 기능을 제공합니다. - MinIO의 데이터 동기화 및 장애 대응은 고가용성 환경에서 중요한 요소로,
하나의 노드가 실패하더라도 자동으로 복구되고 정상 동작을 유지합니다. - Cilium 네트워크 정책을 사용하여 MinIO 클러스터의 네트워크 보안을 강화하고,
보안 그룹 및 정책을 적용하여 트래픽을 세밀하게 제어할 수 있습니다.