我正在寻找一种优雅的解决方案来处理覆盖层上的 helpmp 包的不同值:
我想要一个包含通用值的值文件和一个包含其他环境特定值的文件。
这里的目标是避免在每个目录中复制粘贴通用值。
我已经尝试过的:
common_config.yaml
中的 /base/common_config.yaml
和 /stg/kustomize.yaml
中的 helmCharts
字段中的 valuesFile
设置为 ../base/common_config.yaml
,但当启用 --load-restrictor
时(这是默认设置),它将失败。HelmChartInflationGenerator
并在此资源上使用修补程序来添加自定义值文件 - 但这与上面有相同的问题。也许有更好的方法来处理这种情况?
鉴于您正在使用 Kustomize 的
helmCharts
并且您希望避免不同环境中公共值的重复,您可能会考虑:
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
```
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
) 的范围内。