Kubernetes Tools/ArgoCD

[Ep.15] [Argo CD ์šด์˜ #10] Argo CD๋ฅผ ํ™œ์šฉํ•œ ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ(Multi-Cluster) ๋ฐฐํฌ ์ „๋žต

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

๐Ÿ”น Argo CD์—์„œ ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ๋ž€?

Argo CD๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ(Multi-Cluster)๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ Argo CD ์ธ์Šคํ„ด์Šค์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋™์‹œ์— ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

โœ” Dev, Staging, Prod ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ ๊ฐ€๋Šฅ
โœ” ๋‹ค์–‘ํ•œ ์ง€์—ญ(Region)์— ๋ฐฐํฌํ•˜์—ฌ ๊ฐ€์šฉ์„ฑ์„ ๋†’์ž„
โœ” ํ…Œ๋„ŒํŠธ๋ณ„(๊ฐ ํŒ€๋ณ„) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
โœ” ํ•˜๋‚˜์˜ Argo CD์—์„œ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ์–ด ๊ฐ€๋Šฅ


๐Ÿ”น Argo CD ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ๋ฐฉ์‹

Argo CD์—์„œ ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋ฐฉ์‹ ์„ค๋ช…  ์žฅ์   ๋‹จ์ 
์‹ฑ๊ธ€ ์ปจํŠธ๋กค๋Ÿฌ (Single Argo CD, Multi-Cluster) ํ•˜๋‚˜์˜ Argo CD๊ฐ€ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ ๋„คํŠธ์›Œํฌ ์žฅ์•  ์‹œ ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ ์ ‘๊ทผ ๋ถˆ๊ฐ€
ํด๋Ÿฌ์Šคํ„ฐ๋ณ„ ๋…๋ฆฝ ์šด์˜ (Argo CD Per Cluster) ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ๋งˆ๋‹ค Argo CD๋ฅผ ๋ณ„๋„๋กœ ์šด์˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ์™„์ „ํ•œ ๋…๋ฆฝ์„ฑ ํ™•๋ณด ๊ด€๋ฆฌํ•  Argo CD ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€

โœ… ์‹ฑ๊ธ€ ์ปจํŠธ๋กค๋Ÿฌ ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”์ฒœ๋˜๋ฉฐ, ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ Argo CD์—์„œ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋™์‹œ ์ œ์–ด ๊ฐ€๋Šฅ


๐Ÿ”น Argo CD์—์„œ ์ƒˆ๋กœ์šด ํด๋Ÿฌ์Šคํ„ฐ ๋“ฑ๋กํ•˜๊ธฐ

โœ… 1. ํ˜„์žฌ ๋“ฑ๋ก๋œ ํด๋Ÿฌ์Šคํ„ฐ ํ™•์ธ

argocd cluster list

 

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

SERVER                          NAME      STATUS
https://kubernetes.default.svc  in-cluster   Successful

์œ„์™€ ๊ฐ™์ด ๊ธฐ๋ณธ์ ์œผ๋กœ Argo CD๋Š” ์ž์‹ ์ด ๋ฐฐํฌ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋งŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€์ ์ธ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๋ ค๋ฉด ๊ด€๋ฆฌํ•  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ Kubeconfig ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ… 2. ์ƒˆ๋กœ์šด ํด๋Ÿฌ์Šคํ„ฐ ๋“ฑ๋กํ•˜๊ธฐ

๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ Argo CD์— ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด, ๋จผ์ € ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ kubeconfig ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

argocd cluster add <CONTEXT_NAME>

 

โœ… ์˜ˆ์ œ (ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ staging-cluster์ผ ๊ฒฝ์šฐ)

argocd cluster add staging-cluster

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ์— argocd-manager ์„œ๋น„์Šค ๊ณ„์ •์ด ์ƒ์„ฑ๋˜๊ณ ,
Argo CD๊ฐ€ ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

 

โœ… ๋“ฑ๋ก๋œ ํด๋Ÿฌ์Šคํ„ฐ ๋‹ค์‹œ ํ™•์ธ:

argocd cluster list

 

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

SERVER                          NAME             STATUS
https://kubernetes.default.svc  in-cluster      Successful
https://10.1.1.100:6443         staging-cluster Successful

์ด์ œ staging-cluster๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 3. ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

์ด์ œ Application ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ, ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-app-staging
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/repo.git
    targetRevision: main
    path: manifests
  destination:
    server: https://10.1.1.100:6443  # Staging ํด๋Ÿฌ์Šคํ„ฐ
    namespace: example-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:

  • destination.server → ํด๋Ÿฌ์Šคํ„ฐ์˜ API ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅ
  • destination.namespace → ๋ฐฐํฌํ•  ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ง€์ •
  • syncPolicy → ์ž๋™ ๋™๊ธฐํ™” ๋ฐ Self-Healing ํ™œ์„ฑํ™”

๐Ÿ”น Argo CD ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ ์‹œ ๊ณ ๋ คํ•  ์ 

โœ… 1. ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ํ•„์š”

  • Argo CD๊ฐ€ ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด, ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ API ์„œ๋ฒ„๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  • VPN, VPC Peering, Private Link ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ

โœ… 2. RBAC(Role-Based Access Control) ์„ค์ •

  • ํด๋Ÿฌ์Šคํ„ฐ๋ณ„๋กœ ๋ฐฐํฌ ๊ถŒํ•œ์„ ์ œ์–ดํ•˜๋ ค๋ฉด Argo CD RBAC์„ ํ™œ์šฉ
  • ํŠน์ • ํ”„๋กœ์ ํŠธ(Project)์—์„œ ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ๋กœ๋งŒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ

โœ… 3. GitOps ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ”„๋กœ๋น„์ €๋‹

  • Terraform, Crossplane ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ GitOps ๋ฐฉ์‹์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž๋™ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ

๐Ÿ”น Argo CD ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ CLI ๋ช…๋ น์–ด ์ •๋ฆฌ

๋ช…๋ น์–ด ์„ค๋ช…
argocd cluster list ๋“ฑ๋ก๋œ ํด๋Ÿฌ์Šคํ„ฐ ๋ชฉ๋ก ํ™•์ธ
argocd cluster add <CONTEXT_NAME> ์ƒˆ๋กœ์šด ํด๋Ÿฌ์Šคํ„ฐ ๋“ฑ๋ก
argocd cluster remove <CONTEXT_NAME> ํด๋Ÿฌ์Šคํ„ฐ ๋“ฑ๋ก ํ•ด์ œ
argocd app create <APP> ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ
argocd app sync <APP> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™” ์‹คํ–‰

 

โœ… ํด๋Ÿฌ์Šคํ„ฐ ์ œ๊ฑฐ:

argocd cluster remove staging-cluster

 

โœ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™”:

argocd app sync example-app-staging

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

๐ŸŸข Argo CD๋Š” ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ(Multi-Cluster) ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
๐ŸŸข ์‹ฑ๊ธ€ ์ปจํŠธ๋กค๋Ÿฌ ๋ฐฉ์‹๊ณผ ํด๋Ÿฌ์Šคํ„ฐ๋ณ„ ๋…๋ฆฝ ์šด์˜ ๋ฐฉ์‹ ์ค‘ ์šด์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” ์ „๋žต์„ ์„ ํƒํ•ด์•ผ ํ•จ
๐ŸŸข argocd cluster add ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , Application YAML์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง€์ • ๊ฐ€๋Šฅ
๐ŸŸข RBAC์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ํ”„๋กœ์ ํŠธ(Project)์—์„œ ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ๋กœ๋งŒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ
๐ŸŸข GitOps ๋ฐฉ์‹์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž๋™ํ™”ํ•˜๋ฉด ์šด์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Œ

 

728x90