首页/云/Kubernetes 速查/废弃 API 排查与迁移
集群运维与排障54 条

废弃 API 排查与迁移

清单里的 apiVersion 会随版本弃用与移除:升级前先审计(apply 警告、指标、清单扫描),把对象迁到新组/新版本。

Kubernetes 速查云更新于 2026-10-13

API 版本的生命周期

每个 API 组都按 alpha、beta、稳定版本的节奏演进:被标记弃用的版本会先在 apiserver 给出警告,随后在某个次版本中被彻底移除。移除之后,继续提交旧 apiVersion 的清单会被直接拒绝,而且字段结构变化不能只改一行——例如 Ingress 从 extensions/v1beta1 迁到 networking.k8s.io/v1 时新增了必填的 pathType、backend 结构也变了。因此清单审计与集群内既有对象的核对,是升级前必做的动作。

基本信息

适用对象清单里的 apiVersion,以及集群内既有对象的存储版本
常见迁移路径apps/v1beta1 与 v1beta2 到 apps/v1;extensions/v1beta1 Ingress 到 networking.k8s.io/v1;policy/v1beta1 PDB 到 policy/v1
发现手段kubectl apply 的弃用警告、apiserver 弃用指标、清单静态扫描
关键指标apiserver_requested_deprecated_apis
后果升级后旧版本清单无法提交,既有对象可能无法更新

典型使用场景

  • 集群升级前:对全部清单与 Helm chart 做一次 API 版本审计
  • CI 门禁:把弃用告警纳入流水线,阻止新提交引入旧版本
  • 接管存量集群:核对运行中的对象是否仍使用已移除的组版本
  • 多集群同版本化:借迁移把各集群清单统一到同一 API 版本
  • 第三方组件评估:确认 Operator 与 CRD 是否已适配目标集群版本

发现与核对

发现与核对
kubectl apply --dry-run=server -f deploy.yaml        # 输出里含 deprecated 警告
kubectl api-resources | grep -i -E 'extensions|beta'   # 看集群还提供哪些版本
kubectl get --raw /metrics | grep apiserver_requested_deprecated_apis | head -5
kubectl get ingress -A -o jsonpath='{range .items[*]}{.apiVersion}{"\n"}{end}' | sort -u

常见迁移对照

旧版本新版本迁移注意
apps/v1beta1、v1beta2apps/v1选择器字段结构与默认值行为有差异
extensions/v1beta1 Ingressnetworking.k8s.io/v1pathType 必填、backend 结构改变
policy/v1beta1 PDBpolicy/v1结构基本一致,主要是组版本变更
batch/v1beta1 CronJobbatch/v1组版本升级,字段差异小
autoscaling/v2beta2autoscaling/v2指标字段基本一致,建议顺手对齐
只看清单容易漏:集群里由 Operator 或控制器动态创建的对象同样会使用旧版本,审计时要结合 apiserver 指标与运行对象一起看。
被移除的 API 在升级后无法回退到旧版本:升级窗口前完成审计与清单替换,比升级后再救火从容得多。
迁移要连存储版本一起看:即使清单已改成新版本,集群里早先写入的对象仍可能以旧版本存储,升级后对这些对象做更新同样会触发校验,建议在升级前对存量对象做一次整体重写。

易错点

  • 升级后才验证清单:被移除的 API 直接拒绝创建,回滚窗口里还要同时改清单
  • 只改 apiVersion 不改字段:新版校验失败或字段被忽略,行为与预期不符
  • 忽略 apiserver 的弃用告警日志:升级前完全没有准备时间
  • 只扫自己的仓库:忽略 Operator、Helm chart 与历史 Job 里的旧版本对象

数据来源与参考

  • Kubernetes 官方文档 · 已弃用 API 迁移指南
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌