我目前正在使用Helm在Kubernetes集群中部署我的应用程序。现在我还需要能够修改values.yaml文件中针对不同环境的一些参数。
对于只有一个级别的简单图表,通过使用不同的值-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
。
我现在的解决方法是在子图/ 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
但我希望有一个更好的方法,所以我不需要依赖这些自定义标志。
我希望你能帮助我解决这个问题。
答案 0 :(得分:1)
我将如何做(参考overriding values):
...
replicas: 1
...
...
spec:
replicas: {{ .Values.replicas }}
...
然后,在主图表的值文件中:
foochart:
replicas: 1
foochart:
replicas: 2
答案 1 :(得分:0)
只是一个想法,需要更多地充实......
在KubeCon,我看到了a talk,他们在那里引入了名为Lostromos的Kubernetes运算符。我们的想法是简化部署以支持多种不同的环境,并使维护这些事情变得更容易。它使用Custom Resource definitions。我想知道你是否可以在这种情况下利用Lostromos。您的子图表只有一个$?|
,但使用lostromos and a CRD to feed in the properties you need。因此,您将部署CRD而CRD将触发Lostromos部署您的Helm图表。
只是为了让想法得以实现,但似乎值得探索。
答案 2 :(得分:-1)
我目前正在从稳定/詹金斯获得图表,并正在尝试设置values.yaml文件。我进行了适当的更改,然后尝试运行'helm install -n --values = stable / jenkins,但是它将继续安装默认值,而不是我创建的修改后的yaml文件。更具体地说,我注释了yaml文件中的插件要求,因为它导致我的pod状态保持在Kubernetes上的“ Init:0/1”上。