Как ссылаться на значение, определенное в шаблоне в подграфе в руле для кубернетов?

Я начинаю писать рулевые диаграммы для наших услуг.

Есть две вещи, которые я не знаю, как они должны работать или что с ними делать.

Первое: название релиза. При установке диаграммы вы указываете имя, которое использует 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