Helm:如何使用父图表覆盖子图表的值?

问题描述 投票:0回答:1

我们有这样的保护伞结构:

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

我希望能够根据子图表的不同环境(dev,prod)使用不同的值文件来部署整个伞

  1. 仅与values.yaml一起安装的app2
  2. 要与values.yaml和values / dev.yaml一起安装的app2

有可能吗?

kubernetes kubernetes-helm
1个回答
2
投票

不可能,但是有一种变通办法可以实现此功能,需要更改目录结构。在阅读任何其他内容之前,请先在此处查看类似的问题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/

© www.soinside.com 2019 - 2024. All rights reserved.