GitOps를 위한 선언적 Kubernetes CD(Continuous Delivery) 도구인 ArgoCD에 대해 알아봅니다.
ArgoCD는 Kubernetes를 위한 선언적 GitOps CD 도구입니다. Git Repository를 단일 진실 원천(Single Source of Truth)으로 사용하여 애플리케이션을 Kubernetes 클러스터에 배포하고 관리합니다.
GitOps = Git + Operations
Git Repository의 선언적 설정을 기반으로 인프라와 애플리케이션을 자동으로 관리하는 운영 방식
┌─────────────────────────────────────────────────────────┐
│ Git Repository │
│ ┌────────────┐ ┌────────────┐ ┌────────────────┐ │
│ │ Helm Chart │ │ Kustomize │ │ Plain YAML │ │
│ └────────────┘ └────────────┘ └────────────────┘ │
└──────────────────────┬──────────────────────────────────┘
│
│ Poll / Webhook
▼
┌─────────────────────────────────────────────────────────┐
│ ArgoCD Server │
│ ┌─────────────────────────────────────────────────┐ │
│ │ API Server / Web UI / gRPC │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Application Controller │ │
│ │ - Monitor Git Repository │ │
│ │ - Compare desired vs actual state │ │
│ │ - Sync if needed │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Repo Server │ │
│ │ - Fetch manifests from Git │ │
│ │ - Render templates (Helm/Kustomize) │ │
│ └─────────────────────────────────────────────────┘ │
└──────────────────────┬──────────────────────────────────┘
│
│ Apply / Watch
▼
┌─────────────────────────────────────────────────────────┐
│ Kubernetes Cluster(s) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Pod │ │ Service │ │ Deployment │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────┘
ArgoCD는 다음과 같은 GitOps 루프를 구현합니다:
1. Deploy
└─> Git Repository의 매니페스트를 읽어 배포
2. Monitor
└─> Git Repository와 Kubernetes 클러스터 지속 감시
3. Detect Drift
└─> 선언적 상태(Git)와 실제 상태(Cluster) 불일치 감지
4. Take Action
└─> 자동 또는 수동으로 동기화하여 복구
| 특징 | 전통적 CD (Push 방식) | ArgoCD (Pull 방식) |
|---|---|---|
| 배포 방식 | CI 도구가 직접 Push | ArgoCD가 Git에서 Pull |
| 클러스터 접근 | CI에서 클러스터 접근 필요 | 클러스터 내부에서 동작 |
| 보안 | 외부에 credential 노출 | Credential 외부 노출 없음 |
| Drift 감지 | 어려움 | 자동 감지 및 복구 |
| 멀티 클러스터 | 복잡 | 쉬움 |
| 상태 가시성 | 제한적 | 실시간 UI 제공 |
✅ 투명성: 모든 변경사항이 Git 커밋으로 기록
✅ 안정성: Drift 자동 감지 및 복구
✅ 확장성: 멀티 클러스터 쉽게 관리
✅ 보안: Kubernetes credential을 외부 노출 불필요
✅ 협업: Git 워크플로우 활용 (PR, Review)
✅ 감사: 배포 이력 완벽 추적
ArgoCD 개요를 이해했다면: