动态设置配置映射名称和值以读取helm?

时间:2017-12-04 11:41:21

标签: kubernetes kubernetes-helm

我是掌舵图的新手。如果我在理解上出错了,请纠正我。我有一个服务,我试图使用头盔图表部署。我想根据部署环境更改配置映射名称及其键值。因此,我想在values.yaml中添加条件逻辑。

有人能指点我一些文档/链接,解释如何在values.yaml中添加条件逻辑吗?

2 个答案:

答案 0 :(得分:3)

图表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

答案 1 :(得分:0)

一种实现方法是通过头盔安装传递一个值,例如:

--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 }}

应该可以根据环境或任何此类条件设置动态值。

此外,我想提醒您的另一件事是,掌舵像.Values一样很少有内置对象,其中之一是.Capabilities,因此您可以利用.Capabilities.KubeVersion.Platform中找到系统的操作系统