FluxCD vs ArgoCD — 역할 분리
운영 중인 클러스터는 애플리케이션 배포를 ArgoCD 로 하고 있었는데, 여기에 FluxCD 를 하나 더 올렸습니다. 도구를 갈아탄 게 아니라 Namespace·RBAC 같은 인프라 레벨 리소스를 FluxCD 에 맡기려는 것이었고, 그래서 지금은 배포 계층은 ArgoCD, 인프라 계층은 FluxCD 로 나뉘어 있습니다.
둘 다 Git pull, 차이는 UI
| FluxCD | ArgoCD | |
|---|---|---|
| 모델 | Pull (클러스터가 Git polling) | Pull (같지만 UI 중심) |
| UI | 없음 (CLI 중심) | 강력한 Web UI |
| Helm 관리 | HelmRelease CRD | Application CRD |
클러스터가 Git 을 가져오는 pull 모델이라는 점까지는 같고, 차이가 나는 건 UI 입니다. FluxCD 는 CLI 만 있어서 사람 손이 안 가는 자동화에 맞고, ArgoCD 는 배포 상태를 눈으로 보고 직접 조작하는 걸 전제로 만들어졌습니다.
FluxCD — 선언하면 알아서 반영
FluxCD 는 Helm 배포를 K8s 오브젝트(HelmRelease)로 선언합니다.
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: my-app
spec:
chart:
spec:
chart: my-app
sourceRef:
kind: HelmRepository
name: my-registry
values:
replicaCount: 2
helm install 을 직접 치는 대신 이 YAML 을 Git 에 올려두면, push 를 감지한
FluxCD 가 helm upgrade 를 알아서 실행합니다.
ArgoCD — Git 경로를 바라보고 UI로 조작
ArgoCD 는 “이 Git 경로를 배포하라” 고 선언해두면, 그 경로에 Helm 이든 Kustomize 든 plain YAML 이든 가리지 않고 배포합니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
source:
repoURL: https://github.com/my-org/my-repo
path: apps/my-app
destination:
server: https://kubernetes.default.svc
namespace: production
강점은 UI 라서, sync 상태와 실제 K8s 리소스·Git 코드의 diff 를 화면에서 보고 롤백까지 클릭 한 번으로 끝냅니다.
층을 나누는 기준 — 변경 빈도와 사람 개입
Namespace, RBAC, NetworkPolicy, CRD 설치처럼 한 번 잡아두면 잘 안 바뀌는 인프라 레벨 리소스는 FluxCD 에 맡깁니다. 변경이 드문 대신 바뀌었을 때 자동으로 반영되는 게 중요하고, 사람이 UI 를 열어 확인할 일도 거의 없습니다.
반대로 애플리케이션 배포는 하루에도 몇 번씩 바뀌는 데다 개발팀이 sync 상태를 계속 봐야 하니 ArgoCD 에 맡깁니다. 장애가 났을 때 누를 롤백 버튼도 여기 있습니다.
GitOps에서 Secret — Git에는 경로만, 값은 Vault
Git 에 평문 시크릿을 올릴 수는 없으니 VaultStaticSecret 같은 CRD 만
커밋합니다. Git 에 남는 건 “어떤 Vault 경로에서 읽을지” 뿐이고 실제 값은 Vault 에
그대로 있습니다. 둘을 이어주는 Vault Secrets Operator 가 클러스터 안에서
Vault → K8s Secret 동기화를 합니다.
댓글 0