Как ссылаться на значение, определенное в шаблоне в подграфе в руле для кубернетов?
Я начинаю писать рулевые диаграммы для наших услуг.
Есть две вещи, которые я не знаю, как они должны работать или что с ними делать.
Первое: название релиза. При установке диаграммы вы указываете имя, которое использует helm для создания релиза. На это имя выпуска часто ссылаются в диаграмме, чтобы правильно изолировать установки диаграммы друг от друга? Например, диаграмма postgres содержит:
{{- define "postgresql.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
Который затем используется для службы:
metadata:
name: {{ template "postgresql.fullname" . }}
В конце концов, в kubernetes это выглядит как "myrelease-postgresql".
Интересно, что такое хорошее название релиза? Что обычно используется для этого? Версия? Или какое-нибудь кодовое имя, например, релизы Ubuntu?
Второе: ссылки на значения.
Моя диаграмма использует postgresql в качестве под-диаграммы. Я не хотел бы дублировать способ создания значения для имени службы postgresql (см. выше).
Есть ли способ, с помощью которого я могу ссылаться на имя службы вложенной диаграммы или определить этот шаблон {{template "postgresql.fullname". }} в родительской диаграмме? Мне нужно передать его в мой сервис в качестве хоста базы данных (который работает, если я жестко закодирую все, но это не может быть смыслом этого).
Я пытался:
env:
- name: DB_HOST
value: {{ template "mychart.postgresql.fullname" . }}
Но это приводит к сообщению об ошибке:
template "mychart.postgresql.fullname" not defined
Я видел примеры диаграмм, делающих подобные вещи, например, диаграмму odoo. Но здесь копируется логика создания имени хоста postgresql и создается собственное определение в шаблоне.
Так есть ли способ получить доступ к именам вложенных диаграмм? Или значения или шаблон определяет?
Спасибо!
Обновление после некоторых копаний:
Согласно Subcharts и Globals шаблоны распределяются между диаграммами.
Так что я могу сделать это:
На моем графике в _helpers.tpl я добавляю (перезаписываю) блок postgres:
{{- define "postgresql.fullname" -}}
{{- $name := .Values.global.name -}}
{{- printf "%s-%s" $name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
Таким образом, это значение используется при развертывании вложенной диаграммы. Я не могу ссылаться на все значения или имя диаграммы здесь, поскольку она будет отличаться в под-диаграмме - поэтому я использовал глобальное значение.
Таким образом, я знаю ценность службы, которая создается в дополнительной диаграмме.
Не уверен, что это лучший способ сделать это: -/
Ответы
Ответ 1
Вы добавляете postgresql
в качестве подкарты вашего графика (через ваш график requirements.yaml
)? Если это так, и postgresql
(под) диаграмма, и ваша диаграмма будут иметь одинаковую .Release.Name
- таким образом, вы можете указать свою контейнерную среду как
env:
- name: DB_HOST
value: {{ printf "%s-postgresql" .Release.Name }}
если вы переопределите имя postgresql
, добавив в диаграмму следующее: values.yaml
:
postgresql:
nameOverride: your-postgresql
тогда ваш контейнер env будет:
env:
- name: DB_HOST
value: {{ printf "%s-%s" .Release.Name .Values.postgresql.nameOverride }}
Ответ 2
Вы можете перезаписать значения подзаголовка со значениями родительского графика, как описано здесь:
https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md
Я не думаю, что это возможно (и это также не имеет смысла), чтобы переопределить имя шаблона подзаголовка.
Что бы я делал, это определить имя службы базы данных в файлах .Values как в родительской, так и в подкатегории и позволить рулю переопределить ту, что есть в подзаголовке - таким образом вы всегда будете иметь имя базы данных в родительской диаграмме. Это, однако, означает, что имя службы базы данных не должно быть {{ template "name" . }}
, но что-то вроде {{ .Values.database.service.name }}
mychart/.Values
mysubchart:
service:
name: my-database
mychart/шаблоны/deployment.yaml
env:
- name: DB_HOST
value: {{ .Values.mysubchart.service.name }}
mychart/графики/mysubchart/.Values
service:
name: my-database
mychart/графики/mysubchart/шаблоны/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.service.name }}
Другой способ - использовать глобальные значения диаграммы, также описанные в https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md