Commands
Kubernetes

helm template: Рендер шаблонов чарта без деплоя: отладка, конкретный файл

Рендер шаблонов чарта без деплоя: отладка, конкретный файл

Вот шпаргалка по helm template, которую я сам использую для отладки и проверки чартов перед деплоем.

Базовый синтаксис

Команда рендерит итоговые манифесты из шаблонов Helm-чарта, но не отправляет их в кластер. Это позволяет проверить, что генерирует ваш чарт.

helm template my-release ./my-chart --namespace=production
  • my-release — имя релиза, которое подставляется в шаблоны как {{ .Release.Name }}.
  • ./my-chart — путь к директории с чартом.
  • --namespace=production — устанавливает namespace для рендеринга. Важно: это влияет на значения .Release.Namespace и .Values, если в values.yaml есть ветки по namespace.

На выходе вы получаете готовые YAML-манифесты, которые можно сохранить в файл (> manifests.yaml) или передать дальше по конвейеру.

Полезные флаги

--values и --set — подстановка кастомных значений Используйте, чтобы проверить чарт с другими параметрами, не редактируя values.yaml.

helm template my-app ./chart --values=overrides/prod.yaml --set=image.tag=v1.2.3

Это проверяет, как чарт сработает с продакшен-конфигурацией и конкретным тегом образа.

--debug — отладка шаблонов Показывает не только итоговые манифесты, но и отладочную информацию: какие файлы шаблонов были обработаны и какие значения использовались. Незаменим, когда шаблон рендерит пустой результат или не то, что ожидалось.

helm template my-app ./chart --debug

-s (или --show-only) — рендер конкретного файла Когда в чарте много манифестов, а нужно проверить только один (например, ConfigMap).

helm template my-app ./chart -s templates/configmap.yaml

Типичные сценарии

1. Проверка рендеринга перед деплоем в CI/CD Вместо прямого helm upgrade сначала рендерим шаблоны и валидируем их через kubeval или другой линтер.

helm template my-app ./chart --values=env/prod.yaml > rendered.yaml
kubeval --strict rendered.yaml

Если линтер найдёт ошибку, пайплайн упадёт до деплоя.

2. Отладка сложного шаблона с условиями Когда в шаблоне используются {{- if .Values.feature.enabled }}, бывает непонятно, почему ресурс не создаётся. Запускаем с --debug и смотрим, какое значение пришло в условие.

helm template my-app ./chart --set=feature.enabled=true --debug -s templates/job.yaml

Частые ошибки

Игнорирование зависимостей (dependencies) Если в Chart.yaml указаны dependencies, helm template по умолчанию не скачивает и не рендерит их. Нужно предварительно выполнить helm dependency update. Или использовать helm template с флагом --include-crds, если зависимости уже присутствуют в charts/.

Несоответствие namespace в шаблонах При рендере без указания --namespace используется значение default. Если в ваших шаблонах или values.yaml есть логика, зависящая от namespace (например, {{ .Values.prodSpecificValue }} при условии {{- if eq .Release.Namespace "prod" }}), результат может отличаться от ожидаемого. Всегда рендерьте с целевым namespace.