Helm Chart不修改services字段如何按values文件名匹配对应INPUT配置
解决方案
Helm模板本身不提供直接读取当前加载的values文件名的内置能力,因为Helm会把所有通过
-f参数传入的values文件合并为全局的.Values对象,不会保留单个文件的来源文件名。但你可以通过以下两种无需修改services键名的方案实现需求:
方案1:给各values文件新增独立标识字段(最稳定)
操作方式:在三个values文件中各新增一个自定义标识字段,不需要改动原有services配置:
values-version1 调整后内容
# 新增标识字段,原有services配置完全不变 envType: platform services: - name: service1 - name: service2 - name: service3
values-version2 调整后内容
envType: infra services: - name: service4 - name: service5 - name: service6
values-version3 调整后内容
envType: other services: - name: service7 - name: service8 - name: service9
调整后的ConfigMap模板
apiVersion: v1 kind: ConfigMap metadata: name: my-confmap data: {{- /* 先根据标识字段匹配对应日志路径后缀 */}} {{- $logSuffix := "" }} {{- if eq .Values.envType "platform" }} {{- $logSuffix = "_platform*.log" }} {{- else if eq .Values.envType "infra" }} {{- $logSuffix = "_infra*.log" }} {{- else if eq .Values.envType "other" }} {{- $logSuffix = "_other*.log" }} {{- end }} {{- /* 遍历服务列表生成对应INPUT配置 */}} {{- range $service := .Values.services }} [INPUT] Name tail Tag kube.* Path /var/log/containers/{{ $service.name }}-*{{ $logSuffix }} {{- end }}
方案2:执行helm命令时传入标识参数
如果不想修改values文件内容,可以在执行helm install/upgrade时通过--set参数传入标识,和指定values文件的命令配合使用即可:
加载values-version1时执行:
helm install my-release ./my-chart -f values-version1.yaml --set envType=platform
加载values-version2时执行:
helm install my-release ./my-chart -f values-version2.yaml --set envType=infra
加载values-version3时执行:
helm install my-release ./my-chart -f values-version3.yaml --set envType=other
模板代码和方案1完全一致。
内容的提问来源于stack exchange,提问作者jrz
相关产品推荐
相关产品推荐

