动态设置要在 helm 中读取的配置映射名称和值?

Dynamically set the config map name and values to read in helm?

我是掌舵图的新手。因此,如果我理解有误,请纠正我。我有一项服务,我正在尝试使用 helm 图表进行部署。我想根据部署环境更改要读取的配置映射名称及其键值。因此我想在 values.yaml.

中添加条件逻辑

谁能给我指点一些 document/link 来解释如何在 values.yaml 中添加条件逻辑?

图表的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 文件存储在图表目录之外。您只需要找到一种方法让它们在图表 upgrade/install 时间可用,以覆盖图表模板默认 values.yaml.

一种方法是通过 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找到系统的OS