如何使用Helm获取子图表的名称?

时间:2017-12-08 13:34:42

标签: kubernetes kubernetes-helm

我有一个头盔图表,需要stable/redis作为子图表。父图表需要将redis服务公开为环境变量。

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

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

3 个答案:

答案 0 :(得分:1)

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

,这是我的示例

答案 1 :(得分:1)

现在可以在父级和子级图表之间共享模板。 请参阅-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 -}}

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

在这种情况下,解决方法是使用Jainish Shah的答案。但是,如果不是这种情况,请不要遵循该答案。这破坏了模板的想法。如果要以任何方式更改子图中的模板功能,则还需要修改父图表中的值{{ .Release.Name }}-redis。这不是模板。

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

答案 2 :(得分:0)

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

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