【问题标题】:Helm: How to overrride the values of subcharts using parent chart?Helm:如何使用父图表覆盖子图表的值?
【发布时间】:2020-09-11 06:53:11
【问题描述】:

我们有一个这样的伞形结构:

 -app1
  templates/...
  values.yaml
 -app2
  templates/...
  values.yaml
  values/dev.yaml

我希望能够根据子图表的不同环境(开发,产品)部署具有不同值文件的整个伞

  1. app2 仅使用 values.yaml 安装
  2. app2 与 values.yaml 和 values/dev.yaml 一起安装

这可能吗?

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    不,这是不可能的,但是有一种解决方法可以实现该功能,需要更改目录结构。在进一步阅读之前,请在此处查看类似的问题 How to set environment related values.yaml in Helm subcharts?

    上述场景可以通过如下目录结构实现:

    test-umbrella - Chart.yaml
          - values.yaml
          - requirements.yaml
          - charts - test-dev - Chart.yaml
                               - values.yaml
                   - test-prod - Chart.yaml
                               - values.yaml
          - templates - deployment.yaml
                      - _helpers.tpl
                      - secret.yaml
    

    图表依赖项应该这样定义: requirements.yaml

    dependencies:
      - name: tesy-dev
        repository: "file://charts/test-dev"
        version: ">= 0.0.1"
        tags:
          - dev-values
        import-values:
          - data
    
      - name: test-prod
        repository: "file://charts/test-prd"
        version: ">= 0.0.1"
        tags:
          - prd-values
        import-values:
          - data
    

    父图表的 values.yaml 文件应包含如下值:

    values.yaml

    # Default values
    
    tags:
      dev-values: false
      prd-values: false
    

    最后你应该使用以下标志安装它 --set tags.dev-values=true

    在伞形图中,您必须有一个父 values.yaml 文件。如果你在那里定义你的键,那么子图表的值将被它覆盖。

    因此您可以在子图表外部使用 values-dev.yaml 来覆盖内部子图表值。

    此外,由于父图表 values.yaml 中的环境,您应该拥有可以相应更改的所有值,以便可以轻松覆盖它们。

    请检查最佳实践和执行流程https://helm.sh/docs/chart_template_guide/subcharts_and_globals/

    【讨论】:

    • 我不确定它如何回答我的问题。我有 2 个不同的子图。应用程序 1 和应用程序 2。对于 app2,我想根据环境选择多个值文件。从您写的内容中,我知道您希望将环境作为子图表?
    • 没有子图可以是任何东西。但是,没有直接的命令可以在子图中使用不同的 values.yaml 文件。话虽如此,子图表中只能有一个同名的 values.yaml 文件。该文件应该有一些值的映射,因为 default: 应该有 default values.yaml 和 exception: 的所有值。然后在父 values.yaml 文件中,您应该拥有所有可以用 global: 键覆盖的条目。只有这样才能实现你想要的。
    • 如果您在子图表中有其他 values.yaml 文件,它将不会被使用并且没有任何好处。仅当您遍历到子图表目录并使用 -f 选择该 values.yaml 时才能使用它,但无法从父图表目录使用另一个值文件。
    • helm 中的文档仅显示了上述实现方式。文档中没有提到任何其他方式来做到这一点,因此不可能这么说。在那里创建一个 values 文件夹和一个 values.yaml,不,这不是 helm 的工作方式。
    • 好的,感谢您的澄清和解释。我想我会尝试您的建议并获得反馈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多