更新时间:2026-09-20 GMT+08:00

兼容性风险检查异常处理

检查项内容

请您阅读版本兼容性差异,并确认不受影响。补丁升级不涉及版本兼容性差异。

版本兼容性差异

版本升级路径

版本差异

建议自检措施

所有升级路径

请关注Kubernetes API变更,详情请参见废弃API说明。

检查集群中已使用的API版本,避免使用已废弃的API版本或修改为废弃API说明中建议替换的API版本。

v1.28升级至v1.29、v1.31

Kubernetes v1.29中更改kube-proxy启动的行为,允许kube-proxy设置低于节点sysctl设置的参数值。如节点nf_conntrack_max内核参数值设置为1000000,而kube-proxy计算的值为131072,那么此内核参数会使用kube-proxy计算的值131072。社区PR链接为:https://github.com/kubernetes/kubernetes/pull/120448

产生大量链接的节点例如网关节点极可能遇到该问题。请务必确认nf_conntrack_max是否曾使用sysctl修改为较大值(例如4294967295或1000000),该参数在节点升级后会以kube-proxy计算的值为准,被刷新覆盖为一个较小值(10w+或20w+),影响业务高峰期流量。

请使用节点池kube-proxy组件配置conntrack-min替代直接修改OS内核参数nf_conntrack_max,参考节点池配置管理。

v1.23/v1.25

升级至v1.27

容器运行时Docker不再被推荐使用,建议您使用Containerd进行替换,详情请参见容器运行时说明。

已纳入升级前检查。

v1.21/v1.19

升级至v1.23

对于社区较老版本的Nginx Ingress Controller来说(社区版本v0.49及以下,对应CCE插件版本v1.x.x),在创建Ingress时没有指定Ingress类别为nginx,即annotations中未添加kubernetes.io/ingress.class: nginx的情况,也可以被Nginx Ingress Controller纳管。但对于较新版本的Nginx Ingress Controller来说(社区版本v1.0.0及以上,对应CCE插件版本2.x.x),如果在创建Ingress时没有显示指定Ingress类别为nginx,该资源将被Nginx Ingress Controller忽略,Ingress规则失效,导致服务中断。

已纳入升级前检查,也可参照NGINX Ingress控制器插件升级检查进行自检。

v1.19升级至v1.21

Kubernetes v1.21集群版本修复了exec probe timeouts不生效的BUG,在此修复之前,exec 探测器不考虑 timeoutSeconds 字段。相反,探测将无限期运行,甚至超过其配置的截止日期,直到返回结果。 若用户未配置,默认值为1秒。升级后此字段生效,如果探测时间超过1秒,可能会导致应用健康检查失败并频繁重启。

升级前检查您使用了exec probe的应用的probe timeouts是否合理。

CCE的v1.19及以上版本的kube-apiserver要求客户侧webhook server的证书必须配置Subject Alternative Names (SAN)字段。否则升级后kube-apiserver调用webhook server失败,容器无法正常启动。

根因:Go语言v1.15版本废弃了X.509 CommonName,CCE的v1.19版本的kube-apiserver编译的版本为v1.15,若客户的webhook证书没有Subject Alternative Names (SAN),kube-apiserver不再默认将X509证书的CommonName字段作为hostname处理,最终导致认证失败。

升级前检查您自建webhook server的证书是否配置了SAN字段。

  • 若无自建webhook server则不涉及。
  • 若未配置,建议您配置使用SAN字段指定证书支持的IP及域名。

v1.15升级至v1.19

CCE v1.19版本的控制面与v1.15版本的Kubelet存在兼容性问题。若控制节点升级成功后,节点升级失败或待升级节点发生重启,则节点有极大概率为NotReady状态。

主要原因为升级失败的节点有大概率重启kubelet而触发节点注册流程,v1.15 kubelet默认注册标签(failure-domain.beta.kubernetes.io/is-baremetal和kubernetes.io/availablezone)被v1.19版本kube-apiserver视为非法标签。

v1.19版本中对应的合法标签为node.kubernetes.io/baremetal和failure-domain.beta.kubernetes.io/zone。

  1. 正常升级流程不会触发此场景。
  2. 在控制节点升级完成后尽量避免使用暂停升级功能,快速升级完Node节点。
  3. 若Node节点升级失败且无法修复,请尽快驱逐此节点上的应用,请联系技术支持人员,跳过此节点升级,在整体升级完毕后,重置该节点。

CCE的v1.15版本集群及v1.19版本集群将docker的存储驱动文件系统由 xfs切换成ext4,可能会导致升级后的java应用Pod内的import包顺序异常,继而导致Pod异常。

升级前查看节点上docker配置文件/etc/docker/daemon.json。检查dm.fs配置项是否为xfs。

  • 若为ext4或存储驱动为overlay则不涉及。
  • 若为xfs则建议您在新版本集群预先部署应用,以测试应用与新版本集群是否兼容。
{
      "storage-driver": "devicemapper",
      "storage-opts": [
      "dm.thinpooldev=/dev/mapper/vgpaas-thinpool",
      "dm.use_deferred_removal=true",
      "dm.fs=xfs",
      "dm.use_deferred_deletion=true"
      ]
}

CCE的v1.19及以上版本的kube-apiserver要求客户侧webhook server的证书必须配置Subject Alternative Names (SAN)字段。否则升级后kube-apiserver调用webhook server失败,容器无法正常启动。

根因:Go语言v1.15版本废弃了X.509 CommonName,CCE的v1.19版本的kube-apiserver编译的版本为v1.15。CommonName字段作为hostname处理,最终导致认证失败。

升级前检查您自建webhook server的证书是否配置了SAN字段。

  • 若无自建webhook server则不涉及。
  • 若未配置,建议您配置使用SAN字段指定证书支持的IP及域名。
须知:

为减弱此版本差异对集群升级的影响,v1.15升级至v1.19时,CCE会进行特殊处理,仍然会兼容支持证书不带SAN。但后续升级不再特殊处理,请尽快整改证书,以避免影响后续升级。

v1.17.17版本及以后的集群CCE自动给用户创建了PSP规则,限制了不安全配置的Pod的创建,如securityContext配置了sysctl的net.core.somaxconn的Pod。

升级后请参考资料按需开放非安全系统配置,具体请参见PodSecurityPolicy配置。

1.15版本集群原地升级,如果业务中存在initContainer或使用Istio的场景,则需要注意以下约束:

1.16及以上的kubelet统计QosClass和之前版本存在差异,1.15及以下版本仅统计spec.containers下的容器,1.16及以上的kubelet版本会同时统计spec.containers和spec.initContainers下的容器,升级前后会造成Pod的QosClass变化,从而造成Pod中容器重启。

建议参考表1在升级前修改业务容器的QosClass规避该问题。

表1 1.15版本升级前后QosClass变化

init容器(根据spec.initContainers计算)

业务容器(根据spec.containers计算)

Pod(根据spec.containers和spec.initContainers计算)

是否受影响

Guaranteed

Besteffort

Burstable

是

Guaranteed

Burstable

Burstable

否

Guaranteed

Guaranteed

Guaranteed

否

Besteffort

Besteffort

Besteffort

否

Besteffort

Burstable

Burstable

否

Besteffort

Guaranteed

Burstable

是

Burstable

Besteffort

Burstable

是

Burstable

Burstable

Burstable

否

Burstable

Guaranteed

Burstable

是