首先,提供一些背景知识:我有4个Kubernetes集群,每个集群用于每个环境(开发,登台,测试,生产)。每个集群都有自己的values.yaml
文件,其中包含我们编写的所有头盔图表的特定于环境的配置。
因此,当我们的CD管道将mychart
部署到develop
集群时,它实际上将执行以下操作:
helm install -f base-values.yaml -f develop-values.yaml ./mychart.tgz
现在,我们假设mychart
有一个requirements.yaml
文件,该文件指定the mongodb chart作为子图依赖项。 mongodb图表参考,例如.Values.mongodbRootPassword
。当mychart
包含在子图中时,我可以在.Values.mongodb.mongodbRootPassword
的默认mychart
中设置values.yaml
来更改此值。
我的问题是,考虑到我当前的CD流水线,如果我在.Values.mongodb.mongodbRootPassword
中设置develop-values.yaml
,则会对部署到{{ 1}}群集-不仅是develop
。
所以,我的问题:
mychart
文件,如何在特定于群集的values.yaml
文件之一中设置mychart
的mongodb的根密码?答案 0 :(得分:1)
- 使用每个环境的
values.yaml
文件,如何在特定于群集的mychart
文件之一中设置values.yaml
的mongodb的根密码?
您可以使用install
中的--set
选项覆盖YAML文件
示例:
helm install -f base-values.yaml -f develop-values.yaml --set someSection.someValue=1234 ./mychart.tgz
然后,您可以使用环境设置来设置CI命令调用,并且只有一个YAML。
- 这有可能吗?还是我当前的CD方法(每个环境值文件)是一种反模式?
不是,这是一个功能:-)
- 如果这不可能或不适合使用反模式,您将如何在每个环境中设置掌舵单个图表和子图表的值?
那也很好。也许,如果您的基础架构发展迅速,并且您拥有许多环境,应用程序或其他,那么这可能会更好地进行管理。
答案 1 :(得分:0)
我创建了一个命名模板(在_helpers.tpl中),该模板将values.yaml中定义的一组默认值与它们自己文件中定义的一组env特定值组合在一起。这让我20+设置默认值,然后与ENV文件来覆盖它们而不将它们设置为CLI命令的一部分。我想避免使用cli来覆盖值,因为这变得很复杂并且不提供跟踪(即我的env特定文件位于git中)。