【问题标题】:What is the best practice for overriding values in helm subcharts on a per-cluster basis?在每个集群的基础上覆盖 helm 子图中的值的最佳实践是什么?
【发布时间】:2019-06-03 08:34:11
【问题描述】:

首先,有一点背景:我有 4 个 Kubernetes 集群,每个环境(开发、登台、测试、生产)一个。每个集群都有自己的 values.yaml 文件,其中包含我们编写的所有 helm 图表的特定于 env 的配置。

因此,当我们的 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 包含为子图表时,我可以在mychart 的默认values.yaml 中设置.Values.mongodb.mongodbRootPassword 以更改此值。

我的问题是,鉴于我当前的 CD 管道,如果我在 develop-values.yaml 中设置 .Values.mongodb.mongodbRootPassword,它将被部署到 develop 集群的 所有 mongodb 实例使用 - 不是只是mychart 的。

所以,我的问题:

  • 使用每个环境的values.yaml 文件,我将如何在集群特定的values.yaml 文件之一中设置mychart 的mongodb 的root 密码?
  • 这甚至可能吗?还是我当前的 CD 方法(每个环境值文件)是一种反模式?
  • 如果这是不可能的或反模式,您将如何根据每个环境设置掌舵单个图表和子图表的值?

【问题讨论】:

    标签: kubernetes continuous-deployment configuration-management kubernetes-helm


    【解决方案1】:
    • 使用每个环境的values.yaml 文件,我将如何在集群特定的values.yaml 文件之一中设置mychart 的mongodb 的root 密码?

    您可以使用 install 中的 --set 选项覆盖 YAML 文件

    示例:

    helm install -f base-values.yaml -f develop-values.yaml --set someSection.someValue=1234 ./mychart.tgz

    然后,您可以使用环境设置设置 CI 命令调用,并且只需一个 YAML。

    • 这甚至可能吗?还是我当前的 CD 方法(每个环境值文件)是一种反模式?

    不,这是一个功能:-)

    • 如果这是不可能的或反模式,您将如何根据每个环境设置掌舵单个图表和子图表的值?

    这也很好。或许,如果您的基础架构发展迅速,并且您有很多环境、应用程序或其他,这可能会更好地管理。

    【讨论】:

      【解决方案2】:

      我创建了一个命名模板(在 _helpers.tpl 中),它将 values.yaml 中定义的一组默认值与它们自己的文件中定义的一组 env 特定值组合在一起。这允许我设置 20 多个默认值,然后使用 env 文件覆盖它们,而不将它们设置为 cli 命令的一部分。我想避免使用 cli 覆盖值,因为这会变得复杂并且不提供跟踪(即我的 env 特定文件在 git 中)。

      【讨论】:

      • 您能否编辑您的答案以提供一些示例代码,或链接到有问题的存储库?谢谢!
      猜你喜欢
      • 2019-10-23
      • 2019-01-25
      • 2015-10-04
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多