Kubernetes Tools/ArgoCD

[Ep.10] [Argo CD ์šด์˜ #5] Argo CD์—์„œ Helm๊ณผ Kustomize๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ ์ „๋žต

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

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

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


1๏ธโƒฃ Helm โ†’ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋ฐฉ์‹์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…œํ”Œ๋ฆฟํ™”ํ•˜์—ฌ ๋ฐฐํฌ
2๏ธโƒฃ Kustomize โ†’ ๊ธฐ์กด YAML์„ ์ˆ˜์ •ํ•˜์—ฌ ์˜ค๋ฒ„๋ ˆ์ด ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌ

 

Argo CD๋Š” Helm๊ณผ Kustomize๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด GitOps ๋ฐฉ์‹์˜ ๋ฐฐํฌ๋ฅผ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


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

โœ… 1. Helm์ด๋ž€?

Helm์€ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง•ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
Helm ์ฐจํŠธ(Chart)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, YAML ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํ…œํ”Œ๋ฆฟํ™”ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Helm์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • Chart โ†’ Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ํŒจํ‚ค์ง€
  • Values.yaml โ†’ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ํŒŒ์ผ
  • Templates/ โ†’ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ

โœ… 2. Argo CD์—์„œ Helm ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์˜ํ•˜๊ธฐ

Argo CD๋Š” Helm์„ ์ง€์›ํ•˜๋ฏ€๋กœ, Application CRD์—์„œ Helm ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฐจํŠธ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-helm-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/repo.git  # Helm ์ฐจํŠธ๊ฐ€ ์ €์žฅ๋œ Git ์ €์žฅ์†Œ
    targetRevision: main  # ์‚ฌ์šฉํ•  ๋ธŒ๋žœ์น˜ ๋˜๋Š” ํƒœ๊ทธ
    path: charts/example  # Helm ์ฐจํŠธ์˜ ์œ„์น˜
    helm:
      valueFiles:
        - values.yaml  # ๊ธฐ๋ณธ values ํŒŒ์ผ
        - values-production.yaml  # ์ถ”๊ฐ€์ ์ธ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •
  destination:
    server: https://kubernetes.default.svc
    namespace: example-namespace
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:

  • repoURL โ†’ Helm ์ฐจํŠธ๊ฐ€ ์ €์žฅ๋œ Git ์ €์žฅ์†Œ
  • path โ†’ Helm ์ฐจํŠธ๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ๋กœ
  • helm.valueFiles โ†’ ์—ฌ๋Ÿฌ ๊ฐœ์˜ values ํŒŒ์ผ์„ ์ ์šฉ ๊ฐ€๋Šฅ
  • syncPolicy โ†’ ์ž๋™ ๋™๊ธฐํ™” ๋ฐ Self-Healing ์„ค์ •

โœ… 3. Helm ์ฐจํŠธ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ Argo CD์— ๋ฐฐํฌํ•˜๊ธฐ

Argo CD CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Helm ์ฐจํŠธ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

argocd app create example-helm-app \
  --repo https://github.com/example/repo.git \
  --path charts/example \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace example-namespace \
  --helm-set replicaCount=3

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

โœ… 1. Kustomize๋ž€?

Kustomize๋Š” ๊ธฐ์กด์˜ Kubernetes YAML ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ„ ๋ฐฐํฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Kustomize๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ ํ…œํ”Œ๋ฆฟ ์—†์ด ๊ธฐ์กด YAML์„ ์˜ค๋ฒ„๋ ˆ์ด(Overlay) ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kustomize์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:

  • base/ โ†’ ๊ธฐ๋ณธ YAML ๋งค๋‹ˆํŽ˜์ŠคํŠธ
  • overlays/ โ†’ ํŠน์ • ํ™˜๊ฒฝ์— ๋งž๋Š” ์ปค์Šคํ…€ ์„ค์ •

โœ… 2. Argo CD์—์„œ Kustomize ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์˜ํ•˜๊ธฐ

Argo CD๋Š” Kustomize๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋ฏ€๋กœ, Application ๋ฆฌ์†Œ์Šค์—์„œ Kustomize ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-kustomize-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/repo.git  # Kustomize ํŒŒ์ผ์ด ์œ„์น˜ํ•œ Git ์ €์žฅ์†Œ
    targetRevision: main
    path: overlays/production  # ์‚ฌ์šฉํ•  Kustomize ์˜ค๋ฒ„๋ ˆ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ
    kustomize:
      namePrefix: prod-  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„์— 'prod-' ์ ‘๋‘์–ด ์ถ”๊ฐ€
  destination:
    server: https://kubernetes.default.svc
    namespace: example-namespace
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:

  • repoURL โ†’ Kustomize ํŒŒ์ผ์ด ์ €์žฅ๋œ Git ์ €์žฅ์†Œ
  • path โ†’ Kustomize ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ ์œ„์น˜ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ
  • kustomize.namePrefix โ†’ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„์— ์ ‘๋‘์–ด ์ถ”๊ฐ€

โœ… 3. Kustomize์˜ ์˜ค๋ฒ„๋ ˆ์ด ๊ตฌ์กฐ ์˜ˆ์ œ

1๏ธโƒฃ base/kustomization.yaml (๊ธฐ๋ณธ ์„ค์ •)

resources:
  - deployment.yaml
  - service.yaml

2๏ธโƒฃ overlays/production/kustomization.yaml (ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ์„ค์ •)

bases:
  - ../../base
patchesStrategicMerge:
  - production-deployment.yaml

3๏ธโƒฃ overlays/production/production-deployment.yaml (๋ฐฐํฌ ์„ค์ • ๋ณ€๊ฒฝ)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 5  # ๊ธฐ๋ณธ ์„ค์ •์—์„œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” 5๊ฐœ๋กœ ๋ณ€๊ฒฝ

โœ… 4. Kustomize๋ฅผ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™”

Argo CD CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kustomize ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

argocd app sync example-kustomize-app

๐Ÿ”น Helm vs Kustomize: ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ• ๊นŒ?

๋น„๊ต ํ•ญ๋ชฉ Helm Kustomize
์‚ฌ์šฉ ๋ฐฉ์‹ ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ํŒจํ‚ค์ง• YAML ์˜ค๋ฒ„๋ ˆ์ด ๋ฐฉ์‹
๋ณ€์ˆ˜ ๊ด€๋ฆฌ values.yaml ํŒŒ์ผ ์‚ฌ์šฉ ํŒจ์น˜ ํŒŒ์ผ์„ ์‚ฌ์šฉ
ํ™˜๊ฒฝ๋ณ„ ๋ฐฐํฌ values.production.yaml ๋“ฑ ์‚ฌ์šฉ overlays/production ๋””๋ ‰ํ„ฐ๋ฆฌ ์‚ฌ์šฉ
์œ ์—ฐ์„ฑ ๋†’์€ ์œ ์—ฐ์„ฑ (ํ…œํ”Œ๋ฆฟํ™” ๊ฐ€๋Šฅ) ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ, ๋ณ„๋„ ํ…œํ”Œ๋ฆฟ ์—†์Œ
Argo CD ์ง€์› ๊ธฐ๋ณธ ์ง€์› (helm: ์„ค์ •) ๊ธฐ๋ณธ ์ง€์› (kustomize: ์„ค์ •)

 

โœ… Helm์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

  • ๋ฐฐํฌ๊ฐ€ ๋ณต์žกํ•˜๊ณ , ํŒจํ‚ค์ง•๋œ ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋•Œ
  • ๋‹ค์ˆ˜์˜ ๊ฐ’(values.yaml)์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ

โœ… Kustomize๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

  • ๊ธฐ์กด YAML์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„ ์ฐจ์ด๋งŒ ์ ์šฉํ•ด์•ผ ํ•  ๋•Œ
  • ํ…œํ”Œ๋ฆฟ ์—†์ด ๊ฐ„๋‹จํ•œ ๋ณ€๊ฒฝ์„ ์ ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ

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

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

728x90