舵-以编程方式覆盖子图表values.yaml

Mic*_* F. 5 kubernetes-helm

我正在写一个使用稳定/ redis图作为子图的头盔图。

我需要覆盖图表中和Redis图表中用于两个微服务的存储类名称。

我正在使用头盔2.12.3

我希望能够根据模板来指定redis.master.persistence.storageClass,像这样

storage:
  storageClasses:
    name: azurefile

redis:
  usePassword: false
  master:
    persistence:
      storageClass: {{ $.Values.storage.storageClasses.name }}
Run Code Online (Sandbox Code Playgroud)

据我了解,values.yaml不支持模板

由于这是一个公共图表,因此我无法对其进行修改以依赖于文档中此处所述的全局值

我考虑{{ $.Values.redis.master.persistence.storageClass }}在图表中的其他地方使用,而不是{{ $.Values.storage.storageClasses.name }},但这是:

  • 不隐藏我图表的依赖关系的复杂性
  • 如果要添加另一个子图依赖项,则无法缩放

在我的values.yaml文件中,我有:

storage:
  storageClasses:
    name: azurefile

redis:
  master:
    persistence:
      storageClass: azurefile

Run Code Online (Sandbox Code Playgroud)

我想在values.yaml中指定一个值,该值可以在图表部署时覆盖。

例如这样

helm install --set storage.storageClasses.name=foo mychart
Run Code Online (Sandbox Code Playgroud)

而不是

helm install --set storage.storageClasses.name=foo --set redis.master.persistence.storageClass mychart
Run Code Online (Sandbox Code Playgroud)

muk*_*esh 2

正如您正确提到的,helm 值文件是普通的 yaml 文件,不能包含任何模板。对于您的用例,您还需要为值文件使用模板系统,这基本上意味着您还可以随时生成值文件。我建议看一下helmfile。这使您可以跨多个图表和应用程序环境共享值文件。