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

Kubernetes 如何使用Helm获得子图表的名称?,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我有一个需要stable/redis作为子图表的掌舵图。父图表需要将redis服务作为环境变量公开 redis图表包括一个名为redis.fullname的模板。我如何在我的家长表中引用此项?也就是说,我希望在父部署中使用类似的内容,但它不起作用: kind: Deployment spec: template: containers: env: - name: REDIS_CLUSTER_SERVICE_HOST value: {

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

redis图表包括一个名为
redis.fullname
的模板。我如何在我的家长表中引用此项?也就是说,我希望在父部署中使用类似的内容,但它不起作用:

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

您可以在父图表中使用
'{{.Release.Name}}-redis'
。我也有同样的要求。这是我的示例,如果您想查看->

模板现在可以在父图表和子图表之间共享。 请参阅—

我看到的问题是:

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

考虑这一点:

{{- define "zookeeper.fullname" -}}
{{- printf "%s-%s" (.Values.component) (.Values.subcomponent) -}}
{{- end -}}
尽管我希望我的
zookeeper.fullname
kafka
(父)图表中被引用。但是
.Values.component
.Values.subcomponent
将用于卡夫卡,而不是本案中的zookeeper(subchart),这完全破坏了这个想法

在这一具体案例中,解决办法将是使用贾尼什·沙阿的答案。但如果不是这样,请不要遵循这个答案。这破坏了模板化的想法。如果您应该以任何方式更改子图表中的模板函数,您还需要修改父图表中的值
{{.Release.Name}}-redis
。这不是模板


上述问题的链接-

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

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

我想我也有类似的问题。问题在这里:-看看问题下面的更新,这就是我目前处理的方式(我用我知道的名称覆盖子图表的模板定义),这破坏了模板化的想法。请参考我的答案。