본문 바로가기
IT & Tech 정보

GitOps로 운영되는 멀티 클러스터 환경의 CI/CD 파이프라인 아키텍처:

by 지식과 지혜의 나무 2025. 5. 28.
반응형

Argo CD + Kustomize + Cluster Gateway 완전정복



🧭 문제 인식

대기업, 글로벌 SaaS, 금융사 등에서 단일 Kubernetes 클러스터로는 지역 장애, 트래픽 분산, 조직 분리 등 다양한 요구사항을 수용할 수 없습니다. 이에 따라 멀티 클러스터 구성이 대세가 되었고, 이와 함께 GitOps 기반의 일관된 배포 전략이 필요해졌습니다.

기존에는:
• kubectl로 클러스터마다 수동 배포
• 클러스터 ID/네트워크/네임스페이스가 달라 YAML 재사용 어려움
• 롤백·변경 추적이 불가능하거나 매우 복잡

이러한 문제는 Argo CD + Kustomize + GitOps + Cluster Gateway 기반 구조로 해결할 수 있습니다.



🔧 핵심 구성 요소

구성 요소 역할
Argo CD GitOps 배포 컨트롤러. Git repo → 클러스터로 동기화
Kustomize 환경별 클러스터/네임스페이스 오버레이 관리
Cluster Gateway (KubeFed, Argo CD plugin 등) 다중 클러스터 대상으로 배포 라우팅
Git Repository 선언적 상태(YAML) 및 환경 설정 보관소




🏗️ Git Repository 설계

gitops/
  ├── base/
  │   ├── deployment.yaml
  │   └── service.yaml
  ├── overlays/
  │   ├── cluster-a/
  │   │   └── kustomization.yaml  # 이미지 버전, 레플리카수 override
  │   ├── cluster-b/
  │   │   └── kustomization.yaml  # 다른 네임스페이스, 설정

→ 모든 클러스터에 공통으로 적용할 내용은 base/,
→ 클러스터별 오버레이만 overlays/에 정의



🧩 Argo CD ApplicationSet + Cluster Generator 예시

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: multi-cluster-apps
spec:
  generators:
    - clusters:
        selector:
          matchLabels:
            environment: production
  template:
    metadata:
      name: '{{name}}-app'
    spec:
      project: default
      source:
        repoURL: https://github.com/yourorg/gitops
        targetRevision: HEAD
        path: overlays/{{name}}
      destination:
        server: '{{server}}'
        namespace: yourapp
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

이 설정을 통해 모든 클러스터에 자동으로 앱 배포가 가능하며, 클러스터에 문제가 생기면 Git 상태를 기준으로 **자동 복구(Self-Healing)**까지 이뤄집니다.



🧪 보안과 감사 대응
• RBAC 통제는 Argo CD 프로젝트 단위로 분리 가능
• Git 커밋 로그와 PR 기반 변경 추적 (e.g. GitHub Audit)
• Dev와 Prod의 배포 승인 워크플로우는 Git PR로 통제 (e.g. Code Owners)



🌐 확장 예시

조직 규모 구현 방식
스타트업 단일 Argo CD 인스턴스 + 2~3개 클러스터
중견 기업 중앙 Argo CD + 각 클러스터에 read-only access
글로벌 SaaS Argo CD Edge 인스턴스 → 중앙에서 동기화 추적 + 퍼포먼스 분산




✅ 베스트 프랙티스
• Kustomize로 오버레이를 구성하고, 공통 YAML은 절대 중복하지 않기
• Argo CD Helm plugin과 Kustomize plugin을 병행하여 복잡도 낮추기
• PR → Git → Argo CD 자동 동기화 → Slack 알림 흐름 구성
• 클러스터 장애 시, 해당 클러스터만 failover하고 나머지엔 영향 최소화
• 배포 승인 → Git PR 머지 전 확인 (GitHub Actions + PR Label gating)



🔚 결론

GitOps는 이제 단순히 “코드를 Git에 넣고 배포”하는 개념을 넘어
멀티 클러스터 거버넌스와 무중단 글로벌 배포의 핵심 전략으로 자리잡고 있습니다.

Argo CD, Kustomize, Cluster Generator를 정교하게 엮는다면,
전 세계에 분산된 수백 개 클러스터도 일관된 방식으로 운영할 수 있습니다.

이제는 사람이 아니라 Git이 전 세계 인프라를 통제하는 시대입니다.

반응형