Kubernetes Tools/ArgoCD

[Ep.22] [Argo CD ๋ณด์•ˆ & ํ™•์žฅ #2] Argo CD HA(๊ณ ๊ฐ€์šฉ์„ฑ) ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

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

๐Ÿ”น ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability, HA)์ด๋ž€?

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

 

โœ… ๊ณ ๊ฐ€์šฉ์„ฑ ๊ตฌ์„ฑ ์‹œ ๊ธฐ๋Œ€ ํšจ๊ณผ


โœ” ๋‹จ์ผ ์žฅ์•  ์ง€์ (Single Point of Failure, SPOF) ์ œ๊ฑฐ
โœ” ๋ถ€ํ•˜ ๋ถ„์‚ฐ(Load Balancing)์œผ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ
โœ” ์ž๋™ ๋ณต๊ตฌ(Self-Healing) ๋ฐ ๋น ๋ฅธ ์žฅ์•  ๋Œ€์‘ ๊ฐ€๋Šฅ


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

Argo CD HA(๊ณ ๊ฐ€์šฉ์„ฑ) ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
Argo CD API Server API ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  UI ๋ฐ CLI์™€ ํ†ต์‹ 
Application Controller Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ
Repo Server Git ์ €์žฅ์†Œ์—์„œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์„œ๋ฒ„
Redis ์ƒํƒœ ์ €์žฅ ๋ฐ ์บ์‹ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ
PostgreSQL Argo CD์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

 

โœ… Argo CD HA ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ

graph LR
  A[User CLI / UI] -->|API Requests| B(Argo CD API Server)
  B -->|State Storage| C[(PostgreSQL Database)]
  B -->|Cache| D[(Redis)]
  B -->|Sync Operations| E(Application Controller)
  E -->|Fetch Configs| F(Repo Server)
  E -->|Deploy Applications| G(Kubernetes Cluster)
  B -->|Load Balancer| H[Ingress / Service]

๐Ÿ”น Argo CD HA ๋ชจ๋“œ ํ™œ์„ฑํ™”

๊ธฐ๋ณธ์ ์œผ๋กœ Argo CD๋Š” ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, Helm์„ ์‚ฌ์šฉํ•˜์—ฌ HA ๋ชจ๋“œ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… 1. Helm์„ ์‚ฌ์šฉํ•˜์—ฌ Argo CD HA ๋ชจ๋“œ ๋ฐฐํฌ

helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm install argocd argo/argo-cd --namespace argocd --create-namespace \
  --set controller.replicas=2 \
  --set repoServer.replicas=2 \
  --set redis-ha.enabled=true \
  --set server.replicas=2 \
  --set dex.replicas=2

 

โœ… ์„ค๋ช…:
โœ” controller.replicas=2 → Application Controller๋ฅผ 2๊ฐœ ์‹คํ–‰ํ•˜์—ฌ ์žฅ์•  ๋Œ€๋น„
โœ” repoServer.replicas=2 → Git ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” Repo Server๋ฅผ 2๊ฐœ ์‹คํ–‰
โœ” redis-ha.enabled=true → Redis๋ฅผ ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ๋ชจ๋“œ๋กœ ์‹คํ–‰
โœ” server.replicas=2 → API ์„œ๋ฒ„๋ฅผ 2๊ฐœ ์‹คํ–‰ํ•˜์—ฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ

 

โœ… ์„ค์น˜ ํ™•์ธ:

kubectl get pods -n argocd
NAME                                    READY   STATUS    RESTARTS   AGE
argocd-application-controller-0         1/1     Running   0          2m
argocd-application-controller-1         1/1     Running   0          2m
argocd-repo-server-0                    1/1     Running   0          2m
argocd-repo-server-1                    1/1     Running   0          2m
argocd-redis-ha-server-0                1/1     Running   0          2m
argocd-redis-ha-server-1                1/1     Running   0          2m
argocd-server-0                         1/1     Running   0          2m
argocd-server-1                         1/1     Running   0          2m

โœ… 2. Redis HA ๊ตฌ์„ฑ (์„ธ์…˜ ์œ ์ง€ ๋ฐ ์บ์‹ฑ ๊ฐœ์„ )

Argo CD๋Š” Redis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ์…˜ ๋ฐ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ, ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•ด Redis HA ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

โœ… Redis HA ํ™œ์„ฑํ™”:

kubectl edit configmap argocd-cm -n argocd

 

โœ… ์„ค์ • ์ถ”๊ฐ€:

data:
  redis.enabled: "true"

 

โœ… ์ ์šฉ ํ›„ Redis ์ƒํƒœ ํ™•์ธ:

kubectl get pods -n argocd -l app.kubernetes.io/name=redis-ha

โœ… 3. PostgreSQL ์™ธ๋ถ€ DB ์—ฐ๋™ (์„ ํƒ ์‚ฌํ•ญ)

๊ธฐ๋ณธ์ ์œผ๋กœ Argo CD๋Š” ๋‚ด๋ถ€ SQLite๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, HA ํ™˜๊ฒฝ์—์„œ๋Š” PostgreSQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

 

โœ… PostgreSQL ์—ฐ๋™์„ ์œ„ํ•œ Secret ์ƒ์„ฑ

apiVersion: v1
kind: Secret
metadata:
  name: argocd-postgres-config
  namespace: argocd
stringData:
  host: "postgres.example.com"
  database: "argocd"
  username: "argocd"
  password: "securepassword"

 

โœ… PostgreSQL ์—ฐ๊ฒฐ ์„ค์ • (argocd-cm ์ˆ˜์ •)

data:
  configManagementPlugins: |
    db.host=postgres.example.com
    db.name=argocd
    db.user=argocd
    db.passwordFromSecret=argocd-postgres-config

 

โœ… PostgreSQL ์ ์šฉ ํ›„ Argo CD ์žฌ์‹œ์ž‘:

kubectl rollout restart deployment argocd-server -n argocd

๐Ÿ”น Argo CD HA ๋ชจ๋“œ ์šด์˜ ํŒ

โœ… 1. Ingress๋ฅผ ํ™œ์šฉํ•œ API ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ถ„์‚ฐ
HA ํ™˜๊ฒฝ์—์„œ๋Š” Argo CD API ์„œ๋ฒ„ ์•ž์— Ingress ๋˜๋Š” LoadBalancer๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

โœ… 2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ ๋กœ๊น… ํ™œ์„ฑํ™”
Argo CD ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋™์ž‘์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl logs -f -l app.kubernetes.io/name=argocd-application-controller -n argocd

 

โœ… 3. ์ƒํƒœ ํ™•์ธ ๋ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
HA ํ™˜๊ฒฝ์—์„œ Argo CD ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

kubectl get pods -n argocd -o wide
kubectl get svc -n argocd
kubectl get endpoints -n argocd

๐Ÿ”น Argo CD HA ์šด์˜์„ ์œ„ํ•œ CLI ๋ช…๋ น์–ด ์ •๋ฆฌ

๋ช…๋ น์–ด ์„ค๋ช…
kubectl get pods -n argocd Argo CD ์‹คํ–‰ ์ƒํƒœ ํ™•์ธ
kubectl get svc -n argocd Argo CD ์„œ๋น„์Šค ๋ชฉ๋ก ํ™•์ธ
kubectl edit configmap argocd-cm -n argocd Argo CD ์„ค์ • ์ˆ˜์ •
kubectl rollout restart deployment argocd-server -n argocd Argo CD ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
kubectl logs -f -l app.kubernetes.io/name=argocd-application-controller -n argocd ์ปจํŠธ๋กค๋Ÿฌ ๋กœ๊ทธ ํ™•์ธ

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

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

728x90