kubernetes - 如何在 kubernetes 的 helm 子图表中引用模板中定义的值?

标签 kubernetes kubernetes-helm

我开始为我们的服务编写 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/

相关文章:

docker - 在已安装卷的Kubernetes中启动RStudio

kubernetes - statefulset 的就绪探测,而不是单个 pod/容器

kubernetes - 无法从 kubernetes 外部访问 kafka

azure - kubernetes 中的子网

docker - Kubernetes Calico节点 'XXXXXXXXXXX'已使用IPv4地址XXXXXXXXX,CrashLoopBackOff

docker - 从Docker容器使用默认 namespace 中的群集IP访问k8s服务

kubernetes - 是否可以禁用 kubernetes 中图表文件夹中的图表?

kubernetes - Traefik Helm Chart 404

kubernetes - prometheus operator - 启用对所有命名空间中的所有内容的监控

kubernetes - 从 Kubernetes 中的另一个 pod 引用 Helm Redis master