在 Helm Chart 中,可以通过
values.yaml
文件中的配置来动态决定 ConfigMap
的 data
字段内容。以下是实现方法:修改 values.yaml
文件
在
values.yaml
文件中添加一个字段,用于指定要使用的配置路径。例如:yaml复制
confPath: "env/conf"
或者
yaml复制
confPath: "tee/conf"
修改 ConfigMap 的模板文件
在 ConfigMap 的模板文件中,使用
{{ .Values.confPath }}
来动态拼接路径。修改后的模板文件如下:yaml复制
apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Values.nameOverride }}
data:
{{ (.Files.Glob (printf "%s/*conf" .Values.confPath)).AsConfig | indent 2 }}
解释
-
{{ .Values.confPath }}
:从values.yaml
文件中获取confPath
的值。 -
(printf "%s/*conf" .Values.confPath)
:将confPath
的值拼接到路径模式中,例如"env/conf/*conf"
或"tee/conf/*conf"
。 -
(.Files.Glob (printf "%s/*conf" .Values.confPath)).AsConfig
:根据拼接后的路径模式,获取对应的文件内容并转换为 ConfigMap 的数据格式。 -
| indent 2
:对生成的内容进行缩进,以符合 YAML 的格式要求。
使用示例
values.yaml
文件
yaml复制
nameOverride: my-configmap
confPath: "env/conf"
ConfigMap 模板文件
yaml复制
apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Values.nameOverride }}
data:
{{ (.Files.Glob (printf "%s/*conf" .Values.confPath)).AsConfig | indent 2 }}
文件结构
复制
my-chart/
├── Chart.yaml
├── values.yaml
├── templates/
│ └── configmap.yaml
└── env/└── conf/└── example.conf
└── tee/└── conf/└── example.conf
部署时的命令
bash复制
helm install my-release ./my-chart
🔍 搜一下再回答