Kubernetes Tools/ArgoCD

[Ep.30] [Argo CD ์„ฑ๋Šฅ ์ตœ์ ํ™” #7] Argo CD์˜ ์šด์˜ ํ™˜๊ฒฝ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น…

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

๐Ÿ”น ์™œ Argo CD ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กœ๊น…์ด ์ค‘์š”ํ•œ๊ฐ€?

Argo CD๋ฅผ ์šด์˜ํ•  ๋•Œ ๋ฐฐํฌ ์ƒํƒœ, ์„ฑ๋Šฅ, ์žฅ์•  ๋ฐœ์ƒ ์—ฌ๋ถ€๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ ,
๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹ ์†ํ•˜๊ฒŒ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊น…(Log Management)์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

โœ… Argo CD ์šด์˜ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์š”์†Œ

 

๋ชจ๋‹ˆํ„ฐ๋ง ํ•ญ๋ชฉ  ์„ค๋ช…
Sync ์ƒํƒœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Git๊ณผ ๋™๊ธฐํ™”(Sync) ์ƒํƒœ์ธ์ง€ ํ™•์ธ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ—ฌ์Šค ์ฒดํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง
์ปจํŠธ๋กค๋Ÿฌ ์„ฑ๋Šฅ Argo CD ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌ์†Œ์Šค(CPU, ๋ฉ”๋ชจ๋ฆฌ) ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
์ด๋ฒคํŠธ ๋ฐ ์•Œ๋ฆผ ๋ฐฐํฌ ์‹คํŒจ, ๋กค๋ฐฑ ์ด๋ฒคํŠธ ๋“ฑ์„ Slack/Email๋กœ ์•Œ๋ฆผ ์„ค์ •
๋กœ๊ทธ ๋ถ„์„ Argo CD API ์„œ๋ฒ„, ์ปจํŠธ๋กค๋Ÿฌ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„œ๋ฒ„์˜ ๋กœ๊ทธ ์ˆ˜์ง‘

๐Ÿ”น 1. Prometheus & Grafana๋ฅผ ํ™œ์šฉํ•œ Argo CD ๋ฉ”ํŠธ๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง

Argo CD๋Š” Prometheus ํ˜•์‹์˜ ๋ฉ”ํŠธ๋ฆญ์„ ์ œ๊ณตํ•˜์—ฌ,
Prometheus์™€ Grafana๋ฅผ ์—ฐ๋™ํ•˜๋ฉด ์‹œ๊ฐ์ ์ธ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โœ… Prometheus๋ฅผ ํ™œ์šฉํ•œ Argo CD ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘

Argo CD์˜ ๋ฉ”ํŠธ๋ฆญ์„ Prometheus์—์„œ ์ˆ˜์ง‘ํ•˜๋ ค๋ฉด,
ServiceMonitor ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Argo CD์˜ /metrics ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: argocd-metrics
  namespace: monitoring  # Prometheus๊ฐ€ ๋ฐฐํฌ๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: argocd-server  # Argo CD ์„œ๋ฒ„์˜ ๋ผ๋ฒจ ์ง€์ •
  endpoints:
    - port: metrics  # Argo CD์˜ /metrics ์—”๋“œํฌ์ธํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง
      interval: 30s  # 30์ดˆ๋งˆ๋‹ค ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘

 

โœ… ์„ค๋ช…:
โœ” selector.matchLabels.app.kubernetes.io/name: argocd-server → Argo CD ์„œ๋ฒ„๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ •
โœ” endpoints.port: metrics → Argo CD์˜ /metrics ์—”๋“œํฌ์ธํŠธ์—์„œ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
โœ” interval: 30s → 30์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ ์—…๋ฐ์ดํŠธ

 

โœ… ServiceMonitor ์ ์šฉ ๋ฐฉ๋ฒ•

kubectl apply -f argocd-servicemonitor.yaml -n monitoring

 

โœ… Prometheus์—์„œ Argo CD ๋ฉ”ํŠธ๋ฆญ ํ™•์ธ

kubectl port-forward svc/prometheus-service -n monitoring 9090

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:9090 ์ ‘์† ํ›„, argocd_* ๋ฉ”ํŠธ๋ฆญ ๊ฒ€์ƒ‰


๐Ÿ”น 2. Grafana๋ฅผ ํ™œ์šฉํ•œ Argo CD ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์ถ•

Grafana๋ฅผ ํ™œ์šฉํ•˜์—ฌ Argo CD์˜ ๋ฐฐํฌ ์ƒํƒœ, ๋™๊ธฐํ™”์œจ, ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Grafana์—์„œ Argo CD ๋Œ€์‹œ๋ณด๋“œ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

1๏ธโƒฃ Grafana ์ ‘์† → http://localhost:3000
2๏ธโƒฃ Data Sources → Prometheus ์ถ”๊ฐ€
3๏ธโƒฃ Import Dashboard → Grafana Dashboard ID: 14487 ์ž…๋ ฅ

 

โœ… Argo CD ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด
โœ” Sync ์ƒํƒœ (argocd_app_sync_status)
โœ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ—ฌ์Šค ์ฒดํฌ (argocd_app_health_status)
โœ” ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ (argocd_controller_cpu, argocd_controller_memory)
โœ” ๋ฐฐํฌ ์„ฑ๊ณต๋ฅ  ๋ฐ ์‹คํŒจ์œจ


๐Ÿ”น 3. Loki & Fluent Bit์„ ํ™œ์šฉํ•œ Argo CD ๋กœ๊ทธ ๋ถ„์„

Argo CD ์šด์˜ ์ค‘ ๋ฐฐํฌ ์‹คํŒจ, ๋™๊ธฐํ™” ์˜ค๋ฅ˜ ๋“ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋กœ๊ทธ ๋ถ„์„์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.
Loki + Fluent Bit์„ ์‚ฌ์šฉํ•˜๋ฉด Argo CD์˜ ๋กœ๊ทธ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Fluent Bit์„ ํ™œ์šฉํ•œ Argo CD ๋กœ๊ทธ ์ˆ˜์ง‘ ์„ค์ •

apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterOutput
metadata:
  name: loki-argocd
  namespace: monitoring
spec:
  match: argocd*
  loki:
    url: http://loki.monitoring.svc:3100  # Loki ์„œ๋น„์Šค URL

 

โœ… ์„ค๋ช…:
โœ” match: argocd* → argocd-* ๋กœ๊น… ๋ผ๋ฒจ์„ ๊ฐ€์ง„ ๋กœ๊ทธ๋งŒ ์ˆ˜์ง‘
โœ” loki.url → Loki ์„œ๋น„์Šค์˜ URL ์ง€์ •

 

โœ… ๋กœ๊ทธ ์ˆ˜์ง‘ ์ ์šฉ ๋ฐฉ๋ฒ•

kubectl apply -f fluentbit-loki-argocd.yaml -n monitoring

 

โœ… Loki์—์„œ Argo CD ๋กœ๊ทธ ์กฐํšŒ (Grafana์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ)

{job="argocd"}

๐Ÿ”น 4. Argo CD Notifications๋ฅผ ํ™œ์šฉํ•œ ์•Œ๋ฆผ ์„ค์ •

Argo CD๋Š” ๋ฐฐํฌ ์‹คํŒจ, ๋™๊ธฐํ™” ์˜ค๋ฅ˜ ๋“ฑ์˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ Slack ๋˜๋Š” Email๋กœ ์•Œ๋ฆผ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Slack ์•Œ๋ฆผ ์„ค์ • ์˜ˆ์ œ

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.slack: |
    token: xoxb-xxxxxxxxxxxx-xxxxxxxxxxxxxxxx
  trigger.sync-failed: |
    - when: app.status.sync.status == 'OutOfSync'
      send: [slack]

 

โœ… ์„ค๋ช…:
โœ” service.slack.token → Slack API ํ† ํฐ ์ž…๋ ฅ
โœ” trigger.sync-failed → ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด OutOfSync ์ƒํƒœ์ผ ๋•Œ Slack ์•Œ๋ฆผ ์ „์†ก

 

โœ… Slack ์•Œ๋ฆผ ์„ค์ • ์ ์šฉ ๋ฐฉ๋ฒ•

kubectl apply -f argocd-notifications.yaml -n argocd

๐Ÿ”น 5. Argo CD ์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ ๊ณ ๋ คํ•  ์ 

โœ… 1๏ธโƒฃ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์ตœ์ ํ™”
โœ” Argo CD ์ปจํŠธ๋กค๋Ÿฌ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„œ๋ฒ„์˜ CPU/๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง
โœ” ํ•„์š” ์‹œ HPA(Horizontal Pod Autoscaler) ์„ค์ •ํ•˜์—ฌ ์ž๋™ ํ™•์žฅ

 

โœ… 2๏ธโƒฃ ๋ฐฐํฌ ์‹คํŒจ ์›์ธ ๋ถ„์„
โœ” ๋ฐฐํฌ ์‹คํŒจ ์‹œ argocd app history ๋ช…๋ น์–ด๋กœ ๋ณ€๊ฒฝ ์ด๋ ฅ ์กฐํšŒ
โœ” argocd app logs๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒ์„ธ ์˜ค๋ฅ˜ ๋กœ๊ทธ ํ™•์ธ

 

โœ… 3๏ธโƒฃ ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ ์œ ์ง€๋ณด์ˆ˜
โœ” Prometheus์—์„œ argocd_* ๋ฉ”ํŠธ๋ฆญ์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์ง‘๋˜๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธ
โœ” Grafana ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์—ฌ ์‹œ๊ฐ์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ํ™˜๊ฒฝ ์œ ์ง€


๐Ÿ”น ๊ฒฐ๋ก : ์ด๋ฒˆ ๊ธ€์—์„œ ๋ฐฐ์šด ํ•ต์‹ฌ ๋‚ด์šฉ ์ •๋ฆฌ

๐ŸŸข Prometheus & Grafana๋ฅผ ํ™œ์šฉํ•˜์—ฌ Argo CD ์šด์˜ ํ™˜๊ฒฝ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ
๐ŸŸข Loki & Fluent Bit์„ ์‚ฌ์šฉํ•˜์—ฌ Argo CD ๋กœ๊ทธ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๋ถ„์„ ๊ฐ€๋Šฅ
๐ŸŸข Argo CD Notifications๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฐฐํฌ ์‹คํŒจ, ๋™๊ธฐํ™” ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ Slack/Email ์•Œ๋ฆผ ์ „์†ก ๊ฐ€๋Šฅ
๐ŸŸข ์šด์˜ ํ™˜๊ฒฝ์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ Argo CD์˜ ์„ฑ๋Šฅ ๋ฐ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

728x90