핵심 요약
GitOps는 더 이상 옵션이 아닌 표준. Git이 desired state, 도구가 자동 동기화. 2026년 시점 ArgoCD가 시장 60%, Flux 25%, Cluster API 10% (다중 클러스터 특화).
- ArgoCD: UI 중심, 단일 클러스터 운영
- Flux: CLI 중심, 자동화 친화
- Cluster API: 클러스터 자체의 GitOps
1. ArgoCD 기본
# 설치
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.13.0/manifests/install.yaml
# Application 정의
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
source:
repoURL: https://github.com/myorg/myapp
targetRevision: main
path: k8s/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true2. Flux 기본
# 설치
flux bootstrap github \
--owner=myorg \
--repository=myapp-gitops \
--branch=main \
--path=clusters/production
# Source
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: myapp
spec:
url: https://github.com/myorg/myapp
ref: { branch: main }
interval: 1m
# Kustomization
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: myapp
spec:
sourceRef: { kind: GitRepository, name: myapp }
path: ./k8s/production
prune: true
interval: 5m3. ArgoCD vs Flux 핵심 차이
| 항목 | ArgoCD | Flux |
|---|---|---|
| UI | 풍부 (sync 시각화) | 없음 (Weave GitOps 별도) |
| 설치 단순함 | kubectl apply 1줄 | flux bootstrap CLI |
| RBAC | 자체 + RBAC | K8s native RBAC |
| multi-tenant | Project로 격리 | namespace 격리 |
| app of apps | 지원 | Kustomization 중첩 |
| image automation | Image Updater (별도) | Flux Image Automation |
| helm 통합 | 좋음 | 좋음 (Helm Controller) |
4. ArgoCD ApplicationSet — 다중 환경
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: cluster-apps
spec:
generators:
- clusters: {}
template:
metadata:
name: '{{name}}-myapp'
spec:
source:
repoURL: https://github.com/myorg/myapp
path: k8s/{{name}}
destination:
server: '{{server}}'다수 클러스터에 동일 app 자동 배포.
5. Flux Image Automation
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: myapp
spec:
image: ghcr.io/myorg/myapp
interval: 1m
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: myapp
spec:
imageRepositoryRef: { name: myapp }
policy:
semver: { range: '1.x' }새 이미지가 push되면 자동으로 Git PR 생성·머지 → 자동 배포.
6. Cluster API — 클러스터 자체 관리
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: prod-cluster
spec:
clusterNetwork:
pods:
cidrBlocks: ["10.244.0.0/16"]
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSCluster
name: prod-cluster
controlPlaneRef:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlane
name: prod-cluster-control-plane클러스터 자체를 Git으로 관리. 만들기·업그레이드·삭제 모두 declarative. 큰 회사가 100+ 클러스터 운영 시 필수.
7. 도구 매트릭스
| 워크로드 | 1순위 |
|---|---|
| 단일 클러스터, 운영팀 작음 | ArgoCD (UI 친화) |
| 완전 자동화 우선 | Flux |
| 다중 클러스터 (5개+) | ArgoCD ApplicationSet |
| 클러스터 라이프사이클 | Cluster API + ArgoCD |
| image 자동 업데이트 | Flux Image Automation |
8. 운영 베스트 프랙티스
- Git repository 구조: app 정의(/apps) + 환경별 overlay(/clusters/<env>)
- secret은 SealedSecrets 또는 Vault Operator로 관리
- auto-sync는 dev/staging만, prod는 수동 승인
- health check 적극 활용 (sync wave)
- RBAC — 팀별 namespace·project 격리
9. 보안
# Sealed Secrets로 Git에 secret 안전 저장
kubeseal < secret.yaml > sealed-secret.yaml
# sealed-secret.yaml은 Git에 push 가능 (encrypted)
# ArgoCD
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: production
spec:
destinations:
- namespace: production
server: https://kubernetes.default.svc
sourceRepos:
- https://github.com/myorg/* # whitelist10. 도입 단계
- 스테이징 클러스터에 ArgoCD/Flux 설치
- 1개 service GitOps로 마이그레이션
- 모든 service GitOps 표준화 (1~2개월)
- ApplicationSet·Kustomization으로 환경 추상화
- image automation 도입
- 다중 클러스터 → Cluster API
11. 실측 — GitOps 도입 효과
| 지표 | before (kubectl) | after (GitOps) |
|---|---|---|
| 배포 시간 | 15분 | 2분 |
| 롤백 시간 | 10~30분 | 30초 (Git revert) |
| desired state 일치 | ~70% | 99%+ |
| incident 평균 복구 | 45분 | 12분 |
자주 묻는 질문
ArgoCD vs Flux 어느 게 정답?
UI 중요·단일 클러스터: ArgoCD. CLI 중심·자동화: Flux. 둘 다 잘 운영되면 선호 차이.
둘 다 사용 가능?
가능하지만 권장 안 함. 인지 부담 큼. 한 도구로 통일.

댓글 0