차트 템플릿 작성 팁 (Template Tips)
차트 템플릿 작성 팁 (Chart Development Tips and Tricks)
템플릿은 Helm이 매니페스트를 만들 때 거치는 핵심 단계예요. Helm은 Go 템플릿을 쓰고, Go에 기본 내장된 함수 외에 여러 함수를 추가로 제공해요. 차트를 작성하다 보면 자주 마주치는 패턴을 중심으로 팁을 정리해 볼게요.
출처
Helm uses Go templates for templating your resource files. While Go ships several built-in functions, we have added many others. 출처: https://helm.sh/docs/howto/charts_tips_and_tricks/
템플릿 함수 알아 두기
include: 다른 템플릿(파셜)을 불러와 문자열을 만들어요. 파이프라인에 이어 붙일 수 있어요.required: 값이 비어 있으면 에러를 내서 차트 작성 시점에 누락을 바로 잡아 줘요.tpl: 문자열로 된 값 자체를 템플릿처럼 평가해요. values.yaml에 들어온 값에 템플릿 표현식을 쓸 수 있게 해 주죠.
문자열은 반드시 따옴표로 감싸고, 정수는 그대로 두는 게 관례예요. 따옴표 처리가 헷갈릴 땐 YAML보다는 JSON 문법이 포맷 문제를 덜 일으키는 경우가 있으니 그때만 JSON 스타일을 써요.
템플릿을 파셜로 분리하기
templates/ 디렉터리에서 언더스코어(_)로 시작하는 파일은 쿠버네티스 매니페스트를 출력하지 않아요. 그래서 재사용할 헬퍼 템플릿은 관례적으로 **_helpers.tpl**에 모아 두죠.
{{- define "mychart.labels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
리소스를 지우지 못하게 하기
helm.sh/resource-policy: keep 애노테이션은 helm uninstall·helm upgrade·helm rollback이 그 리소스를 지우지 못하게 막아요. 대신 그 리소스는 Helm이 더 이상 관리하지 않는 **고아(orphan)**가 된다는 걸 기억하세요.
Deployment 를 자동으로 롤하기
ConfigMap이나 Secret이 컨테이너 설정 파일로 주입되는 경우, 그 내용이 바뀌어도 Deployment 스펙 자체는 안 바뀌면 Pod이 다시 뜨지 않아요. 이럴 땐 설정의 해시를 Deployment 애노테이션에 넣는 방식으로 값이 바뀌면 롤이 일어나게 해요.
설치·업그레이드를 한 명령으로
helm upgrade에 --install을 붙이면 릴리스가 없으면 설치하고, 있으면 업그레이드해요.
$ helm upgrade --install <release name> --values <values file> <chart directory>
재현 가능한 차트 아카이브 만들기
기본적으로 차트를 압축할 때 파일의 수정 시각(mtime)이 아카이브에 남아서, 같은 차트를 다시 패키징해도 매번 다른 바이너리가 나와요. 환경변수 **SOURCE_DATE_EPOCH**를 설정하면 수정 시각을 고정해서 재현 가능한 아카이브를 만들 수 있어요. helm install·helm upgrade·helm dependency build·helm dependency update도 로컬 file:// 저장소에서 온 의존성을 다시 묶을 때 이 변수를 존중해요.