kubernetes - values.yaml 中的 helm configmap

标签 kubernetes kubernetes-helm configmap

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

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

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

Values.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"

最佳答案

helm 似乎不支持 values.yaml 文件中的任何模板渲染功能 - helm GitHub 上有多个主题:

目前此功能尚未实现,因此您需要找到解决方法 - David Maze 的建议似乎是一个不错的方向,但如果您想遵循您的方法,可以使用以下解决方法 using --set flag in the helm install command或使用 sed 命令并通过管道传输到 helm install 命令。

第一个带有 --set 标志的解决方案。

我的 values.yaml 文件与您的略有不同:

mariadb:
  enabled: false
externalDatabase:
  user: sqluser
  database: jasper
jasperreportsUsername: jasper

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

我正在设置一个 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.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"
...

另一种方法是设置一个 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 -

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

关于kubernetes - values.yaml 中的 helm configmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69837364/

相关文章:

docker - pod 无法互相交流

nginx - 如何修复 Kubernetes Ingress Controller 从集群中切断节点的问题

kubernetes - helm 传递特定文件夹中的所有值文件

Spring Cloud Kubernetes - Spring boot 不读取配置映射

kubernetes - 在 Kubernetes 部署中为每个 pod 附加新的 Azure 磁盘卷

kubernetes - 等待集群初始化超时,节点自动升级失败/或运行出错

docker - 如何使 kubernetes docker secret 工作?

Kubernetes 无法运行容器

Kubernetes - 从文件更新现有的配置映射

join - 无法加入 Kubernetes 集群