Kubernetes Tools/ArgoCD

[Ep.18] [Argo CD ๋ฐฐํฌ & ์ž๋™ํ™” #3] Argo CD์—์„œ Helm๊ณผ Kustomize๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”

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

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

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes) ํ™˜๊ฒฝ์—์„œ๋Š” YAML ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜์ง€๋งŒ,
๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ํ™˜๊ฒฝ๋ณ„(๊ฐœ๋ฐœ/์šด์˜), ๋ฒ„์ „๋ณ„ ์ฐจ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด

Helm๊ณผ Kustomize ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

โœ… Helm๊ณผ Kustomize์˜ ์—ญํ•  ๋น„๊ต

๊ธฐ๋Šฅ Helm  Kustomize
ํ…œํ”Œ๋ฆฟํ™” ์ง€์› O (๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) X
์˜ค๋ฒ„๋ ˆ์ด(ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ฐ€๋Šฅ) O (Values ํŒŒ์ผ ์‚ฌ์šฉ) O (Patch ์‚ฌ์šฉ)
ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ O (Chart Repository ์ง€์›) X
GitOps ์นœํ™”์  O O
Argo CD ์—ฐ๋™ O O

 

โœ… ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„๊นŒ?
โœ” Helm → ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ ์žฌ์‚ฌ์šฉ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ (ํŒจํ‚ค์ง€ ํ˜•ํƒœ๋กœ ๋ฐฐํฌ)
โœ” Kustomize → ๊ธฐ๋ณธ์ ์ธ YAML์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„ ์ฐจ์ด๋งŒ ์ ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ


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

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

โœ… 1. Argo CD์—์„œ Helm์„ ์‚ฌ์šฉํ•œ 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:
      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.valueFiles → ์—ฌ๋Ÿฌ ๊ฐœ์˜ Values ํŒŒ์ผ์„ ์ ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ฐ€๋Šฅ
  • syncPolicy.automated → ์ž๋™ ๋ฐฐํฌ ๋ฐ Self-Healing ํ™œ์„ฑํ™”

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

argocd app get example-app

 

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

argocd app sync example-app

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

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

โœ… 1. Argo CD์—์„œ Kustomize๋ฅผ ์‚ฌ์šฉํ•œ 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

๐Ÿ”น Argo CD์—์„œ Helm๊ณผ Kustomize๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

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

โœ… 1. Helm๊ณผ Kustomize๋ฅผ ์กฐํ•ฉํ•œ 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๋กœ ์ถ”๊ฐ€์ ์ธ ๋ณ€๊ฒฝ ์ ์šฉ

 

โœ… Helm + Kustomize ๊ธฐ๋ฐ˜ ๋ฐฐํฌ ํ™•์ธ:

argocd app get example-app

 

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

argocd app sync example-app

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

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

728x90