Kubernetes Tools/ArgoCD

[Ep.38] [Argo CD 운영 μ΅œμ ν™” #10] Argo CD 운영 μ‹œ μ„±λŠ₯ μ΅œμ ν™” 및 λͺ¨λ‹ˆν„°λ§ μ „λž΅

ygtoken 2025. 3. 18. 10:25
728x90

πŸ”Ή Argo CD 운영 μ‹œ μ„±λŠ₯ μ΅œμ ν™”κ°€ ν•„μš”ν•œ 이유

Argo CDλŠ” GitOps λ°©μ‹μœΌλ‘œ Kubernetes μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μžλ™μœΌλ‘œ λ°°ν¬ν•˜κ³  λ™κΈ°ν™”ν•˜μ§€λ§Œ,
운영 ν™˜κ²½μ—μ„œ λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 관리할 경우 μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

βœ… Argo CD μ„±λŠ₯ μ΅œμ ν™”κ°€ ν•„μš”ν•œ 이유

βœ” λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포 μ‹œ λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰ 증가
βœ” Git μ €μž₯μ†Œ λ³€κ²½ 감지 및 동기화 속도 μ΅œμ ν™” ν•„μš”
βœ” Argo CD의 API μ„œλ²„ 및 컨트둀러의 λΆ€ν•˜ μ΅œμ†Œν™”
βœ” Prometheus 및 Grafanaλ₯Ό ν™œμš©ν•œ μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ ν•„μš”


πŸ”Ή 1. Argo CD μ„±λŠ₯ μ΅œμ ν™” μ „λž΅

Argo CDλ₯Ό μš΄μ˜ν•  λ•Œ, λ‹€μŒκ³Ό 같은 핡심 μ΅œμ ν™” μ „λž΅μ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ… 1.1 Argo CD 컨트둀러의 λ¦¬μ†ŒμŠ€ μ΅œμ ν™”

Argo CD의 Application ControllerλŠ” 동기화 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©°,
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œμˆ˜κ°€ μ¦κ°€ν• μˆ˜λ‘ λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰μ΄ κΈ‰κ²©νžˆ 증가할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ“Œ Argo CD 컨트둀러의 λ¦¬μ†ŒμŠ€ μ œν•œ μ„€μ •

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  controller.resources.limits.cpu: "2"  # μ΅œλŒ€ 2 CPU μ œν•œ
  controller.resources.limits.memory: "2Gi"  # μ΅œλŒ€ 2Gi λ©”λͺ¨λ¦¬ μ œν•œ
  controller.resources.requests.cpu: "500m"  # κΈ°λ³Έ CPU μš”μ²­λŸ‰
  controller.resources.requests.memory: "512Mi"  # κΈ°λ³Έ λ©”λͺ¨λ¦¬ μš”μ²­λŸ‰

 

βœ… μ„€λͺ…:
βœ” limits.cpu: "2" → 컨트둀러의 CPU μ‚¬μš©λŸ‰μ„ 2개 μ½”μ–΄λ‘œ μ œν•œ
βœ” limits.memory: "2Gi" → μ΅œλŒ€ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 2Gi둜 μ œν•œ
βœ” requests.cpu: "500m" → 기본적으둜 500m(0.5μ½”μ–΄) CPUλ₯Ό μš”μ²­
βœ” requests.memory: "512Mi" → 기본적으둜 512Mi λ©”λͺ¨λ¦¬λ₯Ό μš”μ²­

 

βœ… Argo CD 컨트둀러 λ¦¬μ†ŒμŠ€ λ³€κ²½ ν›„ 적용

kubectl apply -f argocd-cm.yaml -n argocd
kubectl rollout restart deployment argocd-application-controller -n argocd

βœ… 1.2 Argo CD Git μ €μž₯μ†Œ κ°μ‹œ 속도 μ΅œμ ν™”

Argo CDλŠ” Git μ €μž₯μ†Œμ˜ λ³€κ²½ 사항을 κ°μ§€ν•˜μ—¬ Kubernetes에 λ°˜μ˜ν•©λ‹ˆλ‹€.
ν•˜μ§€λ§Œ λŒ€κ·œλͺ¨ 배포 ν™˜κ²½μ—μ„œλŠ” μ €μž₯μ†Œ 폴링(Fetch)이 λ§Žμ•„μ§€λ©΄ λΆ€ν•˜κ°€ 증가할 수 μžˆμŠ΅λ‹ˆλ‹€

 

πŸ“Œ Git μ €μž₯μ†Œ κ°μ‹œ 간격 μ‘°μ • (κΈ°λ³Έ: 3λΆ„)

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  timeout.reconciliation: "180s"  # Git μ €μž₯μ†Œ κ°μ‹œ μ£ΌκΈ°λ₯Ό 3λΆ„(180초)둜 μ„€μ •

 

βœ… μ„€λͺ…:
βœ” timeout.reconciliation: "180s" → Git λ³€κ²½ 사항을 3λΆ„(180초)λ§ˆλ‹€ κ°μ‹œ
βœ” λ„ˆλ¬΄ 짧으면 λΆ€ν•˜ 증가, λ„ˆλ¬΄ κΈΈλ©΄ λ³€κ²½ 반영 속도 느렀짐

 

βœ… Git κ°μ‹œ μ£ΌκΈ° λ³€κ²½ 적용

kubectl apply -f argocd-cm.yaml -n argocd
kubectl rollout restart deployment argocd-repo-server -n argocd

βœ… 1.3 Argo CD μΊμ‹œ μ΅œμ ν™” (Redis μ„€μ • λ³€κ²½)

Argo CDλŠ” Redisλ₯Ό ν™œμš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό μΊμ‹±ν•©λ‹ˆλ‹€.
Redis 섀정을 μ΅œμ ν™”ν•˜λ©΄ API 응닡 속도λ₯Ό 높이고 μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ“Œ Redis μΊμ‹œ 크기 증가 (configmap μ„€μ •)

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  redis.maxmemory-policy: "allkeys-lru"  # LRU μ•Œκ³ λ¦¬μ¦˜ μ‚¬μš©ν•˜μ—¬ 였래된 μΊμ‹œ 제거
  redis.maxmemory: "512Mi"  # Redis μΊμ‹œ μ΅œλŒ€ λ©”λͺ¨λ¦¬ 512MiB μ„€μ •

 

βœ… μ„€λͺ…:
βœ” redis.maxmemory-policy: "allkeys-lru" → Least Recently Used(LRU) μ •μ±…μœΌλ‘œ μΊμ‹œ μ΅œμ ν™”
βœ” redis.maxmemory: "512Mi" → Redis μΊμ‹œ 크기λ₯Ό 512Mi둜 μ„€μ •ν•˜μ—¬ μ„±λŠ₯ κ°œμ„ 

 

βœ… Redis μΊμ‹œ μ„€μ • λ³€κ²½ 적용

kubectl apply -f argocd-cm.yaml -n argocd
kubectl rollout restart deployment argocd-redis -n argocd

πŸ”Ή 2. Argo CD λͺ¨λ‹ˆν„°λ§ 및 μ„±λŠ₯ 뢄석

Argo CD의 μ„±λŠ₯을 λͺ¨λ‹ˆν„°λ§ν•˜λ €λ©΄ Prometheus 및 Grafanaλ₯Ό ν™œμš©ν•˜μ—¬ λ©”νŠΈλ¦­μ„ μˆ˜μ§‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.

βœ… 2.1 Prometheusλ₯Ό ν™œμš©ν•œ Argo CD λ©”νŠΈλ¦­ μˆ˜μ§‘

Argo CDλŠ” 자체적으둜 Prometheus λ©”νŠΈλ¦­μ„ λ…ΈμΆœν•©λ‹ˆλ‹€.

 

βœ… Prometheusμ—μ„œ Argo CD λ©”νŠΈλ¦­ μˆ˜μ§‘ ν™œμ„±ν™”

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  metrics.enabled: "true"  # Prometheus λ©”νŠΈλ¦­ ν™œμ„±ν™”
  metrics.port: "8082"  # λ©”νŠΈλ¦­ μˆ˜μ§‘ 포트 μ„€μ •

 

βœ… μ„€λͺ…:
βœ” metrics.enabled: "true" → Argo CDμ—μ„œ Prometheus λ©”νŠΈλ¦­μ„ ν™œμ„±ν™”
βœ” metrics.port: "8082" → λ©”νŠΈλ¦­μ„ λ…ΈμΆœν•  포트 μ„€μ •

 

βœ… Prometheusμ—μ„œ Argo CD λ©”νŠΈλ¦­ 쑰회

kubectl get svc -n argocd
kubectl port-forward svc/argocd-metrics 8082:8082 -n argocd

 

βœ… λ©”νŠΈλ¦­ μ—”λ“œν¬μΈνŠΈ 확인

http://localhost:8082/metrics

βœ… 2.2 Grafana λŒ€μ‹œλ³΄λ“œλ₯Ό ν™œμš©ν•œ Argo CD λͺ¨λ‹ˆν„°λ§

Grafanaμ—μ„œ Argo CD λŒ€μ‹œλ³΄λ“œλ₯Ό μ„€μ •ν•˜μ—¬ μ‹€μ‹œκ°„ μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
GitHubμ—μ„œ Argo CD Grafana λŒ€μ‹œλ³΄λ“œ ν…œν”Œλ¦Ώμ„ λ‹€μš΄λ‘œλ“œν•˜μ—¬ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

βœ… Argo CD Grafana λŒ€μ‹œλ³΄λ“œ ν…œν”Œλ¦Ώ ID: 13302

# Grafana에 λŒ€μ‹œλ³΄λ“œ μΆ”κ°€
https://grafana.com/grafana/dashboards/13302-argo-cd/

 

βœ… Grafanaμ—μ„œ λͺ¨λ‹ˆν„°λ§ κ°€λŠ₯ν•œ ν•­λͺ©:
βœ” 동기화 μƒνƒœ (argocd_app_sync_status)
βœ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포 μ‹œκ°„ (argocd_app_deployment_duration)
βœ” 리포지토리 μ—…λ°μ΄νŠΈ 속도 (argocd_repo_update_duration)
βœ” 컨트둀러 이벀트 (argocd_controller_event_count)


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

🟒 Argo CD 컨트둀러의 λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰μ„ μ΅œμ ν™”ν•˜μ—¬ μ„±λŠ₯ κ°œμ„  κ°€λŠ₯
🟒 Git μ €μž₯μ†Œ κ°μ‹œ 속도λ₯Ό μ‘°μ •ν•˜μ—¬ λΆ€ν•˜λ₯Ό μ€„μ΄λ©΄μ„œ λΉ λ₯Έ 반영 κ°€λŠ₯
🟒 Redis μΊμ‹œ 섀정을 μ΅œμ ν™”ν•˜μ—¬ API 응닡 속도 κ°œμ„  κ°€λŠ₯
🟒 Prometheus 및 Grafanaλ₯Ό ν™œμš©ν•˜μ—¬ Argo CD μ„±λŠ₯을 μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ κ°€λŠ₯

 

728x90