wem*_*emu 20 kubernetes kubernetes-helm
我开始为我们的服务编写helm图表.
有两件事我不确定它们应该如何工作或者如何处理它们.
第一:发布名称.安装图表时,指定helm用于创建发布的名称.此版本名称通常在图表中引用,以便将图表安装彼此正确隔离?例如,postgres图表包含:
{{- define "postgresql.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)
然后将其用于服务:
metadata:
name: {{ template "postgresql.fullname" . }}
Run Code Online (Sandbox Code Playgroud)
它最终在kubernetes看起来像"myrelease-postgresql".我想知道一个好的发布名称是什么?通常用于什么?厌恶?或者像ubuntu发布的一些代号?
第二:引用值.
我的图表使用postgresql作为子图表.我想不要复制postgresql服务名称的值的创建方式(参见上面的剪辑).
有没有办法可以引用子图表的服务名称或模板定义{{template"postgresql.fullname".在父图表中?我需要它将它作为数据库主机传递给我的服务(如果我对所有内容进行硬编码,则可以正常工作,但这不是这个意思).
我试过了:
env:
- name: DB_HOST
value: {{ template "mychart.postgresql.fullname" . }}
Run Code Online (Sandbox Code Playgroud)
但这会导致错误消息:
template "mychart.postgresql.fullname" not defined
Run Code Online (Sandbox Code Playgroud)
我已经看过图表的例子做类似的事情,比如odoo图表.但是在这里,复制了如何创建postgresql主机名的逻辑,并创建了模板中自己的定义.
那么有没有办法访问子图表名称?或者值或模板定义?
谢谢!
经过一些挖掘后更新: 根据Subcharts和Globals,模板在图表之间共享.
所以我能做的就是:
在我的_helpers.tpl图表中,我添加(覆盖)postgres块:
{{- define "postgresql.fullname" -}}
{{- $name := .Values.global.name -}}
{{- printf "%s-%s" $name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)
因此,在部署子图表时使用此值.我不能在这里引用所有值或图表名称,因为它在子图表中会有所不同 - 所以我使用了全局值.
像这样,我知道在子图表中创建的服务的价值.
不确定这是否是最好的方法: - /
小智 6
您是否将其postgresql作为图表的子图表(通过图表的requirements.yaml)?如果是这样,postgresql(子)图表和您的图表都将具有相同的 .Release.Name- 因此,您可以将容器的环境指定为
env:
- name: DB_HOST
value: {{ printf "%s-postgresql" .Release.Name }}
Run Code Online (Sandbox Code Playgroud)
如果您postgresql通过将以下内容添加到您的图表来覆盖的名称values.yaml:
postgresql:
nameOverride: your-postgresql
Run Code Online (Sandbox Code Playgroud)
那么您的容器的 env 将是:
env:
- name: DB_HOST
value: {{ printf "%s-%s" .Release.Name .Values.postgresql.nameOverride }}
Run Code Online (Sandbox Code Playgroud)
您可以使用父图表的值覆盖子图表的值,如下所述: https ://helm.sh/docs/chart_template_guide/subcharts_and_globals/
我认为不可能(而且也没有意义)覆盖子图的模板名称。
我要做的就是在父图表和子图表的 .Values 文件中定义数据库服务名称,并让 helm 覆盖子图表中的服务名称 - 这样您将始终在父图表中拥有数据库名称。然而,这意味着数据库的服务名称不应该是{{ template "name" . }},而是类似{{ .Values.database.service.name }}
mychart/.Values
mysubchart:
service:
name: my-database
Run Code Online (Sandbox Code Playgroud)
mychart/templates/deployment.yaml
env:
- name: DB_HOST
value: {{ .Values.mysubchart.service.name }}
Run Code Online (Sandbox Code Playgroud)
mychart/charts/mysubchart/.Values
service:
name: my-database
Run Code Online (Sandbox Code Playgroud)
mychart/charts/mysubchart/templates/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.service.name }}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用全局图表值,也在https://helm.sh/docs/chart_template_guide/subcharts_and_globals/中进行了描述
| 归档时间: |
|
| 查看次数: |
8170 次 |
| 最近记录: |