如何使用 Kustomize 部分更改叠加中的值

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

我正在寻找一种优雅的解决方案来处理覆盖层上的 helpmp 包的不同值:

  • 我们有一个基本文件夹,以及与环境相对应的覆盖文件夹 stg 和 prod
  • 我想使用带有一长串值的舵图。
    • 这些值的一部分对于所有环境都是相同的 - 通用值。
    • 其中部分值在每个环境中都不同。

我想要一个包含通用值的值文件和一个包含其他环境特定值的文件。

这里的目标是避免在每个目录中复制粘贴通用值。

我已经尝试过的:

  1. common_config.yaml
    中的
    /base/common_config.yaml
    /stg/kustomize.yaml
    中的
    helmCharts
    字段中的
    valuesFile
    设置为
    ../base/common_config.yaml
    ,但当启用
    --load-restrictor
    时(这是默认设置),它将失败。
  2. 在基础 kustomize 上使用
    HelmChartInflationGenerator
    并在此资源上使用修补程序来添加自定义值文件 - 但这与上面有相同的问题。
  3. 我知道我可以在基础图像上渲染 helm,然后使用修补来更改内容 - 问题是它需要更改许多字段并且不可维护。

也许有更好的方法来处理这种情况?

kubernetes kubernetes-helm kustomize
1个回答
0
投票

鉴于您正在使用 Kustomize 的

helmCharts
并且您希望避免不同环境中公共值的重复,您可能会考虑:

  • 将常用配置存储在 YAML 文件中,该文件将用作 Helm 图表的基值。
  • 为每个环境(例如,登台、生产)创建包含附加的、特定于环境的值的覆盖目录。
  • 在每个覆盖层的
    kustomization.yaml
    中指定通用值文件和环境特定值文件。这将允许 Kustomize 在生成 Helm 图表的最终配置时合并这些值。

这受到来自 Tharuka Mannapperuma 的“使用 Kustomize 使用 Helm Charts 生成 Kubernetes 清单”的启发。

假设项目结构与此类似:

project/ │ ├── base/ │ └── common_values.yaml │ ├── overlays/ │ ├── stg/ │ │ ├── kustomization.yaml │ │ └── stg_values.yaml │ └── prod/ │ ├── kustomization.yaml │ └── prod_values.yaml
你会:

  • common_values.yaml

    ,所有环境中通用的价值观。

  • 叠加自定义:

    • stg/kustomization.yaml

      :

      ```yaml resources: - ../../base/common_values.yaml helmCharts: - name: your-helm-chart releaseName: chart-release-stg valuesFile: stg_values.yaml ```
      
      
    • prod/kustomization.yaml

      :

      ```yaml resources: - ../../base/common_values.yaml helmCharts: - name: your-helm-chart releaseName: chart-release-prod valuesFile: prod_values.yaml ```
      
      
Kustomize 将使用

common_values.yaml

 中的值作为基础,并将它们与 
stg_values.yaml
prod_values.yaml
 中为各自环境指定的值合并。这是通过覆盖层 
valuesFile
helmCharts
 部分中的 
kustomization.yaml
 字段实现的。请参阅
HelmChartInflationGenerator

使用

kubectl kustomize

 时,
--load-restrictor
 标志可以防止从 kustomization 根外部加载文件。

在这里,您的项目的结构方式是通用值文件始终位于每个环境的自定义根中。

当您从

kubectl kustomize overlays/stg

 目录运行 
kubectl kustomize overlays/prod
project
 时,
project
 目录将成为 kustomization 的根目录。
因此,允许从 
../../base/common_values.yaml
overlays/stg/kustomization.yaml
 引用 
overlays/prod/kustomization.yaml
,因为 
base
 目录位于 kustomization 根 (
project
) 的范围内。

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