왜 도구 선택이 문제가 되는가
GitOps를 도입하면 클러스터 상태를 Git으로 선언하고, 컨트롤러가 지속적으로 실제 상태를 원하는 상태로 수렴시킨다. 문제는 Flux와 ArgoCD가 이 목표를 서로 다른 방식으로 달성한다는 점이다. 초기에 아무 도구나 골랐다가 멀티테넌시, 배포 승인 절차, 헬름 관리 방식에서 벽에 부딪히면 마이그레이션 비용이 크다. 선택 기준은 "무엇이 더 좋은가"가 아니라 "우리 조직의 운영 모델에 무엇이 맞는가"다.
아키텍처 차이
ArgoCD는 API 서버, Repo 서버, Application Controller로 구성된 중앙집중형이며 강력한 웹 UI를 내장한다. 배포 상태를 한 화면에서 보고 수동 Sync를 누르는 운영에 적합하다. Flux는 source-controller, kustomize-controller, helm-controller 등으로 쪼개진 컨트롤러 집합이다. UI가 없고 모든 것을 CRD로 다룬다. 즉 ArgoCD는 "플랫폼", Flux는 "쿠버네티스 네이티브 라이브러리"에 가깝다.
비교표
| 항목 | ArgoCD | Flux |
|---|---|---|
| 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, 대시보드)를 별도로 붙여야 실무에서 원인 추적이 가능하다는 점을 감안하라.