GKE集群升级v1.22遇弃用API报错问题咨询
问题1结论
仅存在于Jar包依赖中、未被实际调用的v1beta1 API引用完全不会阻碍GKE v1.22版本升级。
GKE的升级拦截逻辑只统计APIServer实际接收到的弃用API请求,不会扫描你业务应用里的依赖包内容。fabric8为了兼容多版本K8s内置v1beta1的模型类是常规设计,只要你的业务代码没有实例化这些类、构造对应请求发到APIServer,就不会产生任何可被GKE检测到的弃用API调用,和升级拦截没有任何关系。
你现在升级被拦的真实原因和Jar包无关,是集群里实际存在存量弃用资源、以及之前操作触发的组件自动调用:
- 控制台显示的那几条弃用API调用时间刚好是你第一次尝试升级的时间,基本是集群内组件(Calico、Ingress控制器、ELK栈组件、GKE托管组件)做API版本探测时自动发起的,不是业务代码触发的。
- 你跑
kubent扫出来的1.22版本弃用资源列表才是核心拦截项:4个使用v1beta1版本的CRD、elastic命名空间下的v1beta1版本Ingress,这些都是真实存在于etcd里的旧API资源,不是代码里的静态引用。 - 注意列表里1.25版本相关的弃用资源不影响本次1.22升级,不需要提前处理。
问题2 升级落地操作步骤
不需要调整业务代码的fabric8依赖,按以下步骤操作即可完成升级:
- 先处理存量弃用资源
- 导出elastic命名空间下名为
kibana-kibana的Ingress资源,将apiVersion字段修改为networking.k8s.io/v1,补全v1版本Ingress必填的pathType字段,调整完配置后apply覆盖旧资源即可。 - 不要手动修改扫描出来的4个v1beta1版本CRD:先将集群部署的Calico升级到v3.20及以上版本,新版本会自动将Calico管理的CRD更新到v1稳定版;再将GKE集群的附加组件、节点池升级到当前1.21大版本的最新补丁版本,GKE会自动更新托管的autoscaling、kope.io相关CRD到v1版本。
- 导出elastic命名空间下名为
- 处理调用记录拦截
处理完全部存量弃用资源后,如果你不想等GKE控制台的调用统计窗口自动更新(默认统计最近30天的调用记录,无新调用后48-72小时会自动解除拦截),可以直接使用gcloud命令行发起升级,附加--ignore-deprecated-apis参数跳过API弃用校验——注意这个操作的前提是你已经确认所有1.22版本移除的弃用资源都完成迁移,否则升级完成后旧API版本的资源将无法被APIServer正常读取。 - 升级前最后做一次校验
所有资源调整完成后重新运行kubent,确认输出中Deprecated APIs removed in 1.22板块下没有任何条目,即可正常发起升级。
补充说明:你之前在Terraform脚本里移除了弃用API引用,只能覆盖Terraform自己管理的资源,集群中通过Helm、手动部署、托管组件创建的旧版本资源不受Terraform管控,这也是你改完Terraform配置后依然触发拦截的核心原因。
内容的提问来源于stack exchange,提问作者Artet_dev
相关产品推荐
相关产品推荐

