You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Helm Values为templates目录外的配置文件传值

解决Helm Chart中模板化非templates目录配置文件并生成Secret的问题

问题分析

你需要将根目录下的config.yaml文件中的硬编码值(ep1/ep2/ep3)用values.yaml的值替换,再将处理后的文件内容存入Secret。之前的尝试失败是因为直接读取文件未经过模板渲染,.AsSecrets方法只会对原文件内容做base64编码,不会解析模板变量。

解决方案步骤

1. 修改根目录的config.yaml,替换硬编码值为模板变量

将文件中的ep1/ep2/ep3替换为Helm模板变量,让tpl函数可以识别并替换:

- job_name: 'broker-1'
  static_configs:
  - targets: ['{{ .Values.ep1 }}:11001', '{{ .Values.ep2 }}:11001', '{{ .Values.ep3 }}:11001']
- job_name: 'broker-2'
  static_configs:
  - targets: ['{{ .Values.ep1 }}:11002', '{{ .Values.ep2 }}:11002', '{{ .Values.ep3 }}:11002']

2. 在values.yaml中定义替换用的端点值

添加对应的端点配置,示例:

ep1: "10.0.0.10"
ep2: "10.0.0.11"
ep3: "10.0.0.12"

3. 修改Secret模板,用tpl渲染文件内容再编码

在templates目录下的Secret模板中,使用tpl函数先渲染config.yaml的内容,再进行base64编码:

apiVersion: v1
kind: Secret
metadata:
  name: config-file
data:
  config.yaml: {{ tpl (.Files.Get "config.yaml") . | b64enc }}

如果需要处理多个匹配的文件,也可以用range循环:

apiVersion: v1
kind: Secret
metadata:
  name: config-file
data:
  {{- $root := . }}
  {{- range $path := .Files.Glob "config.yaml" }}
  {{ base $path }}: {{ tpl ($root.Files.Get $path) $root | b64enc }}
  {{- end }}

原理说明

  • tpl函数的作用是将传入的字符串当作Helm模板,结合当前上下文(.即包含values的根上下文)进行渲染,替换其中的模板变量。
  • .Files.Get "config.yaml"获取文件的原始内容字符串,传入tpl后会解析其中的{{ .Values.ep1 }}等变量,替换为values.yaml中的实际值。
  • 最后通过b64enc将渲染后的内容编码为Secret要求的base64格式。

内容的提问来源于stack exchange,提问作者mmiara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:55:04