审查 Kubernetes 清单变更
将旧的 Deployment、Service 或 ConfigMap YAML 粘贴到左侧,新版本粘贴到右侧,立即看到哪些字段发生了变化。副本数、镜像标签、资源限制——这些通常在 PR 中更改,很容易被忽略。在此 diff 可以让这些变化一目了然。
粘贴并并排比较两个 YAML 文档。YAML 语法高亮、tab 警告和实时验证内置其中。
一个免费的浏览器内工具,用于比较两个 YAML 文档。将旧版本粘贴到左侧,新版本粘贴到右侧,差异会逐行高亮显示。数据不会离开您的机器。
该工具理解 YAML 的结构:缩进、锚点、别名和多文档流。实时验证会检测常见的陷阱——意外的 tab 字符、尾随空白和解析错误——并在您输入时发出警告。
如果您曾在 GitHub PR 中盯着一个 Kubernetes Deployment,试图找出导致滚动更新失败的那个字段,这个工具能在几秒内帮您定位。对于 JSON 格式,JSON diff 处理键重排更干净。对于纯文本,我们的文本 diff 工具是更好的选择。
diff 在字符级别运行,然后通过语义后处理清理,使高亮落在有意义的 YAML 块上,而不是随机字节上。插入内容在右侧窗格以绿色显示,删除内容在左侧以红色显示。
YAML 有一些容易让人犯错的特性。键顺序在 YAML 映射中是未定义的,因此重新排列键在技术上不改变语义——但文本 diff 会将其标记为变更。在 diff 前格式化两侧以规范化顺序。此外,YAML 1.2 规范规定缩进必须使用空格,不能使用 tab。
YAML 的另一个微妙之处是布尔值解析。在 YAML 1.1 中,YES、NO、ON 和 OFF 被解析为布尔值。在 YAML 1.2 中,只有 true 和 false 是布尔值。如果您在两种规范的 YAML 之间进行 diff,这可能会导致意外的差异出现。
两个文本窗格,一个 diff。无需注册,无需上传,无需服务器往返。
将旧 YAML 粘贴到左侧,新 YAML 粘贴到右侧。或者点击任意一侧的上传直接加载 .yaml 或 .yml 文件。点击示例按钮,两个窗格都会填充一个 Kubernetes Deployment 示例。
如果任一侧有 tab 字符或尾随空白,验证条会在顶部标记出来。YAML 对此很挑剔:tab 字符作为缩进是规范明确禁止的,会导致大多数解析器出错。在 diff 前解决这些警告。
删除内容在左侧以红色高亮显示,插入内容在右侧以绿色高亮显示。滚动任意一侧,另一侧随之跟随。每个标题中的变更计数会告诉您 diff 找到了多少个不同的编辑。
将旧的 Deployment、Service 或 ConfigMap YAML 粘贴到左侧,新版本粘贴到右侧,立即看到哪些字段发生了变化。副本数、镜像标签、资源限制——这些通常在 PR 中更改,很容易被忽略。在此 diff 可以让这些变化一目了然。
GitHub Actions 工作流、GitLab CI 配置和 CircleCI 流水线都是 YAML。当流水线意外中断时,将当前配置与上次有效版本进行 diff,通常可以立即找到罪魁祸首:一个被修改的触发器条件,或一个被删除的密钥引用。
在 Helm 升级前,将旧的 values.yaml 与新版本进行 diff。这会显示哪些默认值发生了变化,以及您的自定义覆盖是否仍然适用。在升级大型 chart 时,这可以防止意外的配置漂移。
将两个版本的 Ansible task 列表或变量文件粘贴到这里,精确查看哪些 task 被添加、删除或修改。这比在 Git 中滚动大型 diff 要快得多,尤其是当变更分散在深层嵌套的 YAML 结构中时。
Terraform 的 .tfvars 文件通常是 YAML 格式。在将变量推送到生产环境之前,在此比较 staging 和 prod 的变量文件,捕获意外的差异,例如不同的区域端点或功能标志设置。
将旧的 docker-compose.yml 粘贴到左侧,新版本粘贴到右侧,查看服务定义、环境变量或挂载是否发生了变化。这对于在部署到生产环境之前捕获意外的配置更改特别有用。
关于此工具最常暴露的 YAML 解析边缘情况的简短速查表。所有内容均基于 YAML 规范和真实解析器行为。
| Topic | What this tool does |
|---|---|
| 缩进 | 只能使用空格,数量是有意义的。两个和四个空格都很常见;在一个文件中选择一种并坚持使用。维基百科上的 YAML 概述有很好的历史背景介绍。 |
| Tab | 规范禁止作为缩进使用。在标量值内部是允许的。如果您的编辑器在 .yaml 和 .yml 文件中按 Enter 后插入 tab,请将其配置为使用空格。 |
| 锚点和别名 | &name 定义一个锚点;*name 引用它。对于重复大块内容(如容器环境变量或默认服务配置)非常方便,避免复制粘贴。 |
| 合并键 | <<: *base 将引用的映射合并到当前映射中。这是一个 YAML 1.1 特性。大多数解析器(包括 libyaml)仍然接受它;YAML 1.2 规范删除了它。 |
| 多文档文件 | 三个连字符(---)分隔同一流中的文档。对于通过一个 kubectl apply -f 发送多个 Kubernetes 对象很方便。... 终止文档。 |
| 块标量 | | 保留换行符(字面量);> 将它们折叠为空格。修饰符 - 和 + 控制结尾换行符。对 shell 脚本使用 |,对长散文使用 >。 |
| Norway 问题 | 未加引号的 NO、YES、ON、OFF 在 YAML 1.1 中被解析为布尔值。加引号或使用 1.2 解析器。请参阅 YAML 类型定义了解哪些字符串会被转换。 |
| 编码 | YAML 1.2 规范要求 UTF-8。允许带 BOM 的 UTF-16。实际上,工具期望不带 BOM 的 UTF-8,因此请以这种方式保存文件以避免意外。 |
不会。diff 完全在您的浏览器中运行。没有任何内容被发送到服务器、记录或存储。粘贴 Kubernetes 密钥或 CI 配置后关闭标签页,不会留下任何副本。打开 DevTools 并查看网络标签,在比较时没有出站请求。
是的,文本 diff 会将其标记为差异,即使 YAML 规范规定映射是无序的。在 diff 前格式化两侧,格式化器会以一致的顺序输出键,最小化这种虚假差异。对于精确的语义等价性,您需要一个结构感知的 YAML 差异工具。
可以。点击任意窗格上的上传,从磁盘直接选择 .yaml 或 .yml 文件,无需复制粘贴。文件在浏览器中本地读取,永远不会发送到任何地方。
YAML 规范明确禁止在缩进中使用 tab 字符。Tab 在 YAML 中不是空白字符。如果您的文件使用 tab 进行缩进,大多数 YAML 解析器会报错。此工具会检测并警告 tab 字符。在粘贴之前,将 tab 转换为空格(通常是 2 或 4 个空格)。
免费,无需注册。没有账户,没有试用期,比较次数也没有限制。粘贴两个 YAML 片段,diff 立即出现。复制和下载按钮会给您干净的输出,没有水印。
比较完全在您的浏览器中运行,所以您的 YAML 永远不会被上传,包括含有密钥或密码的配置文件。高亮是字符级的,带有语义清理,还内置了 YAML 语法高亮、tab 警告和文件上传功能。
不能在一个视图中。工具为两侧设计:原始版和修改版。如果您有三个版本,请两两比较。对于跨多个文件的批量比较,考虑在命令行使用 diff 命令或 dyff(一个专门的 YAML 差异工具)。
diff 工具保留锚点(&name)和别名(*name)原样。它们作为文本字符处理,所以如果锚点名称或别名引用发生变化,这些变化会在 diff 中高亮显示。工具不会解析或展开别名来进行语义比较。
您的 YAML 不会离开您的浏览器。编辑器、语法高亮和 diff 都在您的机器上本地运行。没有对您输入的分析,没有日志,没有云端往返。我们遵循的格式是 YAML 1.2.2 规范。如需验证没有任何内容被上传,打开 DevTools 并在比较时查看网络标签。