我目前正在使用 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
Run Code Online (Sandbox Code Playgroud)
这不会起作用,因为 Helm 期望values.yaml在子图中出现。
我现在的解决方法是在 subchart/values.yaml 中使用 if-else-construct 并将其设置为父 value.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 }}
Run Code Online (Sandbox Code Playgroud)
parent/values-local.yaml
global:
env:
local: true
parent/values-prod.yaml …Run Code Online (Sandbox Code Playgroud)