首页 > 解决方案 > values.yaml 中的 helm configmap

问题描述

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

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

我假设我需要使用可以.Release.Name在那里使用的 configMap,然后将该配置键嵌入到 values.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

配置映射

kind: ConfigMap
metadata:
  name: mysql-jasper
data:
  mysql_releasename: {{ .Release.Name }}-"mysql"

标签: kuberneteskubernetes-helmconfigmap

解决方案


看来 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

那是因为当我使用您的时,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

上述命令将通过从文件中设置值 + 设置值helm install来覆盖默认值。values.yamlexternalDatabase.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"
...

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

values.yaml

mariadb:
  enabled: false
externalDatabase:
  host: MYHOST
  user: sqluser
  database: jasper
jasperreportsUsername: jasper
RELEASE_NAME=my-test-release
sed "s/MYHOST/$RELEASE_NAME-mysql/g" values.yaml | helm install $RELEASE_NAME bitnami/jasperreports -f -

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


推荐阅读