Q7: GitOps κ°λ
κ³Ό ArgoCD νμ©
μ§λ¬Έ: 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 μνλ‘ μλ 볡ꡬ |
GitOps 4κ°μ§ ν΅μ¬ μμΉ
| μμΉ |
μ€λͺ
|
| Declarative |
μμ€ν
μ μνλ μνλ₯Ό μ μΈμ μΌλ‘ μ μ |
| Versioned & Immutable |
Gitμ ν΅ν λͺ¨λ λ³κ²½ μ΄λ ₯ μΆμ λ° λ‘€λ°± κ°λ₯ |
| Pulled Automatically |
Git μ μ₯μλ₯Ό μ§μμ μΌλ‘ λͺ¨λν°λ§νμ¬ λ³κ²½ κ°μ§ μ μλ λ°°ν¬ |
| Continuously Reconciled |
μ€μ μνμ μ μΈ μν λΉκ΅ ν μλ μμ |
μ ν΅μ CI/CD vs GitOps
μ ν΅μ 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 = μ€μ μν
Reconciliation Loop λμ μ리
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λΆλ§λ€)
ArgoCD Application μ μ
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 main
νκ²½λ³ κ΄λ¦¬ (Kustomize)
my-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λ‘ λ°°ν¬ μΉμΈ, λ³κ²½ μ΄λ ₯ μλ μΆμ |