Короткий ответ
Зависимость объявляется в Chart.yaml секцией dependencies с именем, версией (диапазоном) и репозиторием чарта, после чего выполняется helm dependency update, которая скачивает subchart в папку charts/; значения для subchart передаются из родительского values.yaml в виде вложенного ключа с именем subchart'а (postgresql: { ... }), а если subchart поддерживает global-значения — общие для нескольких subchart'ов параметры можно вынести в секцию global, которая видна во всех уровнях.
Как это работает подробнее
Helm при рендере объединяет values по иерархии: значения из values.yaml родителя под ключом <имя subchart> переопределяют дефолтные values.yaml самого subchart'а для этого уровня вложенности, а секция global доступна и родителю, и всем subchart'ам одновременно; команда helm template/helm install --dry-run позволяет увидеть итоговый результат слияния до реального применения в кластер.
Пример кода
# Chart.yaml
dependencies:
- name: postgresql
version: "~12.1.0"
repository: "https://charts.bitnami.com/bitnami"
# values.yaml родительского чарта
postgresql:
auth:
database: appdb
primary:
persistence:
size: 20Gi
$ helm dependency update ./mychart
$ helm template mychart ./mychart | grep -A2 "size:"Что использовать на практике
- Практика. перед переопределением стоит посмотреть
helm show values <repo>/postgresql(или файлcharts/postgresql/values.yamlпослеdependency update), чтобы использовать точные имена ключей, ожидаемые subchart'ом, а не угадывать структуру; версии зависимостей вChart.yamlлучше фиксировать диапазоном с ограничением (например,~12.1.0), чтобыdependency updateне подтягивал breaking-change версию незаметно.
Подводные камни
- Ошибка. частая ошибка — редактировать файлы внутри
charts/postgresqlнапрямую вместо передачи значений через родительскийvalues.yaml, из-за чего правки затираются при следующемhelm dependency update; другая ошибка — перепутать структуру вложенности ключей (например, положить параметры subchart'а на верхний уровеньvalues.yamlбез обёртки его именем), из-за чего Helm просто игнорирует эти значения при рендере subchart'а.