Helm 子图表名称和 URL 变量配置



>要求:将图表 A 的多个版本部署到单个 k8s 命名空间

我在子图表名称配置方面遇到了一个复杂的问题。我的图表之间的关系是:

A
|- B
|- C
|- D - postgres
|- E - graphql-engine
|- F - postgres
|- G - graphql-engine
  • A 取决于 B、F、G
  • B 取决于 C
  • C 取决于 D、E

并且 graphql-engine 类型的图表可以根据应用程序需要零或 N 个变量(如果您知道这个应用程序,它应该是后端 URL、操作 URL、触发器 URL 等(。在实例 E 中,变量应指向应用 C,在实例 G 中,变量应指向 A。

我在部署的容器部分用这部分为 graphql-engine 制作了 Helm 图表:

env:
{{- range $k, $v := .Values.environmentVariables }}
- name: {{ quote $k }}
value: {{ quote "$v" }}
{{- end }}

为了获得子图表的正确名称,我在 A 的变量 .yaml 文件中执行此操作:

B:
C:
nameOverride: A-B-C
D:
nameOverride: A-B-C-D
E:
nameOverride: A-B-C-E
F:
nameOverride: A-F
G:
nameOverride: A-G

默认图表的 _helpers.tpl 文件前缀 name用 .Release.Name 变量覆盖变量。 这不是很好和最佳的,但我没有找到一种方法来动态创建此过程。这里有人知道更好的命名方法吗?这是我的第一个问题。

为了简化我的问题。我需要像这样放置变量列表:

  • VAR1="http://{{ .Release.Name }}-A-B-C:8080/graphql">
  • VAR2="http://{{ .Release.Name }}-A-B-C:8080/actions">

从 A 图表进入 E 图表。但是我没有找到让 Go 模板扩展 .Release.Name 变量的方法。我在A variables.yaml中做了这个:

B:
C:
nameOverride: A-B-C
D:
nameOverride: A-B-C-D
E:
nameOverride: A-B-C-E
extraVariables:
VAR1: "http://{{ .Release.Name }}-A-B-C:8080/graphql"
VAR2: "http://{{ .Release.Name }}-A-B-C:8080/actions"
F:
nameOverride: A-F
G:
nameOverride: A-G
extraVariables:
VAR1: "http://{{ .Release.Name }}-A:8080/graphql"

但是我没有找到如何在具有美元可变输入的范围部分中使用 tpl Helm 函数的方法。或者实现此目的的另一种可能性。我尝试只包含一些我可以在 A 图表中创建的"模板",但它的 Vars 上下文很糟糕,并且在每个 graphql 引擎图表实例中使用,这不对。

真正的 A 应用程序具有更多级别的依赖项,但对此问题并不重要。这是错误的做法吗?您如何创建 k8s 对象的名称以及如何为应用程序设置 URL 变量?

谢谢!

关于使用 tpl 函数调用循环列表的问题的答案是这样的。您只需要更改 tpl 的上下文。

{{- range $k, $v := .Values.environmentVariables }}
- name: {{ quote $k }}
value: {{ tpl $v $ }}
{{- end }}

最新更新