๐น 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์ ํ๊ฒฝ๋ณ ์ค์ ๊ธฐ๋ฅ์ ๋์์ ํ์ฉ ๊ฐ๋ฅ