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 的差异,避免升级后隐性变更。