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

时间:2019-03-29 21:29:36

标签: kubernetes-helm

我正在写一张使用stable/redis图表作为子图的头盔图表。

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

我正在使用头盔2.12.3

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

storage:
  storageClasses:
    name: azurefile

redis:
  usePassword: false
  master:
    persistence:
      storageClass: {{ $.Values.storage.storageClasses.name }}

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

由于这是一个公共图表,因此无法按照the documentation

中的描述将其修改为依赖于全局值

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

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

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

storage:
  storageClasses:
    name: azurefile

redis:
  master:
    persistence:
      storageClass: azurefile

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

例如像这样

helm install --set storage.storageClasses.name=foo mychart

而不是

helm install --set storage.storageClasses.name=foo --set redis.master.persistence.storageClass mychart

1 个答案:

答案 0 :(得分:0)

正如您正确提到的那样,掌舵值文件是纯Yaml文件,不能包含任何模板。对于您的用例,您还需要对价值文件使用模板系统,这基本上意味着您还在旅途中生成价值文件。我建议您看看helmfile。这使您可以在多个图表和应用程序环境之间共享值文件。