왜 도구 선택이 문제가 되는가

GitOps를 도입하면 클러스터 상태를 Git으로 선언하고, 컨트롤러가 지속적으로 실제 상태를 원하는 상태로 수렴시킨다. 문제는 Flux와 ArgoCD가 이 목표를 서로 다른 방식으로 달성한다는 점이다. 초기에 아무 도구나 골랐다가 멀티테넌시, 배포 승인 절차, 헬름 관리 방식에서 벽에 부딪히면 마이그레이션 비용이 크다. 선택 기준은 "무엇이 더 좋은가"가 아니라 "우리 조직의 운영 모델에 무엇이 맞는가"다.

아키텍처 차이

ArgoCD는 API 서버, Repo 서버, Application Controller로 구성된 중앙집중형이며 강력한 웹 UI를 내장한다. 배포 상태를 한 화면에서 보고 수동 Sync를 누르는 운영에 적합하다. Flux는 source-controller, kustomize-controller, helm-controller 등으로 쪼개진 컨트롤러 집합이다. UI가 없고 모든 것을 CRD로 다룬다. 즉 ArgoCD는 "플랫폼", Flux는 "쿠버네티스 네이티브 라이브러리"에 가깝다.

비교표

항목ArgoCDFlux
UI강력한 내장 UI없음(외부 도구 필요)
배포 트리거수동/자동 Sync주기적 reconcile
멀티테넌시Project + RBAC네임스페이스 + Kustomization
Helm 처리템플릿 렌더링실제 Helm 릴리스
설정 관리Application CRD여러 CRD 조합

ArgoCD 설정 예시

ArgoCD는 Application 하나로 소스와 목적지를 묶는다. UI에서 diff를 확인하고 승인 후 배포하는 팀에 적합하다.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: web-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://git.example.com/org/infra.git
    targetRevision: main
    path: apps/web/overlays/prod
  destination:
    server: https://kubernetes.default.svc
    namespace: web
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Flux 설정 예시

Flux는 소스(GitRepository)와 적용(Kustomization)을 분리한다. 컨트롤러가 interval마다 자동으로 재수렴하므로 UI 없이 완전 자동화된 파이프라인에 강하다.

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: infra
  namespace: flux-system
spec:
  interval: 1m
  url: https://git.example.com/org/infra.git
  ref:
    branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: web-app
  namespace: flux-system
spec:
  interval: 5m
  path: ./apps/web/overlays/prod
  prune: true
  sourceRef:
    kind: GitRepository
    name: infra
  targetNamespace: web

선택 기준

  • 운영 가시성이 중요하고 수동 승인 절차가 있다면 ArgoCD. 개발자가 UI로 배포 상태를 직접 확인하는 조직에서 진입 장벽이 낮다.
  • 완전 자동화·GitOps 순수주의·멀티클러스터를 CRD로 관리하려면 Flux. 다른 컨트롤러와 조합해 이미지 자동 업데이트, 알림 등을 선언적으로 구성하기 좋다.
  • Helm을 실제 릴리스로 관리해야 한다면 Flux가 자연스럽다. ArgoCD는 템플릿을 렌더링해 적용하므로 helm list에 릴리스가 잡히지 않는다.

도입 시 주의점

두 도구 모두 배포를 자동화하는 만큼, Git 저장소의 RBAC와 브랜치 보호가 곧 프로덕션 접근 통제가 된다. 이 점을 간과하면 GitOps가 오히려 보안 구멍이 된다. 또한 ArgoCD의 자동 selfHeal이나 Flux의 짧은 interval은 수동 hotfix를 즉시 되돌려 버릴 수 있으므로, 긴급 대응 절차를 미리 정의해야 한다. 마지막으로 UI가 없는 Flux는 관측성 도구(예: 알림 provider, 대시보드)를 별도로 붙여야 실무에서 원인 추적이 가능하다는 점을 감안하라.