Kubernetes Tools/ArgoCD

[Ep.13] [Argo CD 운영 #8] Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ λͺ¨λ‹ˆν„°λ§ 및 μ•Œλ¦Ό(Notification) μ„€μ •

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

πŸ”Ή Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ λͺ¨λ‹ˆν„°λ§μ΄ μ€‘μš”ν•œ 이유

Argo CDλŠ” GitOps 기반의 배포 μžλ™ν™” λ„κ΅¬λ‘œ, μ§€μ†μ μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³  배포 μƒνƒœλ₯Ό 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.
운영 ν™˜κ²½μ—μ„œ Kubernetes μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 정상적인 λ™μž‘μ„ 보μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§κ³Ό μ•Œλ¦Ό(Notification) 섀정이 ν•„μˆ˜μž…λ‹ˆλ‹€.

 

βœ… Argo CD μƒνƒœ λͺ¨λ‹ˆν„°λ§ 및 μ•Œλ¦Ό μ„€μ •μ˜ μ£Όμš” λͺ©μ 


βœ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 동기화 μƒνƒœ(Sync Status) 및 ν—¬μŠ€ μƒνƒœ(Health Status) λͺ¨λ‹ˆν„°λ§
βœ” 배포 μ‹€νŒ¨ λ˜λŠ” OutOfSync μƒνƒœ λ°œμƒ μ‹œ μ¦‰μ‹œ 감지
βœ” Slack, 이메일, μ›Ήν›…(Webhook) λ“±μ˜ μ•Œλ¦Ό μ‹œμŠ€ν…œκ³Ό 연동
βœ” 문제 λ°œμƒ μ‹œ μ‹ μ†ν•œ λŒ€μ‘ 및 λ‘€λ°± μˆ˜ν–‰ κ°€λŠ₯


πŸ”Ή Argo CD의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ λͺ¨λ‹ˆν„°λ§ 방식

Argo CDλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ **두 κ°€μ§€ μ£Όμš” μƒνƒœ(Sync Status & Health Status)**λ₯Ό λͺ¨λ‹ˆν„°λ§ν•©λ‹ˆλ‹€.

βœ… 1. 동기화 μƒνƒœ(Sync Status)

Git μ €μž₯μ†Œμ™€ Kubernetes ν΄λŸ¬μŠ€ν„° κ°„μ˜ 동기화 μƒνƒœλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

Sync μƒνƒœ μ„€λͺ…
Synced μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Git μƒνƒœμ™€ 동일
OutOfSync μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Git μƒνƒœμ™€ 뢈일치
Unknown μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό 확인할 수 μ—†μŒ

βœ… 2. ν—¬μŠ€ μƒνƒœ(Health Status)

Kubernetes λ¦¬μ†ŒμŠ€μ˜ 정상 λ™μž‘ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

Health μƒνƒœ μ„€λͺ…
Healthy λͺ¨λ“  λ¦¬μ†ŒμŠ€κ°€ μ •μƒμ μœΌλ‘œ λ™μž‘
Degraded 일뢀 λ¦¬μ†ŒμŠ€κ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ§€ μ•ŠμŒ
Progressing μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ—…λ°μ΄νŠΈ 쀑
Suspended 배포가 μ€‘μ§€λœ μƒνƒœ
Missing μ„ μ–Έλœ λ¦¬μ†ŒμŠ€κ°€ ν΄λŸ¬μŠ€ν„°μ—μ„œ λ°œκ²¬λ˜μ§€ μ•ŠμŒ

 

βœ… CLIλ₯Ό μ‚¬μš©ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ 확인:

argocd app get example-app

 

βœ… 좜λ ₯ μ˜ˆμ‹œ:

Name:               example-app
Project:            default
Sync Status:        OutOfSync
Health Status:      Degraded

πŸ”Ή Argo CD μ•Œλ¦Ό(Notification) μ‹œμŠ€ν…œ μ„€μ •

Argo CDλŠ” λ‹€μ–‘ν•œ μ•Œλ¦Ό(Notification) 채널을 μ§€μ›ν•˜λ©°, 이λ₯Ό 톡해 배포 μƒνƒœ 변경을 μ‹€μ‹œκ°„μœΌλ‘œ 감지할 수 μžˆμŠ΅λ‹ˆλ‹€.
μ§€μ›λ˜λŠ” μ£Όμš” μ•Œλ¦Ό 채널은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

βœ… μ§€μ›λ˜λŠ” μ•Œλ¦Ό(Notification) 채널
βœ” Slack → 배포 μƒνƒœ 변경을 μ‹€μ‹œκ°„μœΌλ‘œ μ•Œλ¦Ό
βœ” Email → μ€‘μš”ν•œ μ•Œλ¦Όμ„ μ΄λ©”μΌλ‘œ 전솑
βœ” Webhook → νŠΉμ • URL둜 HTTP μš”μ²­μ„ μ „μ†‘ν•˜μ—¬ μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Ό 연동
βœ” Microsoft Teams → MS Teams μ±„λ„μ—μ„œ μ•Œλ¦Ό μˆ˜μ‹ 
βœ” Telegram → ν…”λ ˆκ·Έλž¨ 봇을 μ΄μš©ν•œ μ•Œλ¦Ό 전솑


πŸ”Ή Argo CD Notifications μ„€μΉ˜ 및 μ„€μ •

βœ… 1. Argo CD Notifications μ„€μΉ˜

Argo CDμ—μ„œ μ•Œλ¦Ό κΈ°λŠ₯을 ν™œμ„±ν™”ν•˜λ €λ©΄ argocd-notificationsλ₯Ό μΆ”κ°€λ‘œ μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm install argocd-notifications argo/argocd-notifications -n argocd

 

μ„€μΉ˜ ν›„, μ•Œλ¦Όμ΄ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

kubectl get pods -n argocd | grep notifications

 

βœ… 좜λ ₯ μ˜ˆμ‹œ:

argocd-notifications-controller-xyz   1/1   Running   0   1m

βœ… 2. Slack μ•Œλ¦Ό μ„€μ •

Slackκ³Ό μ—°λ™ν•˜μ—¬ 배포 μƒνƒœλ₯Ό μ•Œλ¦Όλ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ¨Όμ € Slack Webhook URL을 μƒμ„±ν•œ ν›„, Argo CD μ„€μ • νŒŒμΌμ— μΆ”κ°€ν•©λ‹ˆλ‹€.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.slack: |
    token: xoxb-XXXXXXXXX
    webhook: https://hooks.slack.com/services/XXXX/XXXX/XXXX

 

μ„€μ • 적용 ν›„, μ•Œλ¦Όμ„ ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€.

argocd-notifications template notify-test

 

βœ… Slack μ•Œλ¦Ό μ˜ˆμ‹œ:

[ArgoCD] example-app: Application is OutOfSync

βœ… 3. Email μ•Œλ¦Ό μ„€μ •

이메일을 ν†΅ν•œ μ•Œλ¦Όμ„ μ„€μ •ν•˜λ €λ©΄ SMTP μ„œλ²„ 정보λ₯Ό μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.email: |
    smtpServer: smtp.example.com
    smtpPort: 587
    username: user@example.com
    password: password123
    from: argocd@example.com

 

μ„€μ • 적용 ν›„, ν…ŒμŠ€νŠΈ 이메일을 보낼 수 μžˆμŠ΅λ‹ˆλ‹€.

argocd-notifications template notify-test --email user@example.com

βœ… 4. Webhook μ•Œλ¦Ό μ„€μ •

μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Ό μ—°λ™ν•˜μ—¬ 이벀트λ₯Ό μ²˜λ¦¬ν•˜λ €λ©΄ Webhook을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.webhook: |
    url: http://example.com/webhook

 

ν…ŒμŠ€νŠΈ Webhook 호좜:

argocd-notifications template notify-test --webhook example-webhook

 

βœ… Webhook μš”μ²­ μ˜ˆμ‹œ (JSON ν˜•μ‹):

{
  "application": "example-app",
  "status": "OutOfSync",
  "message": "Application is OutOfSync"
}

πŸ”Ή Argo CD μ•Œλ¦Ό μ„€μ • CLI λͺ…λ Ήμ–΄ 정리

λͺ…λ Ήμ–΄ μ„€λͺ…
argocd-notifications template notify-test μ•Œλ¦Ό ν…ŒμŠ€νŠΈ μ‹€ν–‰
argocd app get <APP> μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ 확인
argocd-notifications template notify-test --email <EMAIL> 이메일 μ•Œλ¦Ό ν…ŒμŠ€νŠΈ
argocd-notifications template notify-test --slack <CHANNEL> Slack μ•Œλ¦Ό ν…ŒμŠ€νŠΈ
argocd-notifications template notify-test --webhook <URL> Webhook μ•Œλ¦Ό ν…ŒμŠ€νŠΈ

πŸ”Ή κ²°λ‘ : 이번 κΈ€μ—μ„œ 배운 핡심 λ‚΄μš© 정리

🟒 Argo CDλŠ” Sync μƒνƒœ 및 Health μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ 배포 μƒνƒœλ₯Ό 관리
🟒 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ OutOfSync λ˜λŠ” Degraded μƒνƒœκ°€ 되면 μ¦‰μ‹œ 감지 κ°€λŠ₯
🟒 Slack, Email, Webhook λ“± λ‹€μ–‘ν•œ μ•Œλ¦Ό 채널을 μ„€μ •ν•˜μ—¬ 배포 문제λ₯Ό μ‹ μ†νžˆ λŒ€μ‘ κ°€λŠ₯
🟒 Argo CD Notificationsλ₯Ό ν™œμš©ν•˜μ—¬ 배포 이벀트λ₯Ό μžλ™μœΌλ‘œ κ°μ§€ν•˜κ³  μ•Œλ¦Όμ„ 전솑 κ°€λŠ₯

728x90