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 快速扫描、报告生成
选型建议: 如果你需要将旧版清单批量迁移到新版 API,优先使用 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 专注于集群实时状态。

API 弃用检测工具工作流程对比 本地 YAML 清单文件 集群实时资源 Helm Chart / 目录 kubectl convert pluto kube-no-trouble kubent 弃用资源清单 / 转换结果 / 报告 更新清单 → 重新部署 → 集群升级

4.4 工具选择决策树

根据你的具体需求,可以按照以下决策树快速选择最合适的工具:

  1. 是否需要转换清单文件?
    • 是 → 使用 kubectl convert
    • 否 → 进入下一步
  2. 是否需要集成到 CI/CD 流水线?
    • 是 → 使用 pluto(支持 JSON 输出和退出码)
    • 否 → 进入下一步
  3. 是否需要生成可视化报告?
    • 是 → 使用 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
最佳实践: 建议在 CI 流水线中集成 pluto 作为准入检查,在集群巡检脚本中使用 kube-no-trouble 或 kubent 定期扫描,在迁移旧清单时使用 kubectl convert 进行批量转换。四款工具互补使用,可以覆盖从开发到生产的全链路 API 弃用检测需求。