TL;DR: В шаблонах Helm доступны 6 корневых объектов: Release (мета релиза), Values (пользовательские параметры), Chart (метаданные чарта), Files (доступ к файлам), Capabilities (возможности кластера), Template (текущий шаблон). Все данные в шаблоне доступны через {{ .ObjectName.Field }}.
Зачем это знать
Шаблоны Helm — это Go templates с доступом к контексту. Каждый .yaml в templates/ получает корневой объект . (dot), через который доступны все встроенные объекты. Без понимания этих объектов шаблоны превращаются в копипасту примеров из Stack Overflow — работает, но непонятно почему.
Корневой контекст
Внутри любого шаблона . (dot) — это корневой объект, содержащий все встроенные объекты:
Типичное использование: формирование уникальных имён ресурсов ({{ .Release.Name }}-component), чтобы несколько релизов одного чарта не конфликтовали в кластере.
Values — пользовательские параметры
Объединённые значения из нескольких источников (в порядке приоритета):
values.yaml в чарте (defaults)
Файл через -f custom-values.yaml
Параметры через --set key=value (наивысший приоритет)
# default — значение по умолчанию, если ключ не заданreplicas: {{ .Values.app.replicas | default 1 }}# required — шаблон не отрендерится без этого значенияimage: {{ required "app.image.repository is required" .Values.app.image.repository }}# Условный блок{{- if .Values.ingress.enabled }}apiVersion: networking.k8s.io/v1kind: Ingress# ...{{- end }}
Chart — метаданные из Chart.yaml
Содержимое файла Chart.yaml. Доступны все поля спецификации.
Примечание:.Chart.Version — версия чарта (пакета), .Chart.AppVersion — версия приложения. Они могут не совпадать: обновление values.yaml без изменения приложения бампит только Chart.Version.
Files — доступ к файлам чарта
Доступ к любым файлам внутри чарта, кроме: templates/, Chart.yaml, values.yaml, .helmignore.
Информация о возможностях Kubernetes-кластера, в который происходит установка. Позволяет адаптировать шаблоны под версию кластера.
Поле
Описание
.Capabilities.KubeVersion
Версия Kubernetes (v1.29.0)
.Capabilities.KubeVersion.Major
Мажорная версия (1)
.Capabilities.KubeVersion.Minor
Минорная версия (29)
.Capabilities.APIVersions
Список поддерживаемых API
.Capabilities.APIVersions.Has "api/v1"
Проверка конкретного API
.Capabilities.HelmVersion
Версия Helm
# Выбор apiVersion в зависимости от версии кластера{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" }}apiVersion: networking.k8s.io/v1{{- else }}apiVersion: networking.k8s.io/v1beta1{{- end }}kind: Ingress
# Использование CRD только если API доступен{{- if .Capabilities.APIVersions.Has "monitoring.coreos.com/v1" }}apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata: name: {{ .Release.Name }}-monitorspec: selector: matchLabels: app: {{ .Release.Name }}{{- end }}
Типичное использование: обратная совместимость чартов с разными версиями кластеров, условное создание ресурсов (ServiceMonitor только если Prometheus Operator установлен).
Template — информация о текущем шаблоне
Мета-информация о файле шаблона, который сейчас рендерится.