Kubernetes

Helm Values Diff看清覆盖值最终改变了什么

默认配置、旧覆盖、新覆盖分别保存,比较两份有效配置,也可检查原始声明。

Helm Values Diff

旧覆盖

差异

三份输入均在当前浏览器处理,不上传配置内容。

默认遮蔽输出值;路径与键名仍可见。编辑器和替换预览保留原文,脱敏 YAML 仅供审阅。

Helm 3.19.0 单 chart:默认值分别与旧、新覆盖合并。映射递归合并,数组整体替换;差异按数组索引比较。

每栏 200,000 字符、20,000 节点、60 层;报告最多 5,000 条变化和 400 万字符,计算限时 5 秒。

输入配置或运行比较。

Helm Values Diff 适合排查一种容易误读的修改:从环境配置中删掉一行,应用里的设置却没有消失,而是恢复成 chart 默认值。把默认 Values 文件放进基线后,可以分别检查旧版和新版的有效结果;需要核对作者到底删了哪些声明时,再切换到原始覆盖模式。

为什么使用 Helm Values Diff

看见被重新继承的默认值

Helm Values Diff 把同一份默认配置分别与两份覆盖值合并。新版没有声明副本数时,使用默认副本数,不会继承旧版覆盖的数值。这种 Helm values 合并预览能解释文件改动与最终配置之间的差别。

一个共享配置树连接两条独立覆盖分支,移除覆盖叶节点后显示继承的默认节点。

隐藏值之后仍然知道发生过修改

先用真实值判断差异,再遮蔽报告中的标量。因此旧密码与新密码即使显示成相同占位标记,也仍有一条修改记录。新增对象和数组里的嵌套值同样会被遮蔽,方便把变更范围交给同事审核。

两个不同颜色的数值块经过遮罩后被覆盖,旁边的修改标记仍然保留。

先确定这次审阅要回答的问题

01

区分默认配置和环境覆盖

左侧三个入口各自保存一份文本。默认栏放 chart 自带的配置,旧版和新版各放一份完整环境覆盖。空白栏按空映射处理;只有三栏全空时才提示输入。新版始终独立计算,不会叠加在旧版上。

02

在声明和有效值之间切换

默认检查有效值;原始覆盖模式能看见最终效果相同、写法却发生变化的声明。右侧旧合并与新合并视图始终显示有效配置。切换输入页签不会丢失内容,切换结果页签也不会改变比较方向。

03

确认导出的视图与新鲜度

自动对比等待输入停顿 350 毫秒。关闭后可点击对比或使用 Ctrl/Cmd+Enter。改输入或参数会立即禁用旧报告导出;复制与下载使用当前结果视图。示例、清空、交换都先预览替换内容和字符数量,应用后可撤销一次。

把路径、类型和覆盖效果放在一起

递归合并映射,整体替换列表

嵌套映射保留未被覆盖的默认子键;空映射不会清除已有默认子项。数组和标量按覆盖值替换,空数组可替换原来的非空数组。false、数字零和空字符串都是真实值,不会被当成缺失。

清楚标出新增、删除与修改

每条差异使用 JSON Pointer 路径,并保留前后类型。不存在的键与 null 不相同,字符串数字也不等于数值。路径中的斜杠编码为 ~1,波浪号编码为 ~0,空键也有对应路径。

忽略格式噪声,保留顺序语义

结构比较忽略注释、空白与映射键顺序。数组合并时整组替换,比较时则按索引对齐;在开头插入元素可能造成后续多个位置变化,不会被猜测为按名称移动或追加。

输出完整的审阅资料

差异 JSON 包含模型版本、对比模式、脱敏状态、全部差异及两份有效 YAML。合并视图只导出当前版本。界面先显示 50 条差异,可继续展开,复制与下载始终包含完整结果。

解析与合并的真实边界

限定为单个 chart 的值预览
合并模型固定为 Helm 3.19.0 的单 chart 情况,不模拟子 chart、global 传播、依赖条件或 import-values。不会执行 Go 模板、tpl、lookup 或任何脚本,不连接集群、不读取 release,也不进行 schema 校验。
使用明确的 YAML 输入子集
每栏只接受一份 YAML 1.2 core 根映射且键必须是字符串。重复键、复杂键、指令、显式标签、锚点、别名和 << 键都会报错。yes、on 等存在版本歧义的裸词请加引号;数字使用普通 JSON 十进制写法,只接受有限数和安全整数,拒绝下溢,其他小数按双精度处理。
空值删除需要对应默认键
只有在递归合并中找到同名默认键时,覆盖中的 null 才删除这个键。默认配置里没有的新键、新映射内部的空键,以及替换数组中的空元素仍保留 null。省略覆盖键会继承默认值,不等于删除,也不会统一清理所有空值。
脱敏报告并非可部署配置
开启遮蔽时,所有非 null 标量都会换成带类型的标记,包括数字、布尔和普通非敏感字符串。键名、路径、层级、数组结构和 null 仍然可见,所以不是完全匿名化。原始编辑器及替换预览不脱敏,关闭遮蔽后导出才含实际值。
超限停止,文件顺序由调用者整理
每栏上限为 200,000 字符、20,000 节点、60 层深度及累计 100 万路径字符;报告最多 5,000 条变化、400 万字符,计算超过 5 秒停止。超限不会导出部分结果。本页不编排多个 -f 文件,不解析 --set,不模拟 reuse/reset-values,也不导入网址或保留原始注释排版。

Helm Values Diff 常见问题

执行 helm upgrade 之前怎样查看变化?

先在这里检查 values 层,再用 helm diff 或现有发布流程检查渲染后的清单。即使有效值没有差异,模板、chart 版本和集群能力变化仍可能导致资源不同,不能据此断言升级没有影响。

默认文件和环境文件的同名值,哪一个优先?

环境覆盖优先;嵌套映射只覆盖声明的子键,其余继续继承默认值。本页每个版本只有一份覆盖输入,多个文件应先按实际发布顺序整理,再放入对应栏。旧版不会作为新版的额外默认层。

为什么列表没有逐项合并?

Helm 把该键下的列表整体替换,不按名称匹配对象,也不自动追加元素。差异视图随后按索引比较两份结果,所以可能看到多个位置变化;这只是报告方式,不是列表合并规则。

怎样取消 chart 默认配置中的某个键?

在对应覆盖位置显式写 null;只删去覆盖声明会重新继承默认值。如果默认映射中原本没有该键,新增的 null 会被保留。因此默认键被删除与新键的值为空,是两种不同结果。

能否隐藏密码,同时知道密码是否修改?

可以。保持遮蔽开启,差异先按原值计算,再显示类型标记。报告不会只遮蔽疑似密码,也会隐藏普通标量值;分享前仍需检查可见的键名和路径,避免它们本身包含敏感内容。

有需要反馈的配置对比场景?

核对两份配置的实际效果

用 Helm Values Diff 把覆盖声明和最终有效值分开检查,再选择需要交给审阅者的报告视图。