4、API弃用检测工具概览:kubectl convert、pluto、kube-no-trouble、kubent
在 Kubernetes 集群长期运维中,API 版本弃用是导致资源不可用、控制器失效、升级失败的首要隐患。手动检查每个资源的 apiVersion 字段既不现实也容易遗漏。本章系统介绍四款主流开源检测工具,帮助你在不同场景下快速定位弃用资源。
4.1 工具定位与核心差异
四款工具分别从不同维度解决 API 弃用检测问题:kubectl convert 是官方内置的本地转换工具;pluto 专注多版本兼容性扫描;kube-no-trouble(简称 kubent)侧重集群实时状态检测;kubent 则是社区活跃的轻量级扫描器。下表从安装方式、扫描范围、输出格式三个维度进行对比:
| 工具名称 | 安装方式 | 扫描范围 | 输出格式 | 适用场景 |
|---|---|---|---|---|
| kubectl convert | Kubernetes 内置插件 | 本地 YAML/JSON 清单文件 | 转换后的 YAML | 离线清单迁移、单文件转换 |
| pluto | 二进制 / Helm Chart | 本地文件 + 集群 API 资源 | 表格 / JSON / YAML | 多版本兼容性审计、CI/CD 集成 |
| kube-no-trouble (kubent) | 二进制 / Krew 插件 | 集群实时资源 | 表格 / JSON | 集群巡检、升级前检查 |
| kubent | 二进制 / Docker | 集群实时资源 + 本地文件 | 表格 / JSON / HTML | 快速扫描、报告生成 |
kubectl convert;如果要在 CI 流水线中自动拦截弃用资源,pluto 的 JSON 输出最易集成;若仅做集群巡检,kubent 的安装和输出最轻量。
4.2 工具详解与使用示例
4.2.1 kubectl convert — 官方内置转换器
kubectl convert 是 Kubernetes 官方提供的插件,无需额外安装即可使用。它读取本地 YAML 文件,将旧版 API 资源转换为目标版本。注意:该工具只转换清单文件,不扫描集群中已运行的资源。
# 将 Deployment 从 extensions/v1beta1 转换为 apps/v1
kubectl convert -f old-deployment.yaml --output-version apps/v1
# 批量转换目录下所有 YAML 文件
kubectl convert -f ./manifests/ --output-version apps/v1 --recursive
kubectl convert 仅支持本地文件,且转换后的资源可能丢失部分注解或默认值。建议转换后使用 kubectl diff 对比差异,再应用到集群。
4.2.2 pluto — 多版本兼容性审计专家
pluto 由 Fairwinds 开发,内置了 Kubernetes 各版本的弃用 API 数据库。它支持扫描本地文件、Helm Chart 以及集群中已部署的资源,并输出详细的弃用版本、推荐版本和移除版本信息。
# 扫描集群中所有弃用资源
pluto detect-all-in-cluster
# 扫描本地文件并输出 JSON
pluto detect-files -d ./manifests/ -o json
# 指定目标 Kubernetes 版本(如 1.25)
pluto detect-all-in-cluster --target-version 1.25
pluto 的输出包含以下关键字段:
- Name:资源名称
- Namespace:命名空间
- Kind:资源类型(如 Deployment、Ingress)
- API Version:当前使用的 API 版本
- Deprecated In:该版本开始弃用的 Kubernetes 版本
- Removed In:该版本被彻底移除的 Kubernetes 版本
- Replacement:推荐的替换 API 版本
4.2.3 kube-no-trouble (kubent) — 集群实时检测利器
kube-no-trouble 简称 kubent,由 DoiT International 维护。它直接读取集群中所有资源的实时状态,无需本地清单文件。安装方式支持 Krew 插件和二进制下载。
# 通过 Krew 安装
kubectl krew install kube-no-trouble
# 扫描集群中所有弃用资源
kubent
# 输出 JSON 格式供其他工具处理
kubent -o json
kubent 会自动过滤掉已被 Helm 或 Operator 管理的资源,避免重复告警。同时支持通过 --ignore-deprecated 参数忽略已弃用但尚未移除的版本,只关注即将移除的严重问题。
4.2.4 kubent — 轻量级扫描与报告生成
注意:此处的 kubent 与上文的 kube-no-trouble 是不同项目。本工具由社区开发者维护,支持扫描集群资源和本地文件,并生成 HTML 格式的可视化报告,适合分享给非技术团队成员。
# 扫描集群并生成 HTML 报告
kubent --cluster --output report.html
# 扫描本地文件
kubent --file ./deploy.yaml
# 指定 Kubernetes 版本
kubent --cluster --k8s-version 1.24
4.3 工具工作流程对比
下图展示了四款工具在检测流程中的不同定位:kubectl convert 作用于清单文件转换阶段;pluto 和 kubent 覆盖文件扫描与集群检测;kube-no-trouble 专注于集群实时状态。
4.4 工具选择决策树
根据你的具体需求,可以按照以下决策树快速选择最合适的工具:
- 是否需要转换清单文件?
- 是 → 使用
kubectl convert - 否 → 进入下一步
- 是 → 使用
- 是否需要集成到 CI/CD 流水线?
- 是 → 使用
pluto(支持 JSON 输出和退出码) - 否 → 进入下一步
- 是 → 使用
- 是否需要生成可视化报告?
- 是 → 使用
kubent(支持 HTML 报告) - 否 → 使用
kube-no-trouble(最轻量、安装最简单)
- 是 → 使用
4.5 综合对比总结
下表从更多维度对四款工具进行横向对比,帮助你根据团队技术栈和运维习惯做出选择:
| 对比维度 | kubectl convert | pluto | kube-no-trouble | kubent |
|---|---|---|---|---|
| 安装复杂度 | 无需安装 | 中等(需下载二进制) | 低(Krew 一键安装) | 低(二进制 / Docker) |
| 扫描速度 | 极快(本地文件) | 快(支持并发) | 快(集群 API 调用) | 中等(集群 + 文件) |
| 版本数据库 | 依赖 kubectl 版本 | 内置完整数据库 | 内置完整数据库 | 内置完整数据库 |
| Helm Chart 支持 | 否 | 是 | 否 | 是 |
| CI/CD 集成 | 差(无退出码) | 优秀(退出码 + JSON) | 良好(JSON 输出) | 良好(JSON / HTML) |
| 报告生成 | 无 | 表格 / JSON / YAML | 表格 / JSON | 表格 / JSON / HTML |
pluto 作为准入检查,在集群巡检脚本中使用 kube-no-trouble 或 kubent 定期扫描,在迁移旧清单时使用 kubectl convert 进行批量转换。四款工具互补使用,可以覆盖从开发到生产的全链路 API 弃用检测需求。