【问题标题】:Dynamically set the config map name and values to read in helm?动态设置配置映射名称和值以在 helm 中读取?
【发布时间】:2017-12-04 11:41:20
【问题描述】:
我是掌舵图表的新手。因此,如果我理解错误,请纠正我。我有一项服务,我正在尝试使用 helm 图表进行部署。我想根据部署环境更改配置映射名称及其要读取的键值。因此我想在 values.yaml 中添加条件逻辑。
有人能指出一些解释如何在 values.yaml 中添加条件逻辑的文档/链接吗?
【问题讨论】:
标签:
kubernetes
kubernetes-helm
【解决方案1】:
一种方法是使用 helm install 传递一个值,例如:
--set environment=<value>
然后在您的值文件中为不同的环境设置多组值,例如:
environment: <default>
env1:
prop1: <value1>
prop2: <value2>
env2:
prop1: <value1>
prop2: <value2>
现在在你的 configMap 文件中像这样使用它:
{{- if eq .Values.environment "env1" }}
somekey: {{ .Values.env1.prop1 }}
{{- else }}
somekey: {{ .Values.env2.prop1 }}
{{- end }}
这应该可以根据环境或任何此类条件设置动态值。
除此之外,还有一件事我想提醒您注意,helm 没有更多的内置对象,就像.Values,其中之一是.Capabilities,所以您可以使用.Capabilities.KubeVersion.Platform查找系统的操作系统
【解决方案2】:
图表的values.yaml 主要用于设置默认值,与环境无关。它的存在是为了用值填充图表模板。它本身并非设计为模板,因此您无法在 values.yaml 文件中应用任何逻辑。
每个环境都应该有自己的values.yaml 文件。您可以将它们存储在图表本身中,例如:
.
├── Chart.yaml
├── README
├── templates
│ ├── config.yaml
│ ├── deployment.app.yaml
│ └── service.app.yaml
├── values.prod.yaml
├── values.test.yaml
└── values.yaml
现在,当您部署图表时,您可以使用特定于环境的values.<env>.yaml 来覆盖默认值。对于您的测试环境,这可能如下所示:
helm upgrade --install my-chart path/to/my/chart --values path/to/my/chart/values.test.yaml
当然,您也可以将values.<env>.yaml 文件存储在图表目录之外。您只需要找到一种方法让它们在图表升级/安装时可用,以覆盖图表模板默认的values.yaml。