Kubernetes Tools/ArgoCD

[Ep.25] [Argo CD ์„ฑ๋Šฅ ์ตœ์ ํ™” #2] Argo CD์—์„œ Helm ์ฐจํŠธ์™€ Kustomize ์ตœ์ ํ™”

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

๐Ÿ”น Helm๊ณผ Kustomize๋ž€?

Helm๊ณผ Kustomize๋Š” Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
๋‘˜ ๋‹ค Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‚ฌ์šฉ ๋ฐฉ์‹์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

โœ… Helm๊ณผ Kustomize ๋น„๊ต

๊ธฐ๋Šฅ Helm Kustomize
ํ…œํ”Œ๋ฆฟํ™” ์ง€์› โœ… (values.yaml) โŒ (Patch ๋ฐฉ์‹)
ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ด€๋ฆฌ โœ… (Helm Values) โœ… (Overlay)
ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ โœ… (Helm Chart) โŒ (ํŒจํ‚ค์ง€ ์—†์Œ)
GitOps ์นœํ™”์  โœ… โœ…
Argo CD ์—ฐ๋™ โœ… โœ…

 

โœ… ์‚ฌ์šฉ ์ถ”์ฒœ ๊ฐ€์ด๋“œ

โœ” HelmํŒจํ‚ค์ง€ ํ˜•ํƒœ๋กœ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ๋•Œ ์ ํ•ฉ
โœ” Kustomize → ๊ธฐ์กด YAML ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„ ์ฐจ์ด๋งŒ ๋ฐ˜์˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ ํ•ฉ


๐Ÿ”น 1. Argo CD์—์„œ Helm์„ ํ™œ์šฉํ•œ ๋ฐฐํฌ

Helm์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Chart ํ˜•ํƒœ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Argo CD๋Š” Helm์„ ๋„ค์ดํ‹ฐ๋ธŒํ•˜๊ฒŒ ์ง€์›ํ•˜๋ฉฐ, GitOps ๋ฐฉ์‹์œผ๋กœ Git ์ €์žฅ์†Œ์˜ Helm ์ฐจํŠธ๋ฅผ ์ฝ์–ด์™€ ์ž๋™ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Helm์„ ์‚ฌ์šฉํ•œ Argo CD Application ๋ฆฌ์†Œ์Šค ์˜ˆ์ œ

apiVersion: argoproj.io/v1alpha1  # Argo CD์˜ API ๋ฒ„์ „
kind: Application  # Argo CD์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
metadata:
  name: example-app  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
  namespace: argocd  # Argo CD ๋„ค์ž„์ŠคํŽ˜์ด์Šค
spec:
  project: default  # Argo CD์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ง€์ •

  source:
    repoURL: https://github.com/example/repo.git  # Git ์ €์žฅ์†Œ URL
    targetRevision: main  # ์‚ฌ์šฉํ•  Git ๋ธŒ๋žœ์น˜
    path: helm/example-app  # Helm ์ฐจํŠธ๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ๋กœ
    helm:
      releaseName: example-app  # Helm ๋ฆด๋ฆฌ์Šค ์ด๋ฆ„
      valueFiles:
        - values.yaml  # ๊ธฐ๋ณธ ๊ฐ’ ํŒŒ์ผ
        - values-prod.yaml  # ์šด์˜ ํ™˜๊ฒฝ ๊ฐ’ ํŒŒ์ผ ์ถ”๊ฐ€

  destination:
    server: https://kubernetes.default.svc  # ๋ฐฐํฌํ•  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ
    namespace: example-app  # ๋ฐฐํฌ๋  ๋„ค์ž„์ŠคํŽ˜์ด์Šค

  syncPolicy:
    automated:
      prune: true  # Git์—์„œ ์‚ญ์ œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ Kubernetes์—์„œ๋„ ์ž๋™ ์‚ญ์ œ
      selfHeal: true  # Kubernetes ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ Git ์ƒํƒœ๋กœ ์ž๋™ ๋ณต๊ตฌ

 

โœ… ์„ค๋ช…:

  • source.repoURL → Helm ์ฐจํŠธ๊ฐ€ ์ €์žฅ๋œ Git ์ €์žฅ์†Œ
  • source.path → Git ์ €์žฅ์†Œ ๋‚ด์—์„œ Helm ์ฐจํŠธ๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ๋กœ
  • helm.releaseName → Helm ๋ฆด๋ฆฌ์Šค ์ด๋ฆ„ ์„ค์ •
  • helm.valueFiles → ์—ฌ๋Ÿฌ ๊ฐœ์˜ Values ํŒŒ์ผ์„ ์ ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ฐ€๋Šฅ
  • syncPolicy.automated → ์ž๋™ ๋ฐฐํฌ ๋ฐ Self-Healing ํ™œ์„ฑํ™”

โœ… Helm ์ฐจํŠธ ๋ฐฐํฌ ํ™•์ธ:

argocd app get example-app

 

โœ… Helm ์ฐจํŠธ ๋™๊ธฐํ™” ์‹คํ–‰:

argocd app sync example-app

๐Ÿ”น 2. Argo CD์—์„œ Kustomize๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ

Kustomize๋Š” ๊ธฐ๋ณธ YAML ํŒŒ์ผ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„๋กœ ํ•„์š”ํ•œ ์„ค์ •๋งŒ Patch ๋ฐฉ์‹์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

โœ… Kustomize๋ฅผ ์‚ฌ์šฉํ•œ Argo CD Application ๋ฆฌ์†Œ์Šค ์˜ˆ์ œ

apiVersion: argoproj.io/v1alpha1  # Argo CD์˜ API ๋ฒ„์ „
kind: Application  # Argo CD์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
metadata:
  name: example-app  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
  namespace: argocd  # Argo CD ๋„ค์ž„์ŠคํŽ˜์ด์Šค
spec:
  project: default  # Argo CD์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ง€์ •

  source:
    repoURL: https://github.com/example/repo.git  # Git ์ €์žฅ์†Œ URL
    targetRevision: main  # ์‚ฌ์šฉํ•  Git ๋ธŒ๋žœ์น˜
    path: kustomize/overlays/prod  # Kustomize ์˜ค๋ฒ„๋ ˆ์ด(์šด์˜ ํ™˜๊ฒฝ)

  destination:
    server: https://kubernetes.default.svc  # ๋ฐฐํฌํ•  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ
    namespace: example-app  # ๋ฐฐํฌ๋  ๋„ค์ž„์ŠคํŽ˜์ด์Šค

  syncPolicy:
    automated:
      prune: true  # Git์—์„œ ์‚ญ์ œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ Kubernetes์—์„œ๋„ ์‚ญ์ œ
      selfHeal: true  # Kubernetes ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ Git ์ƒํƒœ๋กœ ์ž๋™ ๋ณต๊ตฌ

 

โœ… ์„ค๋ช…:

  • source.path → Git ์ €์žฅ์†Œ ๋‚ด์—์„œ Kustomize ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ๋กœ
  • syncPolicy.automated → ์ž๋™ ๋ฐฐํฌ ๋ฐ Self-Healing ํ™œ์„ฑํ™”

โœ… Kustomize ์ ์šฉ๋œ ๋ฐฐํฌ ํ™•์ธ:

argocd app get example-app

 

โœ… Kustomize ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™” ์‹คํ–‰:

argocd app sync example-app

๐Ÿ”น 3. Helm๊ณผ Kustomize๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

Helm๊ณผ Kustomize๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ Helm ์ฐจํŠธ์˜ ๊ธฐ๋ณธ ์„ค์ •์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„๋กœ ์ถ”๊ฐ€์ ์ธ ์„ค์ •์„ ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Helm + Kustomize๋ฅผ ํ™œ์šฉํ•œ Argo CD Application ๋ฆฌ์†Œ์Šค ์˜ˆ์ œ

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

  source:
    repoURL: https://github.com/example/repo.git
    targetRevision: main
    path: kustomize/overlays/prod  # Kustomize๊ฐ€ ์ ์šฉ๋œ Helm ์ฐจํŠธ ์œ„์น˜
    helm:
      releaseName: example-app
      valueFiles:
        - values.yaml  # ๊ธฐ๋ณธ Helm values ํŒŒ์ผ

  destination:
    server: https://kubernetes.default.svc
    namespace: example-app

  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:

  • source.path → Kustomize ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์ ์šฉ๋œ Helm ์ฐจํŠธ์˜ ์œ„์น˜
  • helm.valueFiles → Helm์˜ ํŒจํ‚ค์ง• ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๋ฉด์„œ Kustomize๋กœ ์ถ”๊ฐ€์ ์ธ ๋ณ€๊ฒฝ ์ ์šฉ

โœ… ๋ฐฐํฌ ๋™๊ธฐํ™” ์‹คํ–‰:

argocd app sync example-app

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

๐ŸŸข Helm์€ ํŒจํ‚ค์ง•๋œ ํ˜•ํƒœ๋กœ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, ํ™˜๊ฒฝ๋ณ„ ์„ค์ •์„ Values ํŒŒ์ผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ
๐ŸŸข Kustomize๋Š” ๊ธฐ์กด YAML ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„๋กœ ํ•„์š”ํ•œ ์„ค์ •๋งŒ Patch ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์ ํ•ฉํ•จ
๐ŸŸข Argo CD๋Š” Helm๊ณผ Kustomize๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, GitOps ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ ๊ฐ€๋Šฅ
๐ŸŸข Helm๊ณผ Kustomize๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด Helm์˜ ํŒจํ‚ค์ง• ๊ธฐ๋Šฅ๊ณผ Kustomize์˜ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ธฐ๋Šฅ์„ ๋™์‹œ์— ํ™œ์šฉ ๊ฐ€๋Šฅ

 

728x90