위에 Go template 깐 YAML
Helm 은 Kubernetes 의 패키지 매니저야. chart 는 YAML template 을 담은 디렉토리고. helm install 이 그 template 에 values.yaml 을 끼워 넣어 렌더한 다음 결과를 클러스터에 적용해. 바닥에 깔린 건 결국 똑같은 K8s manifest 야. 중간에 낀 templating 층 덕분에 chart 하나로 dev, staging, prod 에 서로 다른 값을 넣어 배포할 수 있는 거지.
Chart 레이아웃
Chart.yaml— chart 자체의 메타데이터야.values.yaml— 기본값을 모아둔 곳이자 이 chart 의 API 야.templates/—{{ .Values.x }}가 들어간 YAML template 들이 사는 자리고.charts/— 딸려 오는 sub-chart 들이야.
String quoting 함정
Helm template 이 뱉는 건 그냥 텍스트고, 그걸 YAML 이 다시 읽어서 타입을 매겨. 그래서 template 이 따옴표 없는 값을 찍으면 YAML 이 그 자리에서 타입을 새로 정해버려. port 가 8000 일 때 {{ .Values.port }} 는, K8s 가 문자열을 기대하는 자리에서도 정수 8000 이 돼. 렌더된 출력을 대놓고 따옴표로 감싸. {{ .Values.port | quote }} 를 쓰거나 아예 따옴표로 둘러싸면 돼.
'렌더된 YAML 이 가끔 무효 YAML' 문제: Helm template 은 깨진 YAML 을 만들어낼 수 있어. 줄바꿈이 빠지거나, 파이프가 겹치거나, 블록 들여쓰기가 어긋나는 식으로. CI 에서
helm template ./chart 를 돌린 다음 그 결과를 kubeconform 이나 yq . 로 흘려보내. 배포할 때가 아니라 렌더할 때 잡는 거야.