π νλ‘λΉμ λ - custom Helm chart
π³οΈβπ [κΆκΈνμ ]
π[λͺ©μ°¨]
컀μ€ν Helm μ°¨νΈλ₯Ό μ¬μ©νλ μ΄μ λ νμ€ν, μ¬μ¬μ©μ±, μ΄μ ν¨μ¨μ±, κ·Έλ¦¬κ³ νκ²½μ λ§λ μ΅μ ν λλ¬Έ
| λͺ©μ /μ΄μ | μ€λͺ |
|---|---|
| νκ²½ λ§μΆ€ κ΅¬μ± | μ‘°μ§μ λ€μ΄λ° κ·μΉ, λΌλ²¨, μ΄λ Έν μ΄μ , 리μμ€ μ ν λ± λ΄λΆ μ μ± μ λ§μΆ μ€μ μ λ°μν μ μμ |
| λ°λ³΅ λ°°ν¬ μλν | λμΌν ꡬμ±μ μλΉμ€λ₯Ό μ¬λ¬ λ², μ¬λ¬ νκ²½(dev/stage/prod)μ λ°°ν¬ κ°λ₯ |
| νμ€νλ λ°°ν¬ λ°©μ | λͺ¨λ νμ΄ λμΌν νμμΌλ‘ λ°°ν¬λ₯Ό μ§ννλ―λ‘ μ΄μ λ° κ΄λ¦¬κ° μ¬μ |
| μ μ§λ³΄μ μ©μ΄ | ν λ² μμ±ν μ°¨νΈλ₯Ό μ¬λ¬ μλΉμ€μ 곡ν΅μΌλ‘ μ μ©νκ³ , λ²μ κ΄λ¦¬ λ° μ λ°μ΄νΈκ° μ¬μ |
| ν νλ¦Ών λ° μ¬μ¬μ©μ± | YAML μ€λ³΅ μμ΄ ν
νλ¦Ώ(_helpers.tpl)μ μ¬μ©νμ¬ κ΅¬μ‘°λ₯Ό κ°λ¨νκ² μ μ§ κ°λ₯ |
| GitOps λ° CI/CD ν΅ν© | ArgoCD, Flux, Jenkins λ±κ³Ό μ½κ² ν΅ν©λμ΄ λ°°ν¬ μλν ꡬν κ°λ₯ |
| 보μ λ° μ κ·Ό μ μ΄ | Secret, ConfigMap, ServiceAccount λ±μ ν΅ν© κ΄λ¦¬ν μ μμ΄ λ³΄μ ν΅μ κ° μ¬μ |
| μλνν° μ°¨νΈ νμ₯ | 곡μ Helm μ°¨νΈλ₯Ό ν¬ν¬ ν μΌλΆ 컀μ€ν°λ§μ΄μ§νμ¬ μ‘°μ§μ μ΅μ νλ ννλ‘ μ¬μ¬μ© κ°λ₯ |
HelmμΌλ‘ Custom Chartλ₯Ό λ§λλ κ³Όμ μ Kubernetes μ ν리μΌμ΄μ μ ν νλ¦Ώννμ¬ μμ½κ² λ°°ν¬νκ³ μ¬μ¬μ©ν μ μκ² ν΄μ£Όλ λ°©λ²μ΄λ€.
helm create mychart
μ΄ λͺ λ Ήμ μ€ννλ©΄ mychart/ λλ ν°λ¦¬κ° μμ±λκ³ , Helm Chartμ κΈ°λ³Έ κ΅¬μ‘°κ° μμ±λλ€
βββ Chart.yaml
βββ charts
βββ templates
β βββ NOTES.txt
β βββ _helpers.tpl
β βββ deployment.yaml
β βββ hpa.yaml
β βββ ingress.yaml
β βββ service.yaml
β βββ serviceaccount.yaml
β βββ tests
β βββ test-connection.yaml
βββ values.yaml
μ΄ νμΌμ Chartμ λ©νλ°μ΄ν°λ₯Ό μ μνλ€.
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
| μμ± | μ€λͺ |
|---|---|
apiVersion | Helm μ°¨νΈμ API λ²μ (μ: v2) νμ¬ Helm 3μμλ v2 μ¬μ© |
name | μ°¨νΈμ μ΄λ¦ λλ ν 리 μ΄λ¦κ³Ό λμΌνκ² μμ±λ¨ |
description | μ°¨νΈμ λν κ°λ¨ν μ€λͺ |
type | μ°¨νΈμ μ ν (μ νμ¬ν) μΌλ°μ μΌλ‘ μλ΅λλ©° application λλ library μ¬μ© κ°λ₯ |
version | μ°¨νΈμ λ²μ μ°¨νΈ μ체μ λ²μ μΌλ‘, ν¨ν€μ§ μ μ¬μ©λ¨ ( helm package) |
appVersion | λ°°ν¬λλ μ€μ μ ν리μΌμ΄μ
μ λ²μ μ: 컨ν μ΄λ μ΄λ―Έμ§μ λ²μ |
keywords | (μ νμ¬ν) Helm Hub λ±μμ κ²μ μ μ¬μ©ν ν€μλ 리μ€νΈ |
home | (μ νμ¬ν) νλ‘μ νΈ ννμ΄μ§ URL |
sources | (μ νμ¬ν) μμ€μ½λ μ μ₯μ URL λͺ©λ‘ |
maintainers | (μ νμ¬ν) μ°¨νΈ μ μ§λ³΄μμ λͺ©λ‘ μ΄λ¦, μ΄λ©μΌ λ± ν¬ν¨ κ°λ₯ |
icon | (μ νμ¬ν) μ°¨νΈμ μ¬μ©λ μμ΄μ½ μ΄λ―Έμ§ URL |
annotations | (μ νμ¬ν) ν€-κ° μμ μ£Όμ μ 보λ‘, CI/CD μλν λ±μμ μ¬μ©λ¨ |
dependencies | (μ νμ¬ν) λ€λ₯Έ μ°¨νΈμ λν μμ‘΄μ± μ μ (requirements.yaml λμ μ¬μ©) |
νμ μ dependencies νλλ μ¬κΈ°μ μΆκ°νμ¬ λ€λ₯Έ μ°¨νΈλ₯Ό μμ‘΄μ±μΌλ‘ ν¬ν¨ν μ μλ€.
μ΄ νμΌμ ν νλ¦Ώμ λκ²¨μ€ κΈ°λ³Έ λ³μ κ°μ μ μνλ€.
replicaCount: 2
image:
repository: nginx
tag: "1.21"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
μ΄ κ°λ€μ templates/ λ΄μ yaml νμΌλ€μμ {{ .Values.xxx }} ννλ‘ μ°Έμ‘°λλ€.
Helmμ ν΅μ¬μ μ΄ ν νλ¦Ώ νμΌλ€μ΄λ€. Kubernetes 리μμ€λ₯Ό Go ν νλ¦Ώ λ¬Έλ²μΌλ‘ μμ±νλ©°, values.yamlμμ μ μν κ°λ€μ μ°Έμ‘°νλ€.
μ: templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: 80
ν νλ¦Ώμ΄ μλλλ‘ μμ±λλμ§ νμΈνλ€.
helm template mychart
helm template mychart --values myvalues.yaml
helm install myrelease ./mychart
helm upgrade myrelease ./mychart
``
- μμ
``` bash
helm uninstall my-release-name
helm package mychart
.tgz ννμ ν¨ν€μ§κ° μμ±λμ΄ Helm repositoryμ μ λ‘λ
Helm Hub λλ νΉμ Helm 리ν¬μ§ν 리μμ μνλ Chartλ₯Ό λ€μ΄λ‘λνλ€.
helm pull <repo>/<chart-name> --untar
helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/nginx --untar
μλ₯Ό λ€μ΄ λ€μ΄λ‘λν nginx/ λλ ν 리λ λ€μκ³Ό κ°μ ꡬ쑰λ₯Ό κ°μ§ μ μλ€
nginx/
βββ Chart.yaml
βββ values.yaml
βββ templates/
β βββ deployment.yaml
β βββ service.yaml
β βββ ...
βββ ...
μμ κ°λ₯ν λΆλΆ
- values.yaml: κΈ°λ³Έ μ€μ κ° μμ (ν¬νΈ, μ΄λ―Έμ§, 리μμ€ λ±)
- templates/*.yaml: 리μμ€ ν νλ¦Ώ ꡬ쑰 μ체 μμ (env, volumeMounts μΆκ° λ±)
- Chart.yaml: Chart μ΄λ¦μ΄λ λ²μ λ±μ 컀μ€ν°λ§μ΄μ¦ν μ μμ
Chartλ₯Ό μ체μ μΌλ‘ κ΄λ¦¬νλ €λ©΄ Gitμ λ£λ κ²μ΄ μ’λ€.
git init
git add .
git commit -m "컀μ€ν°λ§μ΄μ§ν nginx Helm Chart μ΄κΈ° 컀λ°"
μλ Chart μ΄λ¦μ΄λ Release μ΄λ¦μ΄ κΈ°μ‘΄κ³Ό κ²ΉμΉμ§ μλλ‘ λ³κ²½νλ©΄ μμ νλ€.
# Chart.yaml
name: mynginx
version: 1.0.0
helm install mynginx ./nginx
helm upgrade mynginx ./nginx