Values.yaml 中的 helm 配置映射

sam*_*sam 5 kubernetes kubernetes-helm configmap

我正在尝试执行以下操作,因此主机中的 MYVALUE 需要更改为包含版本名称。无法弄清楚如何执行此操作,因为您无法像{{ .Release.Name }}直接在values.yaml 文件中使用环境变量一样。

我确实为 mysql pod 做了 afullnameOverride和 put ,fullnameOverride: myrelease-mysql然后 jasper 可以host: myrelease-mysql工作,但想知道是否有一种聪明的方法可以将发布名称放入 value.yaml 文件中。

我假设我需要使用 configMap,因为可以.Release.Name在那里使用,然后将该配置键嵌入到 value.yaml 中。

值.yaml

jasperreports:
  mariadb:
    enabled: false
  externalDatabase:
    host: MYVALUE   // Also tried $MVALUE
    user: sqluser
    database: jasper
  jasperreportsUsername: jasper
  env:
      - name: MYVALUE
        valueFrom:
          configMapKeyRef:
              name: mysql-jasper
              key: mysql_releasename
Run Code Online (Sandbox Code Playgroud)

配置映射表

kind: ConfigMap
metadata:
  name: mysql-jasper
data:
  mysql_releasename: {{ .Release.Name }}-"mysql"
Run Code Online (Sandbox Code Playgroud)

Mik*_* S. 3

看来 helm 不支持任何模板渲染功能values.yaml- helm GitHub 上有多个主题:

目前此功能尚未实现,因此您需要找到一个解决方法 - David Maze 的建议似乎是一个很好的方向,但如果您想遵循您的方法,您可以使用下面的解决方法,在命令中使用--set标志helm install或使用sed命令和管道命令helm install

第一个解决方案是--set

我的values.yaml文件与你的有点不同:

mariadb:
  enabled: false
externalDatabase:
  user: sqluser
  database: jasper
jasperreportsUsername: jasper
Run Code Online (Sandbox Code Playgroud)

那是因为当我使用你的时values.yaml我无法设法将这些值应用到bitnami/jasperreports图表中,该helm install命令使用默认值此处的默认值。

我正在设置一个 shell 变量RELEASE_NAME,我将使用它来设置图表名称和externalDatabase.host值。

RELEASE_NAME=my-test-release
helm install $RELEASE_NAME bitnami/jasperreports -f values.yaml --set externalDatabase.host=$RELEASE_NAME-mysql
Run Code Online (Sandbox Code Playgroud)

上面的helm install命令将通过设置值来覆盖默认值values.yaml文件中的设置值+设置externalDatabase.host值来覆盖默认值。

在应用之前,您可以使用helm template命令检查此解决方案是否按预期工作:

RELEASE_NAME=my-test-release
helm template $RELEASE_NAME bitnami/jasperreports -f values.yaml --set externalDatabase.host=$RELEASE_NAME-mysql
...
- name: MARIADB_HOST
  value: "my-test-release-mariadb"
...
Run Code Online (Sandbox Code Playgroud)

另一种方法是设置一个 bash 变量,RELEASE_NAME该变量将在命令中使用sed以输出修改后的values.yaml文件(我不编辑values.yaml文件本身)。此输出将通过管道传输到helm install命令中(我还使用了RELEASE_NAME变量)。

values.yaml:

RELEASE_NAME=my-test-release
helm install $RELEASE_NAME bitnami/jasperreports -f values.yaml --set externalDatabase.host=$RELEASE_NAME-mysql
Run Code Online (Sandbox Code Playgroud)
RELEASE_NAME=my-test-release
sed "s/MYHOST/$RELEASE_NAME-mysql/g" values.yaml | helm install $RELEASE_NAME bitnami/jasperreports -f -
Run Code Online (Sandbox Code Playgroud)

此方法将设置与第一种方法相同的图表配置。