본문 바로가기
IT & Tech 정보

GitOps 멀티클라우드 배포 자동화: FluxCD & ArgoCD 연동

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




1. 서론: 왜 멀티클라우드 GitOps인가

실리콘밸리·심천 톱티어 엔지니어들은 단일 클라우드에 종속되는 아키텍처를 탈피해, 멀티클라우드 환경에서도 일관된 배포 파이프라인을 유지하는 데 집중합니다. 그 중심에는 GitOps 방식이 있고, 대표 툴로는 FluxCD(Flux v2)와 ArgoCD가 있습니다.
• 단일 클러스터가 아닌 수십 개, 심지어 서로 다른 클라우드 사업자(AWS, GCP, Azure)의 쿠버네티스 클러스터에 동일한 선언형 리소스를 배포해야 할 때
• 네트워크 레이턴시, 정책(Policy), 인증(Authentication) 차이를 코드 레벨에서 추상화하고 싶을 때

이런 고민을 해결하는 것이 바로 멀티클라우드 GitOps 자동화입니다.



2. 아키텍처 개요

┌─────────────┐          ┌──────────────────┐
│   Git Repo  │ ──webhook──▶│  CI/CD (GitHub │
│  (mono-repo)│           │    Actions)      │
└─────────────┘           └──────────────────┘
         │                             │
         ▼                             ▼
┌───────────────────┐       ┌───────────────────┐
│  FluxCD Control  │       │  ArgoCD Control   │
│ plane (Cluster A)│       │ plane (Cluster B) │
└───────────────────┘       └───────────────────┘
      │   ▲                          │   ▲
      │   │                          │   │
      ▼   │                          ▼   │
┌───────────┐                    ┌───────────┐
│Cluster A  │                    │Cluster B  │
│(AWS EKS)  │                    │(GCP GKE)  │
└───────────┘                    └───────────┘

• Mono-Repo 패턴: 클라우드별/서비스별 디렉터리 구조로 manifest & Kustomize 오버레이 관리
• FluxCD: Git→Cluster A 동기화. GitOps Notification Controller 이용해 PR마다 Slack 알림
• ArgoCD: Git→Cluster B 동기화. ApplicationSet으로 동적 크러스터 추가·제거



3. FluxCD 설정 심화

3.1 Multi-Cluster Secret Management

# flux bootstrap for cluster A
flux bootstrap github \
  --owner=org --repository=infra \
  --path=clusters/aws \
  --components=source-controller,kustomize-controller,notification-controller \
  --personal \
  --ssh-key-algorithm ed25519 --ssh-key-pair=flux-aws

• Notification Controller 활용
• Notification 리소스 정의로 Git웹훅, Slack, MS Teams 연동
• Secret Encryption
• SOPS + SealedSecrets: 클라우드별 KMS 키로 암호화
• “아, SOPS 대신 AWS KMS Envelope Encryption 써서 SE前후 라이프사이클 제어”

3.2 Dynamic Kustomize Overlays

apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
kind: Kustomization
metadata:
  name: apps
spec:
  sourceRef:
    kind: GitRepository
    name: infra
  path: "./services"
  prune: true
  interval: 5m
  kubeConfig:
    context: aws-eks

• forEach 와 generators
• generators/cluster-config.yaml에 클러스터별 값을 정의하고, patchesStrategicMerge로 동적 생성
• Sync Wave 활용
• CRD 먼저, 서비스 뒤 순서 지정: dependsOn 필드로 정밀 제어



4. ArgoCD 고급 활용

4.1 ApplicationSet으로 멀티-클러스터 확장

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: multi-cluster-apps
spec:
  generators:
  - list:
      elements:
      - cluster: aws
        url: https://aws.eks.endpoint
      - cluster: gcp
        url: https://gke.endpoint
  template:
    metadata:
      name: '{{cluster}}-app'
    spec:
      project: default
      source:
        repoURL: 'git@github.com:org/infra.git'
        path: 'services/web'
        targetRevision: main
      destination:
        server: '{{url}}'
        namespace: web
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

• Webhook-driven Self-Heal
• Resource Hook으로 장애 발생 시 자동 롤백 스크립트 트리거
• Custom Health Checks
• Lua 스크립트로 복잡한 상태 판단 로직 삽입
• Resource Overrides
• configManagementPlugins로 Helm Chart 대신 Plain YAML+Kustomize 결합



5. GitOps 파이프라인 비밀 병기
1. FluxCD + ArgoCD 동시 운영
• 각 클러스터 특성에 따라 Flux→Argo 순차 동기화
• “한 클러스터는 Flux, 다른 클러스터는 Argo” 패턴으로 롤링 대체 테스트
2. Cross-Tool Drift Detection
• Flux GitRepository와 ArgoCD Application Outputs 비교 스크립트로 불일치 알림
3. GitHub Actions 커스텀 Action
• terraform fmt → kustomize build → kubectl diff → PR 코멘트 자동화
4. Event-Driven Updates
• AWS EventBridge→Lambda→Flux GitRepository resource API 호출로 Infra-as-Code 자동 트리거



6. 트러블슈팅 & “아, 이런 방법도” 팁
• Cluster Bootstrap 시 TLS 핸드쉐이크 에러
• kubectl config view --raw 후 CAData 필터링 적용
• Git Submodule 동기화 이슈
• Flux git-sync.depth: 0으로 무한 depth 허용
• ArgoCD UI 느려짐
• dex OIDC 세션 TTL 최적화 + Redis 캐시 레이어 도입
• 네트워크 분리 환경
• SSH 터널링 대신 AWS PrivateLink Endpoints로 GitHub Enterprise 연결



7. 결론: “끝판왕” 멀티클라우드 GitOps

이제 단일 툴이 아닌 FluxCD와 ArgoCD를 적재적소에 조합해, AWS·GCP·Azure에 동시 배포하는 최강의 GitOps 파이프라인을 구축할 수 있습니다.
• 선언형 코드 구조는 Mono-Repo + Kustomize 오버레이
• 멀티클러스터 관리엔 FluxCD 제어 평면
• 유연한 멀티리전·멀티어카운트 배포엔 ArgoCD ApplicationSet
• 비밀 관리·알림·자동 롤백 등 완전 자동화

“이건 테크니컬 교과서엔 안 나오는, 실리콘밸리·심천 IT기업 수준의 GitOps 자동화”가 바로 여기 있습니다. 이 패턴을 한 번 구현해 보세요. 여러분의 배포 파이프라인이 지구 최강이 되는 순간입니다!

반응형