您可以通过容器服务管理控制台,可视化升级集群的K8s(Kubernetes)版本。您可以在集群列表页面查看集群的K8s版本,以及当前是否有新的版本可供升级。升级集群的过程包含升级前置检查、升级Master(专有版会展示当前正在升级的Master编号)、升级Node(会展示已经升级的节点数和总节点数)。
功能原理
下面主要为您介绍集群升级过程中的相关功能及实现原理。

集群升级策略
集群升级策略定义了您将使用怎样的策略对集群进行升级。目前默认策略为分批升级。分批升级会在升级Node阶段对集群内的节点进行分批升级。其具体策略为:
- 根据节点池依次执行,同一时间点只有一个节点池进行升级。
- 在同一个节点池内进行分批升级。第一批升级的节点数为1,后续的批次以2的幂数进行增长。如果暂停后重新恢复升级,依然遵循该分批策略。
- 每一批节点的最大数量不会超过10。
集群升级前置检查
在您开始集群升级之后,ACK会为您自动启动集群升级前置检查。该检查会对集群进行多项健康检查,以确保您的集群可以顺利的完成此次升级。
如果您的集群存在不合理配置或者潜在风险,则无法通过前置检查,如下图所示。

单击查看详情按钮。跳转到集群运维页面,查看具体的失败原因。

集群升级暂停
通过集群升级暂停功能,您可以在集群升级的任意阶段对其升级进程进行暂停。
说明
- 暂停升级之后,当前批次已经开始升级的节点会完成升级。还未开始升级的节点不会升级。
- 集群暂停状态为集群升级的中间状态,建议您不要在此时对集群进行操作,并尽快完成升级过程。
您可以在集群成功暂停之后,单击继续,恢复集群的升级进程。
如果集群升级过程中发生错误,集群升级进程会被系统所暂停。具体失败原因会展示在页面下方详情中。您可根据报错进行排查或者提交工单。
集群升级取消
您可以在暂停升级后,单击取消,对本次升级进行取消操作。
说明
- 取消升级之后,当前批次已经开始升级的节点会完成升级。还未开始升级的节点不会升级。
- 已经完成升级的节点不受影响。
注意事项
- 集群升级需要机器可以公网访问,以便下载升级所需的软件包。
- 集群升级Kubernetes过程中,可能会有升级失败的情况,为了您的数据安全,强烈建议您先打快照然后再升级。有关ECS打快照的操作,请参见创建一个云盘快照。
- 集群升级Kubernetes过程中,集群上的应用不会中断。如果应用强依赖于API Server可能会有短暂影响。
- 由于老版本的FlexVolume(v1.11.2.5及以前)挂载的OSS卷在升级的时候会重新挂载,使用OSS卷的Pod在集群升级后需要重建。
- 如果您对Kubernetes集群有过任何的配置更改(例如打开了swap分区),则升级过程有可能失败。
- 集群升级过程中您可以在一批节点升级完成后中断进程,此时集群处于升级的中间状态,建议您不要对集群进行操作,并尽快完成升级过程。处于中间状态的集群会在15日之后关闭升级过程,同时清理一切升级相关的事件和日志信息。
- 集群升级过程中,如非发生错误,请勿修改kube-upgrade命名空间下面的相关资源。
- 如果集群升级失败,升级过程会暂停,您需要分析失败原因并清理kube-upgrade命名空间下失败的Pod,确认修复成功后重启升级过程。如需帮助,请联系在线客服。
- 在完成Kubernetes集群升级后,请您同步升级您本地的kubectl版本。如果未及时升级,在使用本地kubectl的过程中可能会因为与集群API Server版本不同,发生类似invalid object doesn't have additional properties的报错。
- 在升级到Kubernetes v1.14之前,检查是否做了对应配置,排除访问LoadBalancer暴露出去的SLB地址不通的风险,请参见Kubernetes集群中访问LoadBalancer暴露的SLB地址不通。
- 在升级ACK集群的Kubernetes 1.16到1.18版本时,如果您集群中的应用使用了云盘数据卷,且数据卷类型为Block Volume,请在升级前阅读CSI Block Volume升级说明。
- ACK集群的Kubernetes版本升级只能一级一级的升级。例如低版本ACK集群的Kubernetes版本为1.12,如果要升级到1.18 Kubernetes版本,需进行三次手动升级,先升级到1.14,然后1.16,最后1.18版本。
- 由于Kubernetes 1.20版本的集群不支持selfLink字段,若您的集群使用FlexVolume存储插件且安装了alicloud-nas-controller组件,在将低版本集群升级至Kubernetes 1.20版本之前需要将alicloud-nas-controller的镜像升级到v1.14.8.17-7b898e5-aliyun或更高版本。
步骤一:升级前检查集群
说明 如果您在非生产环境中有待升级的集群,强烈建议您先对该集群进行升级验证,再在生产环境中启动集群升级。
请在集群升级前检查集群的健康状况,确保集群已具备升级条件。
步骤二:升级集群
升级完成后,您可以在Kubernetes集群列表页面查看集群Kubernetes的版本,确认升级是否成功。
相关信息
Kubernetes 1.20及以后版本的集群升级前检查时,支持检查废弃API信息。例如从Kubernetes 1.20升级至Kubernetes 1.22时,系统会通过扫描过去一天的审计日志,检查1.20集群中是否使用了废弃API。如果1.20集群中使用了废弃API,集群升级到1.22后可能会有业务隐患。
废弃API根据请求来源(User Agent)分为以下四类:
类别 | 说明 | 举例 |
---|---|---|
core | Kubernetes核心组件:ACK会在集群升级时后台升级,不需要客户参与,检查页面也不会展示。 | apiserver、scheduler、kube-controller-manager |
ack | ACK组件:由ACK提供的组件,需要客户自行判断升级时机,ACK会展示并引导客户在组件管理页面升级组件。 | metrics-server、nginx-ingress-controller |
OpenSource | 开源组件:社区的部分开源组件,ACK会展示清单,但客户需要自行判断是否升级,自行完成升级。如果有遗漏,会显示在unknown分类中。 | rancher、elasticsearch-operator等 |
unknown | 未知来源:以上规则均无法匹配时,会标记为未知来源,ACK会展示清单,但客户需要自行判断是否升级,自行完成升级。 | kubectl、agent、Go-http-client、okhttp |
页面示例:
