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