Kubernetes Tools/ArgoCD

[Ep.31] [Argo CD ์šด์˜ ์ตœ์ ํ™” #1] Argo CD๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌํ•˜๊ธฐ

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

๐Ÿ”น Argo CD ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๋ž€?

Argo CD๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ํ•˜๋‚˜์˜ Argo CD ์ธ์Šคํ„ด์Šค๋กœ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

โœ” ํ™˜๊ฒฝ ๋ถ„๋ฆฌ → Dev, Staging, Prod ๋“ฑ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ
โœ” ํ•˜๋‚˜์˜ Argo CD์—์„œ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ
โœ” GitOps ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋™๊ธฐํ™” ์ƒํƒœ ์œ ์ง€
โœ” ์šด์˜ ํšจ์œจ์„ฑ ํ–ฅ์ƒ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™” ๊ฐ•ํ™”

 

โœ… Argo CD ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ์‹

๋ฐฉ์‹ ์„ค๋ช…
Direct Cluster Mode Argo CD๊ฐ€ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ด€๋ฆฌ
App of Apps Pattern ์ค‘์•™ ๊ด€๋ฆฌ์šฉ Argo CD์—์„œ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์— Application์„ ๋ฐฐํฌ
ApplicationSet ์ž๋™์œผ๋กœ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์— ๋™์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ

๐Ÿ”น 1. Argo CD์—์„œ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

Argo CD๊ฐ€ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด, ์ถ”๊ฐ€ํ•  ํด๋Ÿฌ์Šคํ„ฐ์˜ Kubeconfig ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… 1๏ธโƒฃ Argo CD CLI๋ฅผ ์‚ฌ์šฉํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

argocd cluster add <context-name>

 

โœ… ์˜ˆ์ œ: staging-cluster๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด

argocd cluster add staging-cluster

 

โœ… ์„ค๋ช…:
โœ” <context-name> → kubectl config get-contexts ๋ช…๋ น์–ด๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
โœ” ์ถ”๊ฐ€ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” argocd cluster list ๋ช…๋ น์–ด๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

 

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

argocd cluster list

 

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

SERVER                          NAME              STATUS      VERSION
https://34.120.0.1              staging-cluster  Connected   v1.24
https://35.200.1.2              prod-cluster     Connected   v1.24

๐Ÿ”น 2. ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ Application ์˜ˆ์ œ

๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด, destination.server ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•˜๋Š” Argo CD Application ์˜ˆ์ œ

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: frontend-app
  namespace: argocd
spec:
  project: default

  source:
    repoURL: https://github.com/example/repo.git
    targetRevision: main
    path: k8s/frontend

  destination:
    server: https://34.120.0.1  # ๋ฐฐํฌํ•  ํด๋Ÿฌ์Šคํ„ฐ (staging-cluster)
    namespace: frontend

  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:
โœ” destination.server → argocd cluster list์—์„œ ํ™•์ธํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์ฃผ์†Œ ์ž…๋ ฅ
โœ” namespace: frontend → ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋  ๋„ค์ž„์ŠคํŽ˜์ด์Šค
โœ” syncPolicy.automated → Git ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋˜๋„๋ก ์„ค์ •

 

โœ… ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ์—๋„ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด destination.server๋งŒ ๋ณ€๊ฒฝ

destination:
  server: https://35.200.1.2  # prod-cluster๋กœ ๋ณ€๊ฒฝ

๐Ÿ”น 3. App of Apps ํŒจํ„ด์„ ํ™œ์šฉํ•œ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ

App of Apps ํŒจํ„ด์€ ์ค‘์•™์˜ Argo CD๊ฐ€ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

โœ… 1๏ธโƒฃ App of Apps๋ฅผ ์œ„ํ•œ Application ์˜ˆ์ œ

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: multi-cluster-apps
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/repo.git
    targetRevision: main
    path: apps

  destination:
    server: https://kubernetes.default.svc
    namespace: argocd

  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:
โœ” multi-cluster-apps → ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” Argo CD Application
โœ” repoURL, path → Git์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชฉ๋ก์ด ์ €์žฅ๋œ ๊ฒฝ๋กœ
โœ” destination.server: https://kubernetes.default.svc → Argo CD๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ด€๋ฆฌ

 

โœ… ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ณ„ Application์„ ์ •์˜ํ•œ YAML ์˜ˆ์ œ (apps/ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด)

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

 

โœ… ์„ค๋ช…:
โœ” multi-cluster-apps์—์„œ ๊ฐœ๋ณ„ ํด๋Ÿฌ์Šคํ„ฐ๋ณ„ Application์„ ๊ด€๋ฆฌ
โœ” ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„œ๋กœ ๋‹ค๋ฅธ destination.server๋ฅผ ๊ฐ€์ง

 

โœ… App of Apps ์ ์šฉ ๋ฐฉ๋ฒ•

argocd app sync multi-cluster-apps

 

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

argocd app list

๐Ÿ”น 4. Argo CD ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜ ์‹œ ๊ณ ๋ คํ•  ์ 

โœ… 1๏ธโƒฃ RBAC์„ ํ™œ์šฉํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ณ„ ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •
โœ” ๊ฐœ๋ฐœํŒ€/์šด์˜ํŒ€ ๋ณ„๋กœ ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ๋งŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก RBAC ์ ์šฉ ํ•„์š”
โœ” argocd-rbac-cm.yaml ์„ค์ •์—์„œ p, role:dev, applications, get, staging/*, allow ๋ฐฉ์‹์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ ‘๊ทผ ์ œํ•œ ๊ฐ€๋Šฅ

 

โœ… 2๏ธโƒฃ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์„ค์ •
โœ” Argo CD ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ VPN ์„ค์ • ๋˜๋Š” Kubernetes API ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ

 

โœ… 3๏ธโƒฃ App of Apps ํŒจํ„ด ์‚ฌ์šฉ ์‹œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ตฌ์กฐ ์ •๋ฆฌ
โœ” ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ, Git ์ €์žฅ์†Œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๊ฑฐ๋‚˜ apps/ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”


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

๐ŸŸข Argo CD๋Š” ์—ฌ๋Ÿฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ์ง€์›
๐ŸŸข App of Apps ํŒจํ„ด์„ ํ™œ์šฉํ•˜๋ฉด ์ค‘์•™ Argo CD์—์„œ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ผ๊ด„ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
๐ŸŸข RBAC์„ ํ™œ์šฉํ•˜์—ฌ ํŒ€๋ณ„๋กœ ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œํ•œ ๊ฐ€๋Šฅ
๐ŸŸข ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋ฐ GitOps ๋ฐฉ์‹์œผ๋กœ ์„ค์ •์„ ์œ ์ง€ํ•˜์—ฌ ์šด์˜์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Œ

728x90