有没有办法指定在舵图中使用哪个值文件

Is there a way to specify which values file to use in a helm chart

在我们的一个 helm 图表中,每个环境都有一个值文件,例如

app-helm-chart:
  dev-values.yaml
  test-values.yaml
  Chart.yaml
  templates
    deployment.yaml
    service.yaml
    ingress.yaml
  Readme.md

我们已经使用 helm package 打包了 helm chart,然后尝试从我们的 helm 存储库安装它。

有没有办法指定在安装命令中使用包内的 dev-values 文件?

如果可能,尝试将所有值和模板打包并版本化在一个地方。

谢谢

是的。

helm install -f dev-values.yaml ./mychart

https://helm.sh/docs/chart_template_guide/values_files/

这个问题有两个答案。

第一个,使用当前的包和存储库设置,您需要下载并解压缩包,然后从图表文件夹中调用值文件

helm repo add test-repo http://url/to/your repo
helm repo update
helm fetch test-repo/my-chart-name untar [--version x.x.x]  #This creates a directory called "my-chart-name" in the local directory
helm upgrade --install --atomic --wait ./my-chart-name/ -f ./mychart-name/dev-values.yaml

第二种更好的方法,Gaël J 已经暗示过,就是不要在图表中包含 environment-specific 值——因为如果这样做,每次更改值或添加新值时,您需要重新打包图表并更新图表存储库。

更好的方法,我们这样做的方法是有一个单独的文件夹,像这样

.
├── charts
│   └── my-chart
│       ├── Chart.lock
│       ├── charts
│       │   └── ingress-nginx-3.35.0.tgz
│       ├── Chart.yaml
│       ├── README.md
│       └── templates
│           ├── deployment.yaml
│           ├── _helpers.tpl
│           ├── ingress.yaml
│           ├── NOTES.txt
│           ├── serviceaccount.yaml
│           └── service.yaml
├── profiles
│   ├── values-preprod.yaml
│   └── values-prod.yaml

通过这种方式,我可以自由更新配置文件 yaml,然后使用本地(或远程)图表 -- 图表内容或版本不需要在我更新值时更改。

helm upgrade --install --atomic --wait ./charts/my-chart -f profiles/values-preprod.yaml

helm upgrade --install --atomic --wait test-repo/my-chart -f profiles/values-preprod.yaml