如何从父Helm Chart访问依赖子Chart内定义的模板或代码块
报错根因
Bitnami 10.x 版本的 MongoDB Chart 已将 mongodb.service.nameOverride 这类内部辅助模板调整为私有状态,不会对外暴露给父Chart调用,所以会触发模板不存在的报错。
可用解决方案
方案1:按规则直接拼接服务名(最稳定)
Bitnami MongoDB 的 Headless 服务名遵循固定拼接规则,无需调用子Chart模板即可直接生成:
默认规则为 [Release名称]-mongodb-headless,如果你在values中为MongoDB配置了nameOverride或者fullnameOverride,替换对应的前缀即可。
示例配置:
- name: MONGO_HOST value: {{ printf "%s-mongodb-headless" .Release.Name }}
方案2:调用子Chart公开的公共模板
10.x版本的MongoDB Chart对外公开了mongodb.fullname公共模板,可以配合作用域参数调用后拼接服务名:
如果未自定义子Chart作用域,直接使用:
- name: MONGO_HOST value: {{ include "mongodb.fullname" . }}-headless
如果你将MongoDB的参数配置放在了父Chart values的mongodb字段下,需要传入子Chart的作用域:
- name: MONGO_HOST value: {{ include "mongodb.fullname" .Subcharts.mongodb }}-headless
使用该方案前请先执行helm dependency build,确保依赖的MongoDB Chart已完整拉取到本地charts/目录下。
方案3:修改子Chart模板导出(不推荐)
如果必须使用原模板,可手动修改charts/mongodb/templates/_helpers.tpl文件,将mongodb.service.nameOverride模板标记为可导出,但该修改会在后续更新依赖时被覆盖,仅可作为临时调试方案使用。
内容的提问来源于stack exchange,提问作者Josh Beauregard
相关产品推荐
相关产品推荐

