【问题标题】:Helm subcharts names and URL variables configuratiionHelm 子图表名称和 URL 变量配置
【发布时间】: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 变量?

谢谢!

【问题讨论】:

  • 两个postgresgraphql-engine 安装需要分开吗?顶级A 中实际上是否有任何代码,或者它只是一个依赖“伞”图表?
  • 感谢您的评论。是的,graphql-engine 必须分开,但 postgres 服务可能是相同的。而A服务拥有我们大部分的业务逻辑。但是我的同事前一天运气不错,发现了这个问题stackoverflow.com/questions/55078150/…,而你和 Tomasz 的线程是相关的,也许可以解决我的问题。所以谢谢你!

标签: kubernetes deployment kubernetes-helm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2018-05-22
    • 2019-10-20
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多