【发布时间】:2020-09-17 05:12:27
【问题描述】:
要求:将图表 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。
我在 Deployment 的容器部分用这部分为 graphql-engine 制作了 Helm 图表:
env:
{{- range $k, $v := .Values.environmentVariables }}
- name: {{ quote $k }}
value: {{ quote "$v" }}
{{- end }}
为了获得正确的子图表名称,我在 A`s variables.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 文件前缀 nameOverride 变量和 .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-engine 图表实例中都使用了它,它不正确。
真正的 A 应用程序具有更多级别的依赖关系,但这对这个问题并不重要。这是错误的做法吗?您如何创建 k8s 对象的名称以及如何为您的应用程序设置 URL 变量?
谢谢!
【问题讨论】:
-
两个
postgres和graphql-engine安装需要分开吗?顶级A中实际上是否有任何代码,或者它只是一个依赖“伞”图表? -
感谢您的评论。是的,graphql-engine 必须分开,但 postgres 服务可能是相同的。而A服务拥有我们大部分的业务逻辑。但是我的同事前一天运气不错,发现了这个问题stackoverflow.com/questions/55078150/…,而你和 Tomasz 的线程是相关的,也许可以解决我的问题。所以谢谢你!
标签: kubernetes deployment kubernetes-helm