Kubernetes/Kubernetes Advanced

📌 [StatefulSet 심화편 #15] StatefulSet의 다중 클러스터 배포 전략

ygtoken 2025. 3. 14. 10:16
728x90

 

1️⃣ 개요

 

StatefulSet을 운영할 때 하나의 Kubernetes 클러스터 내에서만 배포하는 것이 일반적이지만,

재해 복구(DR), 글로벌 서비스 확장, 트래픽 분산 등의 이유로 다중 클러스터 환경에서 StatefulSet을 배포해야 하는 경우가 있습니다.

 

이번 글에서는 StatefulSet을 다중 클러스터에 배포하는 전략과, 데이터 동기화 및 네트워크 고려 사항을 정리하겠습니다. 🚀

 


2️⃣ 다중 클러스터에서 StatefulSet을 배포해야 하는 이유

 

📌 다중 클러스터 환경에서 StatefulSet이 필요한 주요 이유

상황 설명
재해 복구(DR) 한 클러스터가 장애가 발생해도 다른 클러스터에서 서비스 유지
글로벌 서비스 확장 여러 지역(Region)에서 트래픽을 분산하여 레이턴시 감소
고가용성(HA) 운영 특정 클러스터의 부하를 분산하고, 백업 클러스터를 운영
특정 리전/노드에서의 데이터 보호 국가별 데이터 보호 규정을 준수하면서 데이터 저장 위치 관리

다중 클러스터 환경에서 StatefulSet을 운영하면 장애 대응 능력을 향상시키고, 글로벌 확장을 쉽게 할 수 있습니다.

 


3️⃣ StatefulSet을 다중 클러스터에 배포하는 주요 방법

 

✅ 1. 독립적인 StatefulSet 배포 (Active-Active / Active-Passive)

 

각 클러스터에 독립적인 StatefulSet을 배포하고, 애플리케이션이 다중 클러스터 환경을 인식하도록 설정하는 방식입니다.

 

📌 구성 방식

전략 설명 장점 단점
Active-Active 두 개 이상의 클러스터에서 동시에 서비스 운영 고가용성 및 부하 분산 가능 데이터 동기화 필요
Active-Passive 한 클러스터에서 실행하고, 다른 클러스터는 대기 상태 데이터 정합성이 쉬움 장애 발생 시 페일오버 필요

독립적인 StatefulSet 배포 방식은 클러스터 간 네트워크 동기화 없이 개별적으로 운영 가능하지만, 데이터 정합성 유지가 필요합니다.

 


✅ 2. Cross-Cluster Persistent Volume 사용

 

StatefulSet이 클러스터 간에서 동일한 Persistent Volume을 공유하도록 설정하는 방식입니다.

일반적으로 CephFS, Portworx, Rook, Longhorn 등의 분산 스토리지 솔루션을 활용합니다.

 

📌 예제: CephFS 기반 RWX Persistent Volume 사용

apiVersion: v1
kind: PersistentVolume
metadata:
  name: ceph-pv
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteMany  # 다중 클러스터에서 공유 가능
  cephfs:
    monitors:
      - "192.168.1.10:6789"
    path: "/k8s-ceph"
    user: "admin"
    secretRef:
      name: ceph-secret

CephFS 같은 분산 파일 시스템을 활용하면 StatefulSet의 PVC를 다중 클러스터에서 공유할 수 있습니다.

 


✅ 3. Federated StatefulSet 사용 (KubeFed 활용)

 

쿠버네티스 Federation(KubeFed)을 활용하여 하나의 StatefulSet을 여러 클러스터에 동기화하는 방식입니다.

KubeFed는 여러 클러스터에 걸쳐 리소스를 동기화할 수 있으며, kubefedctl 명령어를 사용하여 관리합니다.

 

📌 Federated StatefulSet 배포 예제

apiVersion: types.kubefed.io/v1beta1
kind: FederatedStatefulSet
metadata:
  name: mysql
  namespace: default
spec:
  template:
    spec:
      replicas: 3
      serviceName: mysql
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
            - name: mysql
              image: mysql:8
              volumeMounts:
                - name: mysql-data
                  mountPath: /var/lib/mysql
      volumeClaimTemplates:
        - metadata:
            name: mysql-data
          spec:
            accessModes: ["ReadWriteOnce"]
            resources:
              requests:
                storage: 10Gi

Federated StatefulSet을 활용하면 여러 클러스터에 동일한 StatefulSet을 자동으로 동기화할 수 있습니다.

 


4️⃣ 다중 클러스터 StatefulSet 운영 시 고려해야 할 사항

 

✅ 1. 데이터 동기화 전략

 

StatefulSet의 데이터는 클러스터 간 일관성을 유지해야 하므로, 동기화 방식을 결정해야 합니다.

 

📌 Stateful 애플리케이션의 데이터 동기화 방법

애플리케이션 유형 권장 데이터 동기화 방법
MySQL / PostgreSQL 비동기 복제 (Asynchronous Replication)
MongoDB ReplicaSet 기반 클러스터링
Kafka 다중 클러스터 Replication 설정
Elasticsearch Cross-Cluster Replication (CCR) 사용

클러스터 간 데이터 정합성을 유지하는 것이 다중 클러스터 StatefulSet 운영의 핵심입니다.

 


✅ 2. 네트워크 라우팅 및 DNS 설정

 

다중 클러스터 환경에서는 클러스터 간 통신을 위한 DNS 및 라우팅 정책을 구성해야 합니다.

 

📌 Multi-Cluster Service 설정을 통한 DNS 라우팅 예제

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mysql-global
spec:
  hosts:
    - mysql.example.com
  location: MESH_EXTERNAL
  resolution: DNS
  addresses:
    - 192.168.100.10  # 다른 클러스터의 MySQL IP

클러스터 간 DNS 설정을 통해 StatefulSet이 여러 클러스터에서 원활하게 통신할 수 있도록 구성할 수 있습니다.

 


✅ 3. 장애 복구 및 페일오버 설정

 

하나의 클러스터가 장애 발생 시, 자동으로 다른 클러스터로 트래픽을 우회하는 설정이 필요합니다.

📌 예제: Istio 기반 자동 페일오버 설정

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mysql-failover
spec:
  hosts:
    - mysql.example.com
  http:
    - route:
        - destination:
            host: mysql-cluster-1
            weight: 80
        - destination:
            host: mysql-cluster-2
            weight: 20

트래픽을 자동으로 우회하면, 특정 클러스터가 다운되었을 때 빠르게 복구할 수 있습니다.

 


🔥 5️⃣ 결론

 

StatefulSet을 다중 클러스터에 배포하면 재해 복구, 글로벌 서비스 확장 등의 이점을 얻을 수 있음

Active-Active 또는 Active-Passive 방식으로 다중 클러스터 운영 전략을 결정해야 함

CephFS, Portworx, Longhorn 같은 스토리지를 활용하면 다중 클러스터에서 PVC 공유 가능

Federated StatefulSet(KubeFed)을 사용하면 여러 클러스터에 동일한 StatefulSet을 동기화 가능

다중 클러스터 데이터 동기화 전략(MySQL 복제, MongoDB ReplicaSet 등)을 고려해야 함

Istio를 활용한 네트워크 라우팅 및 장애 복구 설정을 통해 고가용성을 보장할 수 있음

728x90