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.