Values — это параметры, которыми управляется чарт. Здесь разобраны приоритеты, все способы передачи, типы данных, вложенность, шаблонизация, проверка схемы и отладка
Шаблоны чарта не содержат жёстко заданных значений. Вместо этого они обращаются к объекту .Values, например {{ .Values.replicaCount }}. Значения приходят из нескольких источников, и Helm объединяет их в один итоговый объект. Одно и то же приложение можно разворачивать в разных окружениях, меняя только values.
Если один и тот же ключ задан в нескольких местах, побеждает источник с большим приоритетом. От низкого к высокому:
# base.yaml задаёт replicaCount=2, prod.yaml задаёт 5, --set задаёт 7 helm upgrade web ./chart -f base.yaml -f prod.yaml --set replicaCount=7 # Итог: replicaCount = 7
helm show values ./chart (значения по умолчанию) с helm get values web --all (итог для релиза).
| Флаг | Что делает | Пример |
|---|---|---|
| -f, --values | Загрузить YAML-файл. Можно повторять. | -f values-prod.yaml |
| --set | Задать значение. Тип определяется автоматически. | --set replicaCount=3 |
| --set-string | Всегда строка, даже если похоже на число или bool. | --set-string build=0042 |
| --set-file | Содержимое файла как значение (удобно для сертификатов и скриптов). | --set-file tls.crt=./tls.crt |
| --set-json | Значение в формате JSON, включая объекты и массивы. | --set-json 'limits={"cpu":"500m"}' |
| --reuse-values | Взять значения предыдущей ревизии и поверх них применить новые. | helm upgrade web ./chart --reuse-values --set image.tag=2.0 |
| --reset-values | Игнорировать прежние значения релиза. | helm upgrade web ./chart --reset-values -f full.yaml |
--set port=8080 # число --set debug=true # bool --set name=null # null: удаляет ключ из итоговых values --set version=1.10 # число 1.1 (лишний ноль потеряется!) --set-string version=1.10 # строка "1.10" --set env[0].name=LOG # элемент массива --set env[0].value=debug
--set version=1.10 превращается в число 1.1. Для версий, кодов и идентификаторов, которые должны остаться строкой, всегда используйте --set-string или кавычки в YAML-файле.
# Запятая внутри значения экранируется обратной косой чертой --set 'hosts=a.example.com\,b.example.com' # Точка в имени ключа: экранируйте её --set 'annotations.kubernetes\.io/ingress\.class=nginx'
Значения могут быть вложенными словарями и списками. Для списков Helm заменяет весь массив целиком, а не объединяет поэлементно.
# values.yaml по умолчанию
ingress:
enabled: false
hosts:
- host: example.local
paths:
- /
# Переопределение в файле prod.yaml
ingress:
enabled: true
hosts:
- host: shop.example.com
paths:
- /
- /api
Если в prod.yaml написать hosts с одним элементом, список будет заменён полностью. Это поведение удобно, но часто удивляет: если нужно добавить элемент, перепишите весь список.
# Удалить значение из чарта по умолчанию resources: null # То же через командную строку helm upgrade web ./chart --set resources=null
В шаблонах значения обычно подставляются напрямую, но есть полезные функции.
# Значение по умолчанию, если ключа нет или он пустой
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
# Обязательное значение: если его нет, рендеринг упадёт с понятным сообщением
host: {{ required "Укажите ingress.host" .Values.ingress.host }}
# Преобразование блока YAML с правильными отступами
resources:
{{- toYaml .Values.resources | nindent 2 }}
# Условие
{{- if .Values.ingress.enabled }}
kind: Ingress
{{- end }}
# Перебор списка
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
{{- end }}
quote оборачивает значение в кавычки и защищает от неожиданных преобразований типов. Используйте её для строк, которые могут выглядеть как числа или булевы значения, например для тегов образов.
Значения из .Values видны всем шаблонам. Если нужна константа, которая не должна меняться через values, объявите её в шаблоне через $var := ... или в _helpers.tpl. Не превращайте в values всё подряд: чем больше параметров, тем сложнее сопровождать чарт.
global: imageRegistry: registry.example.com environment: production
Ключ global доступен и в основном чарте, и во всех зависимостях как .Values.global. Для параметров конкретной зависимости используйте её имя или alias:
postgresql: # имя зависимости
auth:
database: shop
db: # alias той же зависимости
auth:
database: shop_other
Файл values.schema.json в корне чарта описывает допустимые значения в формате JSON Schema. Helm проверит их при install, upgrade, lint и template. Это ловит опечатки и неверные типы до деплоя.
{
"$schema": "https://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["image"],
"properties": {
"replicaCount": {
"type": "integer",
"minimum": 1,
"maximum": 20
},
"image": {
"type": "object",
"required": ["repository", "tag"],
"properties": {
"repository": { "type": "string" },
"tag": { "type": "string" }
}
}
}
}
Если значение не проходит проверку, Helm выдаст ошибку с путём до проблемного ключа. Для приложений с сотнями параметров это экономит много времени.
Значения попадают в историю релиза: helm get values и Secret релиза хранят их. Поэтому пароли и токены в открытом виде в values не кладите.
existingSecret: db-credentials.--set-string в последний момент, не сохраняя в файлах.helm history и helm get values любому, у кого есть доступ к namespace. Для паролей это не безопасно.
# Значения по умолчанию чарта helm show values ./chart # Итоговые значения релиза (только переопределённые) helm get values web -n demo # Итоговые значения, включая значения по умолчанию helm get values web -n demo --all # Значения для конкретной ревизии helm get values web -n demo --revision 3 # Отрисовать только один шаблон, чтобы проверить подстановку helm template web ./chart -f prod.yaml --show-only templates/deployment.yaml # Показать значения, которые получит шаблон, прямо в выводе helm template web ./chart -f prod.yaml --debug | less
| Симптом | Причина и решение |
|---|---|
| Значение из -f не применилось | Его перекрыл --set. Проверьте порядок и флаги. |
| Список стал короче, чем ожидалось | Массивы заменяются целиком. Перепишите полный список. |
| Число стало 1.1 вместо 1.10 | Используйте --set-string или кавычки в YAML. |
| nil pointer evaluating interface {} | Обращение к вложенному ключу, которого нет. Используйте default или проверку через if. |
| Ошибка schema validation | Значение не соответствует values.schema.json. Сообщение содержит путь к ключу. |
| Пустой блок в манифесте | Значение равно null или пустой строке. Проверьте условие if и функцию default. |
chart/ values.yaml # безопасные значения по умолчанию values.schema.json # проверка типов и обязательных полей environments/ base.yaml # общие параметры для всех окружений dev.yaml # переопределения для разработки prod.yaml # переопределения для продакшена secrets/ prod.enc.yaml # зашифрованные секреты (sops)
helm show values становится справочником, и команде не нужно читать шаблоны, чтобы понять, что можно настроить.