Kubernetes Tools/ArgoCD

[Ep.32] [Argo CD ์šด์˜ ์ตœ์ ํ™” #2] Argo CD์˜ ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ๊ตฌ์„ฑ ๋ฐ ์žฅ์•  ๋Œ€์‘

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

๐Ÿ”น Argo CD์˜ ๊ณ ๊ฐ€์šฉ์„ฑ(HA)๋ž€?

Argo CD๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐฐํฌ๋˜์ง€๋งŒ,
์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์ค‘ ๋…ธ๋“œ(๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค) ๊ตฌ์„ฑ์„ ํ†ตํ•ด ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability, HA) ์„ ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

โœ… ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์ด์œ 

 

โœ” ๋‹จ์ผ ์žฅ์• ์ (Single Point of Failure, SPOF) ์ œ๊ฑฐ
โœ” ํŠธ๋ž˜ํ”ฝ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”
โœ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ค‘๋‹จ ๋ฐฉ์ง€ ๋ฐ ์šด์˜ ์•ˆ์ •์„ฑ ๊ฐ•ํ™”
โœ” ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๋˜๋Š” ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์›ํ™œํ•œ ๋™์ž‘ ๋ณด์žฅ

 

โœ… Argo CD HA ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
Argo CD API ์„œ๋ฒ„ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , UI ๋ฐ CLI์™€ ์ƒํ˜ธ์ž‘์šฉ
Argo CD ์ปจํŠธ๋กค๋Ÿฌ Git ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜๊ณ  Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ๋™๊ธฐํ™”
Argo CD ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„ Git ์ €์žฅ์†Œ์—์„œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ฒ˜๋ฆฌ
Redis Argo CD API ์„œ๋ฒ„ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ„ ์บ์‹œ ๊ณต์œ 
External Database (PostgreSQL) HA ํ™˜๊ฒฝ์—์„œ๋Š” ์™ธ๋ถ€ DB(PostgreSQL)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ์ €์žฅ

๐Ÿ”น 1. Argo CD ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

โœ… Argo CD HA ๋ชจ๋“œ ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•

Argo CD๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ๋ชจ๋“œ(Single Instance)๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ,
๋‹ค์Œ ์„ค์ •์„ ์ ์šฉํ•˜๋ฉด ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค(HA ๋ชจ๋“œ)๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argocd-ha
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/repo.git
    targetRevision: main
    path: argocd-ha
  destination:
    server: https://kubernetes.default.svc
    namespace: argocd
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:
โœ” destination.namespace: argocd → Argo CD๋ฅผ ๋ฐฐํฌํ•  ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ง€์ •
โœ” syncPolicy.automated → Git ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™ ๋ฐ˜์˜๋˜๋„๋ก ์„ค์ •

 

โœ… HA ๋ชจ๋“œ ํ™œ์„ฑํ™” ์‹œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ
โœ” API ์„œ๋ฒ„(ReplicaSet) ๋ณต์ œ → replicas: 2 ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ
โœ” Argo CD ์ปจํŠธ๋กค๋Ÿฌ HA ๋ชจ๋“œ ์ ์šฉ → controller.replicas: 2 ์ด์ƒ
โœ” Argo CD ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„ HA ๋ชจ๋“œ ์ ์šฉ → repoServer.replicas: 2 ์ด์ƒ
โœ” Redis ๋ฐ External DB(PostgreSQL) ์—ฐ๋™


๐Ÿ”น 2. Argo CD HA ๊ตฌ์„ฑ ๋ฐฉ๋ฒ• (Helm Chart ์‚ฌ์šฉ)

โœ… Helm์„ ์‚ฌ์šฉํ•œ HA ๋ชจ๋“œ ๋ฐฐํฌ ์˜ˆ์ œ

apiVersion: v2
name: argocd-ha
description: High Availability deployment of Argo CD
version: 1.0.0
dependencies:
  - name: argo-cd
    version: 5.17.0
    repository: https://argoproj.github.io/argo-helm
    values:
      controller:
        replicas: 3  # ์ปจํŠธ๋กค๋Ÿฌ HA ๋ชจ๋“œ ํ™œ์„ฑํ™”
      repoServer:
        replicas: 2  # ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„ ๋ณต์ œ
      applicationSet:
        enabled: true  # ApplicationSet ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”
      dex:
        enabled: false  # SSO ์ธ์ฆ์ด ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ ๋น„ํ™œ์„ฑํ™”
      redis:
        enabled: true  # ์บ์‹ฑ์„ ์œ„ํ•œ Redis ํ™œ์„ฑํ™”
      postgresql:
        enabled: true  # ์™ธ๋ถ€ DB ์‚ฌ์šฉ ํ™œ์„ฑํ™”

 

โœ… ์„ค๋ช…:
โœ” controller.replicas: 3 → Argo CD ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ 3๊ฐœ ๋ณต์ œํ•˜์—ฌ HA ๊ตฌ์„ฑ
โœ” repoServer.replicas: 2 → ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„๋ฅผ 2๊ฐœ๋กœ ๋ณต์ œ
โœ” redis.enabled: true → API ์„œ๋ฒ„ ๊ฐ„ ์บ์‹ฑ์„ ์œ„ํ•ด Redis ํ™œ์„ฑํ™”
โœ” postgresql.enabled: true → ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(PostgreSQL) ์—ฐ๋™

 

โœ… Helm์„ ์‚ฌ์šฉํ•˜์—ฌ Argo CD HA ๋ฐฐํฌ ์ ์šฉ

helm install argocd-ha -f values-ha.yaml argo-cd/argo-cd -n argocd

 

โœ… ๋ฐฐํฌ๋œ Argo CD HA ์ƒํƒœ ํ™•์ธ

kubectl get pods -n argocd

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME                                 READY   STATUS    RESTARTS   AGE
argocd-server-0                      1/1     Running   0          5m
argocd-server-1                      1/1     Running   0          5m
argocd-repo-server-0                 1/1     Running   0          5m
argocd-repo-server-1                 1/1     Running   0          5m
argocd-controller-0                  1/1     Running   0          5m
argocd-controller-1                  1/1     Running   0          5m
argocd-redis-0                       1/1     Running   0          5m
argocd-postgresql-0                  1/1     Running   0          5m

๐Ÿ”น 3. Argo CD ์žฅ์•  ๋Œ€์‘ ์ „๋žต

โœ… 1๏ธโƒฃ API ์„œ๋ฒ„ ๋‹ค์šด ์‹œ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•
โœ” HA ๋ชจ๋“œ์—์„œ๋Š” ๋‹ค๋ฅธ API ์„œ๋ฒ„๊ฐ€ ๊ณ„์† ์šด์˜๋˜๋ฏ€๋กœ ์ž๋™ ๋ณต๊ตฌ๋จ
โœ” ํ•˜์ง€๋งŒ, ๋ชจ๋“  API ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ๋ณต๊ตฌ

kubectl rollout restart deployment argocd-server -n argocd

 

โœ… 2๏ธโƒฃ ์ปจํŠธ๋กค๋Ÿฌ ๋‹ค์šด ์‹œ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•

kubectl rollout restart deployment argocd-application-controller -n argocd

 

โœ… 3๏ธโƒฃ ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„ ๋‹ค์šด ์‹œ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•

kubectl rollout restart deployment argocd-repo-server -n argocd

 

โœ… 4๏ธโƒฃ PostgreSQL ๋˜๋Š” Redis ์žฅ์•  ๋ฐœ์ƒ ์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•


โœ” Redis ์žฅ์•  ๋ฐœ์ƒ ์‹œ:

kubectl rollout restart statefulset argocd-redis -n argocd

 

โœ” PostgreSQL ์žฅ์•  ๋ฐœ์ƒ ์‹œ:

kubectl rollout restart statefulset argocd-postgresql -n argocd

๐Ÿ”น 4. Argo CD HA ์šด์˜ ์‹œ ๊ณ ๋ คํ•  ์ 

โœ… 1๏ธโƒฃ HPA(Horizontal Pod Autoscaler) ์ ์šฉํ•˜์—ฌ ์ž๋™ ํ™•์žฅ
โœ” API ์„œ๋ฒ„ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๋ฉด ์ž๋™ ํ™•์žฅํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ

kubectl autoscale deployment argocd-server --cpu-percent=50 --min=2 --max=5 -n argocd

 

โœ… 2๏ธโƒฃ Argo CD ๋กœ๊ทธ ๋ฐ ์ด๋ฒคํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง
โœ” Prometheus ๋ฐ Grafana๋ฅผ ํ™œ์šฉํ•˜์—ฌ API ์„œ๋ฒ„ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”ํŠธ๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง
โœ” Loki๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ ๋ถ„์„ ์ˆ˜ํ–‰

 

โœ… 3๏ธโƒฃ ์šด์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค ์„ ํƒ
โœ” ReadWriteMany(RWX) ์ง€์› ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘ Pod ๊ฐ„ ๊ณต์œ  ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์„ฑ

 

โœ… 4๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… ๋ฐ ๋ณต์› ์ „๋žต
โœ” PostgreSQL ์‚ฌ์šฉ ์‹œ ์ •๊ธฐ์ ์ธ ๋ฐฑ์—… ๋ฐ ๋ณต์› ํ…Œ์ŠคํŠธ ํ•„์ˆ˜
โœ” pg_dump๋ฅผ ํ™œ์šฉํ•œ ๋ฐฑ์—… ์˜ˆ์ œ

pg_dump -h <DB_HOST> -U <DB_USER> -d argocd > argocd_backup.sql

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

๐ŸŸข Argo CD HA ๋ชจ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด API ์„œ๋ฒ„, ์ปจํŠธ๋กค๋Ÿฌ, ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์„œ๋ฒ„๋ฅผ ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค๋กœ ์šด์˜ ๊ฐ€๋Šฅ
๐ŸŸข Helm์„ ํ™œ์šฉํ•˜์—ฌ Argo CD๋ฅผ HA ๋ชจ๋“œ๋กœ ๋ฐฐํฌํ•˜๊ณ  Redis, PostgreSQL๊ณผ ์—ฐ๋™ํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅ
๐ŸŸข Argo CD ์žฅ์•  ๋ฐœ์ƒ ์‹œ kubectl rollout restart ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ ์†ํ•˜๊ฒŒ ๋ณต๊ตฌ ๊ฐ€๋Šฅ
๐ŸŸข ์šด์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” ์ž๋™ ํ™•์žฅ(HPA), ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ์ „๋žต์„ ๊ณ ๋ คํ•ด์•ผ ์•ˆ์ •์ ์ธ ์šด์˜ ๊ฐ€๋Šฅ

 

728x90