πΉ Argo CDμμ λκΈ°ν(Sync)λ?
Argo CDμ λκΈ°ν(Sync) κΈ°λ₯μ GitOps μμΉμ κΈ°λ°μΌλ‘ Kubernetes μ ν리μΌμ΄μ
μ Git μνμ μΌμΉμν€λ νλ‘μΈμ€μ
λλ€.
Git μ μ₯μμμ μ μΈλ μνμ Kubernetes ν΄λ¬μ€ν°μ μ€μ μνλ₯Ό λΉκ΅νμ¬,
νμν κ²½μ° μλ λλ μλμΌλ‘ λ³κ²½ μ¬νμ μ μ©ν μ μμ΅λλ€.
β λκΈ°ν(Sync)μ ν΅μ¬ κ°λ
β Git μ μ₯μμ μ μΈλ λ§€λνμ€νΈκ° μλ³Έ(Source of Truth) μν
β Git μνμ Kubernetes ν΄λ¬μ€ν°μ μνλ₯Ό μ§μμ μΌλ‘ λΉκ΅
β λΆμΌμΉ λ°μ μ μλ λλ μλμΌλ‘ λκΈ°ν κ°λ₯
β λ‘€λ°±(Rollback), Prune(μ 리), Self-Healing λ±μ κΈ°λ₯ μ§μ
πΉ Argo CD λκΈ°ν μν(Sync Status) μ΄ν΄νκΈ°
Argo CDλ μ ν리μΌμ΄μ μ λκΈ°ν μνλ₯Ό λ€μκ³Ό κ°μ΄ λΆλ₯ν©λλ€.
Sync μν | μ€λͺ |
Synced | μ ν리μΌμ΄μ μ΄ Git μνμ λμΌ |
OutOfSync | μ ν리μΌμ΄μ μ΄ Git μνμ λΆμΌμΉ |
Unknown | μ ν리μΌμ΄μ μνλ₯Ό νμΈν μ μμ |
β 1. Synced (λκΈ°νλ¨)
- μ ν리μΌμ΄μ μ λͺ¨λ Kubernetes 리μμ€κ° Git μ μ₯μμ λ§€λνμ€νΈμ λμΌν μν
- μ΄ μνμμλ Kubernetes ν΄λ¬μ€ν°μ λ³κ²½ μ¬νμ΄ μμΌλ©°, λ°°ν¬κ° μμ μ μΌλ‘ μ μ§λ¨
β 2. OutOfSync (λκΈ°νλμ§ μμ)
- Git μ μ₯μμ λ³κ²½ μ¬νμ΄ Kubernetes ν΄λ¬μ€ν°μ λ°μλμ§ μμ μν
- μ κ· λ¦¬μμ€ μΆκ°, λ§€λνμ€νΈ μμ , 리μμ€ μμ λ±μ΄ λ°μνμ κ°λ₯μ±μ΄ μμ
- argocd app sync λͺ λ Ήμ΄ λλ UIμμ "SYNC" λ²νΌμ ν΄λ¦νμ¬ λκΈ°ν κ°λ₯
β 3. Unknown (μ μ μμ)
- μ ν리μΌμ΄μ μνλ₯Ό κ°μ Έμ¬ μ μλ κ²½μ° λ°μ
- λ€νΈμν¬ λ¬Έμ λλ μ κ·Ό κΆν μ΄μλ‘ μΈν΄ ν΄λ¬μ€ν°μ μ°κ²°μ΄ λμ΄μ‘μ κ°λ₯μ±μ΄ μμ
πΉ Argo CD λκΈ°ν μ μ± (Sync Policy) μ€μ
Argo CDμμλ λκΈ°νλ₯Ό μλμΌλ‘ μνν μ§, μλμΌλ‘ κ΄λ¦¬ν μ§ μ€μ ν μ μμ΅λλ€.
μ΄λ₯Ό μν΄ syncPolicy μ΅μ
μ νμ©νμ¬ μλ λκΈ°ν(Automated Sync), Prune(μ 리), Self-Healing(μλ 볡ꡬ) μ€μ μ μ‘°μ ν μ μμ΅λλ€.
β 1. μλ λκΈ°ν(Automated Sync) μ€μ
μλ λκΈ°νλ₯Ό νμ±ννλ©΄, Git μ μ₯μμ λ³κ²½ μ¬νμ΄ κ°μ§λ λλ§λ€ μλμΌλ‘ Kubernetesμ λ°μλ©λλ€.
syncPolicy:
automated:
prune: true # Gitμμ μμ λ 리μμ€λ₯Ό Kubernetesμμλ μλ μμ
selfHeal: true # Kubernetes 리μμ€κ° λ³κ²½λμμ κ²½μ° μλ μνλ‘ μλ 볡ꡬ
syncOptions:
- CreateNamespace=true # λ€μμ€νμ΄μ€κ° μμ κ²½μ° μλ μμ±
- PrunePropagationPolicy=foreground # Prune λμ λ°©μ μ€μ
- PruneLast=true # μμ μμ
μ λ§μ§λ§μ μ€ν
β μ€λͺ :
- prune: true → Gitμμ μμ λ 리μμ€λ Kubernetesμμλ μμ λ¨
- selfHeal: true → Kubernetes 리μμ€κ° λ³κ²½λλ©΄ Git μνλ‘ μλ 볡ꡬ
- CreateNamespace=true → λ€μμ€νμ΄μ€κ° μμΌλ©΄ μλ μμ±
- PrunePropagationPolicy=foreground → μμ 리μμ€λ₯Ό λ¨Όμ μμ ν ν νμ 리μμ€λ₯Ό μμ
- PruneLast=true → μμ μμ μ λ§μ§λ§μ μ€ν
β 2. μλ λκΈ°ν(Manual Sync) μ€μ
μλ λκΈ°νλ₯Ό λΉνμ±ννλ©΄, Git λ³κ²½ μ¬νμ΄ μμ΄λ μ§μ μλ λκΈ°νν΄μΌ λ°μλ©λλ€.
μ΄ μ€μ μ μ΄μ νκ²½μμ λ³κ²½ μ¬νμ μλμΌλ‘ κ²ν ν λ°μν λ μ μ©ν©λλ€.
syncPolicy:
automated: {}
CLIλ₯Ό μ¬μ©ν μλ λκΈ°ν:
argocd app sync example-app
UIμμ λκΈ°ν λ°©λ²:
1οΈβ£ Argo CD μΉ UIμμ μ ν리μΌμ΄μ
μ ν
2οΈβ£ "SYNC" λ²νΌ ν΄λ¦
3οΈβ£ μνλ λκΈ°ν μ΅μ
μ μ ννμ¬ μ€ν
πΉ Argo CD λκΈ°ν μ΅μ μ΅μ ν
β 1. Prune(μ 리) μ€μ
Prune κΈ°λ₯μ νμ±ννλ©΄, Git μ μ₯μμμ μμ λ 리μμ€κ° Kubernetesμμλ μλ μμ λ©λλ€.
syncPolicy:
automated:
prune: true
Prune κΈ°λ₯μ μ¬μ©νλ©΄ λΆνμν 리μμ€κ° μ μ§λμ§ μλλ‘ λ°©μ§ν μ μμ΅λλ€.
β 2. Self-Healing(μλ 볡ꡬ) μ€μ
Self-Healing κΈ°λ₯μ μ¬μ©νλ©΄, Kubernetes 리μμ€κ° μ§μ λ³κ²½λμμ κ²½μ° μλμΌλ‘ Git μνλ‘ λ³΅κ΅¬λ©λλ€.
syncPolicy:
automated:
selfHeal: true
β
μμ μλ리μ€
1οΈβ£ μ΄μ μ€μΈ μ ν리μΌμ΄μ
μ replicas κ°μ μλμΌλ‘ λ³κ²½
2οΈβ£ Argo CDκ° Gitκ³Ό λΆμΌμΉ μνλ₯Ό κ°μ§ (OutOfSync)
3οΈβ£ Self-Healing κΈ°λ₯μ΄ νμ±νλ κ²½μ°, μλμΌλ‘ Git μνλ‘ λ³΅μλ¨
πΉ Argo CD λκΈ°ν CLI λͺ λ Ήμ΄ μ 리
λͺ λ Ήμ΄ | μ€λͺ |
argocd app list | λ±λ‘λ μ ν리μΌμ΄μ λͺ©λ‘ μ‘°ν |
argocd app get <APP> | μ ν리μΌμ΄μ μμΈ μν νμΈ |
argocd app sync <APP> | μ ν리μΌμ΄μ λκΈ°ν μ€ν |
argocd app rollback <APP> <VERSION> | νΉμ λ²μ μΌλ‘ λ‘€λ°± |
argocd app delete <APP> | μ ν리μΌμ΄μ μμ |
β μλ λκΈ°ν νμΈ:
argocd app get example-app
β μλ λκΈ°ν μ€ν:
argocd app sync example-app
β λ‘€λ°± μ€ν:
argocd app rollback example-app 2
πΉ κ²°λ‘ : μ΄λ² κΈμμ λ°°μ΄ ν΅μ¬ λ΄μ© μ 리
π’ Argo CDμ λκΈ°ν(Sync) κΈ°λ₯μ GitOps κΈ°λ° Kubernetes λ°°ν¬μ ν΅μ¬ μμ
π’ μ ν리μΌμ΄μ
μ λκΈ°ν μν(Synced, OutOfSync, Unknown)λ₯Ό μ§μμ μΌλ‘ λͺ¨λν°λ§ κ°λ₯
π’ μλ λκΈ°ν(Automated Sync) μ€μ μ ν΅ν΄ Git λ³κ²½ μ¬νμ Kubernetesμ μλ λ°μ κ°λ₯
π’ Prune λ° Self-Healing κΈ°λ₯μ νμ©νμ¬ λΆνμν 리μμ€λ₯Ό μ 리νκ³ , Kubernetes μνλ₯Ό Gitκ³Ό μΌμΉνλλ‘ μ μ§ κ°λ₯
π’ CLI λ° UIλ₯Ό νμ©νμ¬ μ ν리μΌμ΄μ
μ μλμΌλ‘ λκΈ°ννκ±°λ λ‘€λ°± μν κ°λ₯