FluxCD vs ArgoCD — 역할 분리
ArgoCD 를 쓰고 있는 클러스터에 FluxCD 를 하나 더 올렸습니다. 도구를 갈아타려던 게 아니라 ArgoCD 가 안 맡고 있던 층이 따로 있어서였습니다.
애플리케이션은 ArgoCD 로 배포합니다. 각 서비스의 Helm 차트와 값 파일을 Git 에 두면 ArgoCD 가 읽어서 클러스터를 맞춰 놓고, 배포한 사람은 UI 에서 어느 리비전이 올라가 있는지 보고 필요하면 직접 sync 를 누릅니다. 그런데 그 아래에 있는 Namespace 나 RBAC, 공용 시크릿 같은 것들은 이 흐름에 안 들어와 있어서, 클러스터를 새로 만들 때마다 사람이 손으로 밀어 넣는 쪽에 가까웠고 어느 클러스터에 뭐가 들어가 있는지 맞춰 보기도 어려웠습니다.
그래서 이 인프라 레벨 리소스만 FluxCD 에 맡겼고, 지금은 배포 계층이 ArgoCD, 인프라 계층이 FluxCD 입니다.
둘 다 Git pull, 차이는 UI
| FluxCD | ArgoCD | |
|---|---|---|
| 모델 | Pull (클러스터가 Git polling) | Pull (동일) |
| 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 에 올려두면, 다음 polling 때 그 변경을 읽은
FluxCD 가 차트를 대신 설치하거나 업그레이드합니다.
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 으로 동기화합니다.
이미 ArgoCD 를 쓰고 있는 클러스터에 FluxCD 를 더할지 고민이면 기준은 하나입니다. 지금 사람이 UI 를 열어 보지도 않으면서 ArgoCD 에 올려 둔 리소스가 있는지 보면 됩니다. 그런 게 쌓여 있으면 그 층을 FluxCD 로 내리면 되고, 전부 사람이 확인하는 것들이면 도구를 하나 더 들일 이유가 없습니다.
댓글 0