-
Notifications
You must be signed in to change notification settings - Fork 0
KR_CS_GitOps
somaz edited this page Mar 30, 2026
·
1 revision
질문: GitOps의 핵심 원칙과 동작 방식을 설명하고, ArgoCD를 사용한 Kubernetes 배포 자동화 과정을 설명하세요. Declarative 방식과 Reconciliation Loop의 역할을 중심으로 설명하세요.
| 용어 | 설명 |
|---|---|
| GitOps | Git을 단일 진실 공급원으로 사용하는 운영 방식 |
| Declarative | 시스템의 원하는 상태를 선언하는 방식 (What) |
| Imperative | 시스템에 수행할 명령을 지시하는 방식 (How) |
| Reconciliation | 선언된 상태와 실제 상태를 일치시키는 프로세스 |
| ArgoCD | Kubernetes용 GitOps CD 도구 |
| Flux | CNCF Graduated GitOps 도구 |
| Sync | Git 상태와 클러스터 상태를 동기화하는 작업 |
| Self-heal | 수동 변경을 감지하여 Git 상태로 자동 복구 |
| 원칙 | 설명 |
|---|---|
| Declarative | 시스템의 원하는 상태를 선언적으로 정의 |
| Versioned & Immutable | Git을 통한 모든 변경 이력 추적 및 롤백 가능 |
| Pulled Automatically | Git 저장소를 지속적으로 모니터링하여 변경 감지 시 자동 배포 |
| Continuously Reconciled | 실제 상태와 선언 상태 비교 후 자동 수정 |
전통적 CI/CD:
Git Commit → CI Build → kubectl apply → Kubernetes
문제: kubectl 권한 필요, 실제 상태와 Git 불일치 가능
GitOps (ArgoCD):
Git Commit → CI Build → Container Registry
↓
Git Manifest 저장소 ← ArgoCD 폴링 → Kubernetes 자동 Sync
장점: Git 권한만 필요, 항상 Git = 실제 상태
1. Observe → Git에서 Desired State 확인 (replicas: 3)
↓
2. Diff → Kubernetes에서 Actual State 확인 (Running: 2)
Desired ≠ Actual → Out of Sync
↓
3. Act → kubectl apply 실행, Pod 1개 추가
↓
4. Verify → 상태 재확인 (Running: 3) → Synced
↓
다시 1번으로 반복 (기본 3분마다)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
source:
repoURL: https://github.com/example/my-app.git
targetRevision: main
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true # Git에서 삭제된 리소스 자동 제거
selfHeal: true # 수동 변경 자동 복구
syncOptions:
- CreateNamespace=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m# 1. Git에 이미지 태그 변경 커밋
git commit -m "Update app to v2.0.0"
git push origin main
# 2. ArgoCD가 변경 감지 (폴링 또는 Webhook)
# 3. Diff 확인
argocd app diff my-app
# 4. Auto Sync 또는 수동 Sync
argocd app sync my-app
# 5. 롤백 (필요 시 Git revert → ArgoCD 자동 복구)
git revert HEAD && git push origin mainmy-app/
├── base/
│ ├── deployment.yaml
│ └── service.yaml
└── overlays/
├── dev/ # replicas: 1
├── staging/ # replicas: 2
└── production/ # replicas: 5 + HPA
각 환경마다 별도 ArgoCD Application으로 관리.
| 특징 | ArgoCD | Flux |
|---|---|---|
| UI | 강력한 Web UI 제공 | CLI 중심 |
| Sync 방식 | Pull (기본 3분) | Push + Pull |
| Helm 지원 | Native 지원 | Helm Controller |
| Image 자동 업데이트 | Image Updater (별도) | 내장 (Image Automation) |
| CNCF 상태 | Incubating | Graduated |
| 항목 | 내용 |
|---|---|
| 보안 | Kubernetes 직접 접근 불필요, Git 권한으로만 통제 |
| 신뢰성 | 선언적 상태 일관성 보장, Self-healing, 쉬운 롤백 |
| 가시성 | Web UI 전체 상태 확인, Diff 미리보기, Health 모니터링 |
| 협업 | Git 기반 코드 리뷰, PR로 배포 승인, 변경 이력 자동 추적 |