我开始为我们的服务编写 Helm chart 。
有两件事我不确定它们应该如何工作或如何处理它们。
第一个:版本名称。安装图表时,您指定 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 and Globals模板在图表之间共享。
所以我能做的是:
在 _helpers.tpl 的图表中,我添加(覆盖)postgres block :
{{- define "postgresql.fullname" -}}
{{- $name := .Values.global.name -}}
{{- printf "%s-%s" $name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
所以这个值是在部署子图的时候使用的。我无法引用此处的所有值或图表名称,因为它在子图表中会有所不同 - 因此我使用了全局值。
这样我就知道了子图表中创建的服务的值(value)。
不确定这是否是最好的方法:-/
最佳答案
您是否将 postgresql
作为图表的子图表(通过图表的 requirements.yaml
)?如果是这样,postgresql
(子)图表和您的图表将具有相同 .Release.Name
- 因此,您可以指定容器的环境为
env:
- name: DB_HOST
value: {{ printf "%s-postgresql" .Release.Name }}
如果您通过将以下内容添加到图表的 values.yaml
来覆盖 postgresql
的名称:
postgresql:
nameOverride: your-postgresql
那么你的容器的环境将是:
env:
- name: DB_HOST
value: {{ printf "%s-%s" .Release.Name .Values.postgresql.nameOverride }}
关于kubernetes - 如何在 kubernetes 的 helm 子图表中引用模板中定义的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47757968/