Короткий ответ
Helm chart — это упакованный набор шаблонов Kubernetes-манифестов с метаданными; values.yaml задаёт настраиваемые параметры по умолчанию (например, количество реплик, образ), а templates/ содержит Go-шаблоны манифестов, которые Helm рендерит, подставляя значения из values, в итоговые YAML для применения в кластер.
Как это работает подробнее
при helm install/helm upgrade Helm объединяет значения из values.yaml чарта, файлов -f custom-values.yaml и флагов --set (по возрастанию приоритета), рендерит шаблоны из templates/ с этими значениями через Go template engine и применяет получившиеся манифесты в кластер, сохраняя релиз как отдельный объект (Secret) для истории.
Пример кода
playbook.yml
# values.yaml
replicaCount: 2
image:
repository: myapp
tag: "1.4.0"
# templates/deployment.yaml (фрагмент)
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"Что использовать на практике
- Практика. один и тот же chart переиспользуется для разных окружений за счёт разных values-файлов (
values-dev.yaml,values-prod.yaml), без изменения самих шаблонов; это аналог "модуля" в Terraform, но для Kubernetes-манифестов.
Подводные камни
- Ошибка. хардкодить значения прямо в templates вместо вынесения их в values (это убивает переиспользуемость); не указывать значения по умолчанию для обязательных параметров, из-за чего chart ломается при install без явного
-f.