You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:42:35