πΉ 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 μ±λ₯μ μ€μκ°μΌλ‘ λͺ¨λν°λ§ κ°λ₯