【问题标题】:How to get the name of a child chart with Helm?如何使用 Helm 获取子图表的名称?
【发布时间】:2018-05-22 18:20:49
【问题描述】:

我有一个需要 stable/redis 作为子图的舵图。父chart需要将redis服务暴露为环境变量。

redis 图表包含一个名为redis.fullname 的模板。我如何在我的父图表中引用它? IE。我想在我的父部署中使用这样的东西,但它不起作用:

kind: Deployment
spec:
  template:
    containers:
        env:
        - name: REDIS_CLUSTER_SERVICE_HOST
          value: {{ template "redis.fullname" . }}

【问题讨论】:

  • 我想我有一个非常相似的问题。问题在这里:stackoverflow.com/questions/47757968/… - 查看问题下方的更新,这就是我目前处理的方式(我用我知道的名称覆盖子图表的模板定义)

标签: kubernetes kubernetes-helm


【解决方案1】:

您可以在父图表中使用'{{ .Release.Name }}-redis'。我有同样的要求。这是我的例子,如果你想看看 ->https://github.com/kubernetes/charts/tree/master/incubator/distribution

【讨论】:

  • 这破坏了模板的想法。请参考我的回答。
【解决方案2】:

模板现在可以在父图表和子图表之间共享。 参考这个-https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md#sharing-templates-with-subcharts

我看到的问题是:

如果您的redis.fullname 模板使用两个图表中具有相同名称但具有不同值的变量(例如:.Values.commonVariable),则在父图表中引用它时,将使用的值将属于父图表,而不是子图表。

考虑一下:

{{- define "zookeeper.fullname" -}}
{{- printf "%s-%s" (.Values.component) (.Values.subcomponent) -}}
{{- end -}}

虽然我希望在kafka(父)图表中引用我的zookeeper.fullname。但是.Values.component.Values.subcomponent将用于kafka而不是用于zookeeper(子图),这完全破坏了这个想法。

在这种特定情况下,出路将是使用 Jainish Shah 的答案。但如果不是这种情况,请不要遵循该答案。这破坏了模板的想法。如果您应该以任何方式更改子图表中的模板函数,您还需要修改父图表中的值{{ .Release.Name }}-redis。这不是模板。

上述问题的链接 - https://github.com/kubernetes/helm/issues/4314

【讨论】:

    【解决方案3】:

    改进 Akash 的答案,您可以尝试模拟正确的范围。这也仅在您知道子模板使用哪些变量时才有效,但可能更稳定一些:

    {{ template "redis.fullname" (dict "Values" $.Values.redis "Chart" (dict "Name" "redis") "Release" $.Release) }}
    

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 2020-09-11
      • 2020-03-29
      • 1970-01-01
      • 2021-09-25
      • 2021-12-06
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      相关资源
      最近更新 更多