首页/开发/CI/CD 与发布速查/Helm values 分环境
环境与配置管理60 条

Helm values 分环境

同一 chart 用多份 values 描述环境差异:命令行上的多个 --values 按顺序覆盖(后者优先),--set 仅用于少量临时覆盖。

CI/CD 与发布速查开发更新于 2026-10-13

Helm values 分环境是什么

Helm 让同一份 chart 用多份 values 文件描述环境差异:命令行传多个 --values(或 -f),右侧文件覆盖左侧同名键;--set 用于少量临时覆盖。推荐层级是 values.yaml(默认值)→ values-<env>.yaml(环境差异)→ 受控的 --set(临时项),越靠后的优先级越高。发布前用 helm template --debug 渲染出完整清单核对——渲染后的结果才是真正要下发的对象,而不是文件里的片段。

基本信息

顺序helm -f base.yaml -f prod.yaml:右侧文件覆盖左侧同名键
实践values.yaml(默认)→ values-<env>.yaml(差异)→ 受控的 --set
核查helm template --debug 渲染核对最终值
原子性--atomic 失败自动回滚;--timeout 设发布超时

典型使用场景

  • 多环境发布:chart 一套,values 按 dev/staging/prod 分层。
  • 发布核对:渲染产物 diff 上一次发布,确认实际变化范围。
  • 回滚:helm rollback 基于 revision 历史回退,发布记录清晰。
  • 参数审计:环境差异集中在 values 文件,评审可见。
  • CI 集成:流水线按环境注入对应 values,部署命令保持一致。

示例

示例
helm upgrade --install app ./chart \
  -f values.yaml -f values-prod.yaml \
  --namespace prod --atomic --timeout 10m
# 渲染核对:
helm template app ./chart -f values.yaml -f values-prod.yaml

覆盖层级读法

来源优先级建议
values.yaml最低放通用默认值
values-<env>.yaml中放环境差异,入库存档
--set最高仅临时少量覆盖
--atomic/--timeout控制项生产默认开启
渲染后的完整清单才是事实:发布前用 helm template 输出并差异对比,避免「以为改了但没生效」。
chart 版本与应用版本分开管理:chart 自身变更(模板逻辑)与镜像版本升级是两类发布,回滚时要能区分。
条件渲染差异要纳入核对:values 里开关控制的资源(如 ingress.enabled)在不同环境取值不同,渲染 diff 时把「资源有无变化」也检查一遍。
与 GitOps 配合有两条路线:控制器直接渲染 chart,或 CI 渲染后提交清单;前者实时、后者产物可审,按团队审计要求选择。
诊断发布问题先看渲染产物:helm get manifest 对照实际下发内容,比逐行读 values 更快定位差异来源。
复杂嵌套结构不要用 --set 硬塞:数组下标与逗号转义规则(a[0]、a.b=1,2)容易踩坑,多键嵌套改放 values 文件或改用 --set-json,发布前照样渲染核对。
升级 chart 前先 helm show values 看新默认值:chart 大版本可能改默认行为,对比新默认值与自家 values 的差异,避免升级后隐性变更。

易错点

  • 过度依赖 --set:不在版本库、无人评审,重大差异回到 values 文件。
  • 同名键在多文件里重复定义:覆盖关系靠记忆,渲染核对是真章。
  • 忽略 --atomic:发布失败停在半更新状态,生产默认开启失败回滚。
  • values 里放明文密钥:应引用外部密钥机制(Secret 引用或加密方案),仓库不是保险箱。
  • chart 与 values 不兼容升级:chart 大版本变更先读迁移说明,在测试环境渲染验证。

数据来源与参考

  • Helm 文档《Values Files》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌