我目前正在使用 Helm 在 Kubernetes 集群中部署我的应用程序。现在我还需要能够针对不同的环境修改 values.yaml 文件中的一些参数。
对于只有一个级别的简单图表,这很容易通过使用不同的 values-local.yaml 和 values-prod.yaml 并将其添加到helm install
标志中,例如helm install --values values-local.yaml
.
但是如果我有第二层子图表,也需要区分多个环境之间的值,我无法设置自定义 values.yaml。
假设以下结构:
| chart
| Chart.yaml
| values-local.yaml
| values-prod.yaml
| charts
| foo-app
| Chart.yaml
| values-local.yaml
| values-prod.yaml
| templates
| deployments.yaml
| services.yaml
这将不起作用,因为 Helm 需要一个values.yaml
in 子图表。
我现在的解决方法是在 subchart/values.yaml 中有一个 if-else-construct 并将其设置为父 values.yaml 中的全局变量。
*foo-app/values.yaml*
{{ - if .Values.global.env.local }}
foo-app:
replicas: 1
{{ else if .Values.global.env.dev}}
foo-app:
replicas: 2
{{ end }}
parent/values-local.yaml
global:
env:
local: true
parent/values-prod.yaml
global:
env:
prod: true
但我希望有更好的方法,所以我不需要依赖这些自定义标志。
我希望你能帮助我解决这个问题。