Kubernetes Tools/ArgoCD

[Ep.11] [Argo CD 운영 #6] Argo CDμ—μ„œ 동기화(Sync) 및 배포 μ „λž΅ μ΅œμ ν™”

ygtoken 2025. 3. 17. 13:06
728x90

πŸ”Ή 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λ₯Ό ν™œμš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μˆ˜λ™μœΌλ‘œ λ™κΈ°ν™”ν•˜κ±°λ‚˜ λ‘€λ°± μˆ˜ν–‰ κ°€λŠ₯

728x90