Helm отображает весь YAML, который он дает, из всех родительских и зависимых диаграмм вместе, в одной среде выполнения с общим пространством имен шаблонов. Теоретически, диаграмма app1
может зависеть от шаблона, который определен в родительском _helpers.tpl
, и в показанном вами конкретном макете он будет работать.
Из-за этой настройки среды также возможнонапишите «диаграмму», которая на самом деле не производит никаких собственных YAML, а просто содержит шаблоны. Шлем 3 будет включать в себя «библиотечный график» в качестве конкретной концепции. Лучшим вариантом по-прежнему будет иметь библиотеку с вашими общими шаблонами и ссылку на нее.
MyHelmApp
\-- charts
+-- app1
| +-- Chart.yaml
| \-- templates/...
\-- common
+-- Chart.yaml
\-- templates
\-- _helpers.tpl
(but no *.yaml)
Теперь MyHelmApp
зависит от app1
, app2
, app3
и каждого из них. те зависят от common
. Это позволило бы установить любого из них независимо от их братьев и сестер.
У Хелма нет способа «протолкнуть» фрагменты YAML в объекты в других местах ( Kustomize , часть относительноНедавние Кубернетес, может это сделать). Каждый объект должен объявить для себя любую потенциальную настройку, которая может быть разрешена. Таким образом, в каждой диаграмме вам нужно было бы объявить
spec:
{{ include "common.probes" . | indent 2 }}
Общая диаграмма просто определяет шаблоны, и при их вызове они будут использовать версию .Values
, локализованную на подкарте.
{{- define "common.probes" -}}
livenessProbe:
httpGet:
path: {{ .Values.health.livenessProbe.path }}
et: cetera
{{ end -}}