Helm中$.Values与.Values的区别及使用差异咨询
.Values.varName 与 $.Values.varName 的区别 在Helm Chart模板中,两者都用于引用Values.yaml里的配置变量,但核心差异在于上下文作用域的指向:
核心差异:上下文.的变化
.Values.varName依赖当前模板的局部上下文:.代表当前作用域的对象,一旦进入循环(range)、子模板(include/template)或with语句等场景,.的指向会切换到局部对象,此时.Values可能无法正确访问全局配置。$.Values.varName绑定全局上下文:$是Helm模板的全局根上下文引用,无论当前处于什么局部作用域,它始终指向模板的顶层上下文,因此能稳定访问全局的Values.yaml配置。
场景示例
错误用法(局部作用域中用.Values)
在range循环内,.指向当前循环的容器对象,此时.Values.appName会试图从当前容器对象中找Values字段,结果要么报错,要么拿到错误值:
containers: {{- range .Values.containers }} - name: {{ .Values.appName }} # 此处错误!·指向循环中的单个容器对象 image: {{ .image }} {{- end }}
正确用法(局部作用域中用$.Values)
用$强制引用全局上下文,就能正确获取到Values.yaml里的appName:
containers: {{- range .Values.containers }} - name: {{ $.Values.appName }} # 此处正确!$始终指向全局上下文 image: {{ .image }} {{- end }}
总结
- 在模板顶层全局作用域时,两者效果完全一致。
- 一旦进入局部作用域(循环、子模板等改变
.指向的场景),必须使用$.Values.varName才能确保访问到全局的Values配置。
内容的提问来源于stack exchange,提问作者Sathish Kumar
相关产品推荐
相关产品推荐

