๐น 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 ๋ฐฐํฌ ์ ๋ต์ ์ต์ ํ ๊ฐ๋ฅ