升级前须知
升级前,您可以在CCE控制台确认您的集群是否可以进行升级操作。确认方法请参见升级概述。
注意事项
升级集群前,您需要知晓以下事项
- 集群升级操作不可回退,请务必慎重并选择合适的时间段进行升级,以减少升级对您的业务带来的影响。为了您的数据安全,强烈建议您先备份数据然后再升级。
- 集群升级前,请确认集群中未执行高危操作,否则可能导致集群升级失败或升级后配置丢失。例如,常见的高危操作有本地修改集群节点的配置、通过ELB控制台修改CCE管理的监听器配置等。建议您通过CCE控制台修改相关配置,以便在升级时自动继承。
- 集群升级前,请查看集群状态是否均为健康状态。
- 集群升级前,请参考Kubernetes版本发布说明了解每个集群版本发布的特性以及差异,否则可能因为应用不兼容新集群版本而导致升级后异常。例如,您需要检查集群中是否使用了目标版本废弃的API,否则可能导致升级后调用接口失败,详情请参见废弃API说明。
集群升级时,以下几点注意事项可能会对您的业务存在影响,请您关注:
- 集群升级过程中,不建议对集群进行任何操作。尤其是,请勿关机、重启或删除节点,否则会导致升级失败。
- 集群升级过程中,已运行工作负载业务不会中断,但API Server访问会短暂中断,如果业务需要访问API Server可能会受到影响。
- 集群升级过程中,将会给节点打上“node.kubernetes.io/upgrade”(效果为“NoSchedule”)的污点,并在集群升级完成后移除该污点。请您不要在节点上手动添加相同键名的污点,即使污点效果不同,也可能会在升级后被系统误删除。
约束与限制
- 集群升级回滚支持集群升级出现异常时回滚,若您在升级成功之后对集群进行了其它操作,则不支持回滚。
- 当集群中存在使用私有镜像的节点时,暂不支持升级。
- 集群升级后,如版本特性中修复了容器引擎Containerd相关漏洞,存量节点需要手动重启Containerd才可以生效,对于存量Pod同样需要通过重启Pod才能生效。
- 若您将节点上的docker.sock文件通过HostPath方式挂载到Pod内,即docker in docker场景,在升级过程中Docker将会重启,而容器内的sock文件不会变化,可能导致您业务异常,推荐您使用挂载目录的方式挂载sock文件。
- 容器隧道网络集群升级至1.19.16-r4、1.21.7-r0、1.23.5-r0、1.25.1-r0及之后的版本时,会移除匹配目的地址是容器网段且源地址非容器网段的SNAT规则;如果您之前通过配置VPC路由实现集群外直接访问所有的Pod IP,升级后只支持直接访问对应节点上的Pod IP。
- 更多版本升级约束请查看版本差异说明。
版本差异说明
版本升级路径 |
版本差异 |
建议自检措施 |
---|---|---|
v1.23升级至v1.25 |
在Kubernetes v1.25版本中, PodSecurityPolicy已被移除,并提供Pod安全性准入控制器(Pod Security Admission配置)作为PodSecurityPolicy的替代。 |
|
v1.21升级至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.23 |
||
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字段。
|
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 |
是 |
废弃API说明
随着Kubernetes API的演化,API会周期性地被重组或升级,老的API会被弃用并被最终删除。以下为各Kubernetes社区版本中被废弃的API,更多已废弃的API说明请参见已弃用 API 的迁移指南。
当某API被废弃时,已经创建的资源对象不受影响,但新建或编辑该资源时将出现API版本被拦截的情况。
资源名称 |
废弃API版本 |
替代API版本 |
变更说明 |
---|---|---|---|
CronJob |
batch/v1beta1 |
batch/v1 (该API从社区v1.21版本开始可用) |
- |
EndpointSlice |
discovery.k8s.io/v1beta1 |
discovery.k8s.io/v1 (该API从社区v1.21版本开始可用) |
此次更新需注意以下变更:
|
Event |
events.k8s.io/v1beta1 |
events.k8s.io/v1 (该API从社区v1.19版本开始可用) |
此次更新需注意以下变更:
|
HorizontalPodAutoscaler |
autoscaling/v2beta1 |
autoscaling/v2 (该API从社区v1.23版本开始可用) |
- |
PodDisruptionBudget |
policy/v1beta1 |
policy/v1 (该API从社区v1.21版本开始可用) |
在 policy/v1 版本的 PodDisruptionBudget 中将 spec.selector 设置为空({})时会选择名字空间中的所有 Pod(在 policy/v1beta1 版本中,空的 spec.selector 不会选择任何 Pod)。如果 spec.selector 未设置,则在两个 API 版本下都不会选择任何 Pod。 |
PodSecurityPolicy |
policy/v1beta1 |
- |
从社区v1.25版本开始,PodSecurityPolicy资源不再提供policy/v1beta1版本的API,并且PodSecurityPolicy准入控制器也会被删除。 |
RuntimeClass |
node.k8s.io/v1beta1 |
node.k8s.io/v1(该API从社区v1.20版本开始可用) |
- |
资源名称 |
废弃API版本 |
替代API版本 |
变更说明 |
---|---|---|---|
MutatingWebhookConfiguration ValidatingWebhookConfiguration |
admissionregistration.k8s.io/v1beta1 |
admissionregistration.k8s.io/v1 (该API从社区v1.16版本开始可用) |
|
CustomResourceDefinition |
apiextensions.k8s.io/v1beta1 |
apiextensions/v1 (该API从社区v1.16版本开始可用) |
|
APIService |
apiregistration/v1beta1 |
apiregistration.k8s.io/v1 (该API从社区v1.10版本开始可用) |
- |
TokenReview |
authentication.k8s.io/v1beta1 |
authentication.k8s.io/v1 (该API从社区v1.6版本开始可用) |
- |
LocalSubjectAccessReview SelfSubjectAccessReview SubjectAccessReview SelfSubjectRulesReview |
authorization.k8s.io/v1beta1 |
authorization.k8s.io/v1 (该API从社区v1.16版本开始可用) |
spec.group 在 v1 版本中被更名为 spec.groups(补丁 #32709) |
CertificateSigningRequest |
certificates.k8s.io/v1beta1 |
certificates.k8s.io/v1 (该API从社区v1.19版本开始可用) |
certificates.k8s.io/v1 中需要额外注意的变更:
|
Lease |
coordination.k8s.io/v1beta1 |
coordination.k8s.io/v1 (该API从社区v1.14版本开始可用) |
- |
Ingress |
networking.k8s.io/v1beta1 extensions/v1beta1 |
networking.k8s.io/v1 (该API从社区v1.19版本开始可用) |
|
IngressClass |
networking.k8s.io/v1beta1 |
networking.k8s.io/v1 (该API从社区v1.19版本开始可用) |
- |
ClusterRole ClusterRoleBinding Role RoleBinding |
rbac.authorization.k8s.io/v1beta1 |
rbac.authorization.k8s.io/v1 (该API从社区v1.8版本开始可用) |
- |
PriorityClass |
scheduling.k8s.io/v1beta1 |
scheduling.k8s.io/v1 (该API从社区v1.14版本开始可用) |
- |
CSIDriver CSINode StorageClass VolumeAttachment |
storage.k8s.io/v1beta1 |
storage.k8s.io/v1 |
|
资源名称 |
废弃API版本 |
替代API版本 |
变更说明 |
---|---|---|---|
NetworkPolicy |
extensions/v1beta1 |
networking.k8s.io/v1 (该API从社区v1.8版本开始可用) |
- |
DaemonSet |
extensions/v1beta1 apps/v1beta2 |
apps/v1 (该API从社区v1.9版本开始可用) |
|
Deployment |
extensions/v1beta1 apps/v1beta1 apps/v1beta2 |
apps/v1 (该API从社区v1.9版本开始可用) |
|
StatefulSet |
apps/v1beta1 apps/v1beta2 |
apps/v1 (该API从社区v1.9版本开始可用) |
|
ReplicaSet |
extensions/v1beta1 apps/v1beta1 apps/v1beta2 |
apps/v1 (该API从社区v1.9版本开始可用) |
spec.selector 现在变成必需字段,并且在对象创建之后不可变更; 可以将现有模板的标签作为选择算符以实现无缝迁移。 |
PodSecurityPolicy |
extensions/v1beta1 |
policy/v1beta1 (该API从社区v1.10版本开始可用) |
policy/v1beta1 API 版本的 PodSecurityPolicy 会在 v1.25 版本中移除。 |
升级备份说明
目前集群升级备份方式如下:
备份方式 |
备份对象 |
备份方式 |
备份时间 |
回滚时间 |
说明 |
---|---|---|---|---|---|
etcd数据备份 |
etcd数据 |
升级流程中自动备份 |
1-5min |
2h |
必选备份,升级过程中自动进行,用户无需关注 |
CBR整机备份 |
Master节点磁盘,包括组件镜像、配置、日志以及etcd数据 |
通过页面一键备份(手动触发) |
20min-2h(受当前局点云备份任务排队情况影响) |
20min |
该功能逐步由EVS快照备份替代 |