升级集群说明

为避免过期版本集群存在的安全和稳定性风险,获得最新的Kubernetes能力和技术支持,建议您及时升级集群版本。ACK提供升级前置检查,支持配置不同升级策略和升级节奏,并提供升级进度监控,以便实现集群的平滑升级。

为什么需要升级

ACK保证Kubernetes最新3次要版本的创建。例如,ACK支持Kubernetes 1.31、1.32、1.33三个版本时,1.30版本不再支持创建,过期补丁版本也不再支持创建,详情请参见ACK版本发布说明

过期版本集群存在安全隐患和稳定性风险。集群版本过期后,将无法享受新Kubernetes版本支持的功能特性及缺陷修复,无法获得及时有效的技术支持,面临无法修复安全漏洞的风险。

建议您及时主动升级集群,以便享用最新的功能特性、缺陷修复和更及时的技术支持。

重要

升级集群时,ACK会对您的集群进行前置检查,但无法保证检查出所有不兼容的功能配置和API。根据安全责任共担模型,请您通过帮助文档、控制台信息、站内信等渠道关注版本发布情况,并在集群升级时提前了解相应版本的升级注意事项。

升级影响

ACK提供分阶段、分批次的升级策略,确保集群升级过程中业务Pod的连续性和稳定性。

  • 前置检查:控制面和节点池升级前均提供前置检查,识别集群中潜在的兼容性风险,例如废弃API、组件版本、节点状态、磁盘状态等,并提供修复建议。前置检查结果不会影响集群业务的运行。

  • 控制面:

    • ACK托管集群:API ServerACK托管运行,升级过程中会滚动重启,正常情况下不影响应用的正常运行。当应用强依赖于API Server时可能因短暂断链而需要重连重试。

    • ACK专有集群:升级过程中,ACK会对每个Master节点逐个进行原地升级。正常情况下不影响应用的正常运行。当应用强依赖于API Server时可能因短暂断链而需要重连重试。

  • 节点池:分批升级节点,确保服务连续性。支持自定义批量升级策略(每批次执行最多节点数、每批次间隔时间等),控制升级对业务的影响。

    • 原地升级时,不涉及磁盘替换和节点初始化,业务Pod正常运行,服务不会中断。

    • 替盘升级时,涉及节点排水、系统盘更换和节点初始化。但请注意以下影响:

      • 替盘升级时,ACK会进行节点排水操作,遵循PDB的前提下将节点上的Pod驱逐至其他可用节点。为确保服务高可用性,建议采用多副本部署策略,将工作负载分散在多个节点上,同时为关键业务配置PDB,控制同时中断的Pod数量。

      • 替盘升级时,ACK将按照节点池当前的配置(例如节点登录方式、操作系统镜像、容器运行时版本)重新初始化节点。正常情况下,更新节点池配置需通过编辑节点池来实现。如您通过其他方式对节点进行了更改,升级时这些更改会被覆盖。

      • 如果节点中的Pod引用了HostPath,且该HostPath指向系统盘,替盘升级后HostPath目录中数据会丢失。

升级流程

ACK集群升级包括控制面升级和节点池升级,请先执行前置检查后执行升级,建议在业务低峰期操作。控制面升级完成后,请仔细检查集群运行情况,然后继续升级节点池,保持与控制面版本一致。

image

1. 升级前准备

  • 根据ACK版本发布说明确定待升级的版本。ACK目前仅支持逐级升级版本,不支持跨多个版本升级,且不支持回退版本。

  • 仔细阅读待升级版本的版本说明文档,了解升级注意事项、重大变更、功能弃用情况等,避免升级后功能不兼容。

  • 规划集群维护窗口,可提前执行升级前置检查识别潜在风险,并在业务低峰期执行升级操作。

2. 控制面升级

  1. 发起前置检查:执行升级前请发起前置检查,等待所有检查项均已通过或修复完成后再执行升级。

    检查项包括废弃API(自1.20版本起)、组件兼容性、功能配置兼容性、集群状态、控制面组件状态等。

  2. 执行升级:前置检查通过后,执行升级。

    • ACK托管集群ACK Serverless集群:ACK托管升级,升级控制面组件,包括kube-apiserverkube-controller-managerkube-schedulerkube-proxy

    • ACK专有集群:采用原地升级,以更大程度地保证业务的连贯性,减少数据迁移和配置调整的风险。

      展开查看流程

      1. ACK检测到您的集群需要进一步升级etcd和容器运行时时,将依次升级Master节点上的etcd和容器运行时。

      2. 依次选择Master节点,一次只升级一个Master节点,并展示当前正在升级的Master节点的编号。

      3. 升级Master组件,包括kube-apiserverkube-controller-managerkube-schedulerkube-proxy

      4. 升级Master节点上的kubelet。

  3. 升级后检查:检查集群版本、核心组件运行状态、业务应用运行状态、Pod创建、节点添加等是否正常。

3. 节点池升级

节点池升级包括kubelet和容器运行时的升级。

  1. 发起前置检查:执行升级前请发起前置检查,等待所有检查项均已通过或修复完成后再执行升级。

    检查项包括节点状态、系统资源、磁盘状态、网络环境等。

  2. 配置升级策略并执行升级:选择升级方式(原地升级或替盘升级),配置批量升级策略(包括每批次执行最多节点数、是否自动创建快照等)。

  3. 升级后检查:检查kubelet和容器运行时版本、Pod调度、业务应用运行状态等是否正常。

4. 其他流程

  • 更换操作系统镜像:如需升级节点池的操作系统镜像版本,或切换操作系统类型(例如Alibaba Cloud Linux 2切换至Alibaba Cloud Linux 3),请参见更换操作系统

  • 集群组件:除控制面组件和部分核心组件(如kube-proxy)外,ACK不会升级其他集群组件。您可以在控制台的组件管理页面了解待升级的组件,参见组件介绍与发布记录了解其版本兼容性和升级要求,并在业务低峰期完成升级。

升级注意事项

控制面升级注意事项

  • ACK集群的Kubernetes版本需按照支持的版本依次升级,不支持回退。如需多次升级,请在每次升级后观察集群业务是否持续稳定运行,再进行下一次升级。

  • 升级前,请参见升级集群了解集群升级说明。请查看ACK版本发布说明及各版本说明了解待升级版本的版本解读、废弃API、升级注意事项等,避免因高版本的功能变更导致业务功能不兼容。

  • 控制面升级不会影响应用的正常运行。升级过程中API Server会滚动重启。如果您的应用强依赖于API Server,需进行重连重试。

  • Kubernetes 1.24不再支持将Docker作为内置容器运行时。集群由1.22升级至1.24及更高版本,需将节点容器运行时从Docker迁移到containerd,请参见将节点容器运行时从Docker迁移到containerd

  • 集群控制面升级期间,请尽可能避免对集群执行运维操作。

节点池升级注意事项

  • 节点伸缩

    • 若集群启用了节点伸缩功能,为保证自动伸缩功能不受影响,集群在升级成功后会自动更新cluster-autoscaler组件至最新版本。集群升级后,请确认cluster-autoscaler组件版本是否正常。更多信息,请参见启用节点自动伸缩

    • 集群升级期间,伸缩模式极速模式的节点可能会因节点关机而无法完成升级。如果升级结束后存在节点因极速模式未被升级,建议手动移除该节点。

  • 升级集群至1.18版本后,ACK会默认配置节点资源预留。如果集群未配置资源预留且节点水位较高,升级后存在Pod驱逐后无法被快速调度的风险。请为节点预留部分资源,推荐CPU使用率不超过50%,内存使用率不超过70%。更多信息,请参见节点资源预留策略

  • 1.24及以下版本的集群中,如果工作负载的Pod只配置了启动探针(Startup Probe),Pod会在kubelet重启后出现短暂的NotReady现象。建议您采用多副本部署策略,将工作负载分散在多个节点上,以确保在某个节点重启期间仍有足够的可用Pod。

  • 如果某个Pod通过LoadBalancer类型的ServiceSLB地址访问同一节点上的另一个Pod,并且该ServiceexternalTrafficPolicy设置为Local,那么在节点轮转后,两个Pod可能不再位于同一个节点上,继而导致网络不通。

  • 自定义操作系统镜像非ACK官方严格验证。ACK无法完全保证升级成功。

  • 集群升级需要使用yum下载升级所需的软件包。如果您的集群曾自行修改节点的网络配置或者使用了自定义的操作系统镜像,需确保节点的yum能正常使用。您可以执行yum makecache进行检查。

  • 如果您对集群有过配置更改,例如打开了SWAP分区、曾通过黑屏操作修改kubelet配置或运行时配置等,集群升级过程有可能失败,或自定义配置可能会被覆盖。

  • 通过替盘方式升级节点时,ACK会进行节点排水操作,遵循Pod Disruption Budget(PDB)的前提下将节点上的Pod驱逐至其他可用节点。为确保服务高可用性,建议您采用多副本部署策略,将工作负载分散在多个节点上,同时为关键业务配置PDB,控制同时中断的Pod数量。

    节点排水的默认超时时间为30分钟。如果在超时时间内未能完成Pod迁移,ACK将终止本次升级以确保业务稳定性。

  • 通过替盘方式升级节点时,ACK将按照节点池当前的配置(例如节点登录方式、标签、污点、操作系统镜像、运行时版本)重新初始化节点。正常情况下,更新节点池配置需通过编辑节点池来实现。如您通过其他方式对节点进行了更改,升级时这些更改会被覆盖。

  • 如果节点中的Pod引用了HostPath,且该HostPath指向系统盘,替盘升级后HostPath目录中数据会丢失。

  • 节点池升级过程中仅支持扩容操作,不支持缩容操作。

  • 如果您的节点为游离节点,即未被节点池管理的Worker节点,需参见迁移游离节点至节点池完成迁移。

升级方式

原地升级和替盘升级

控制面升级时,ACK托管集群ACK Serverless集群ACK托管升级;ACK专有集群采用原地升级。

节点池升级时,ACK提供原地升级和替盘升级两种方式。

  • 原地升级:直接在现有节点上进行升级,无需替换节点系统盘或重新初始化节点,原节点数据不受影响。节点IP、磁盘挂载等ECS实例相关配置保持不变,而ACK管理的组件配置(如containerd、kubelet等)可能会根据组件版本差异进行相应调整。

    如需自定义containerdkubelet配置,请参见自定义节点池kubelet配置自定义节点池containerd配置实现。
  • 替盘升级:通过替换系统盘的方式升级,节点会重新初始化。节点IP、数据盘挂载等ECS实例相关的配置不发生改变,但系统盘上的数据将被删除。需提前做好系统盘的备份工作,建议开启磁盘快照。

    额外挂载到该节点上的数据盘不受影响。

特殊场景说明

以下场景必须使用替盘升级:

此外,您也可以新建节点池进行轮转升级:创建新节点池并配置目标环境,通过设置老节点池为不可调度或更新负载调度方式逐步迁移应用至新节点池,最后下线旧节点池。新旧节点池共存期间会产生对应费用。

常见问题

  • 如何手动升级我的集群?

    请参见手动升级集群先完成前置检查,然后执行升级,升级后验证是否符合预期。

  • 升级集群时有哪些推荐做法?

    • 保持升级频率:通过帮助文档、邮件、短信等方式关注ACK版本发布说明,及时规划升级。建议及时升级集群。

    • 制定升级规划:集群升级不仅是版本号的变化,还涉及废弃API、废弃功能、重大变化。请根据集群规模和业务需求提前制定升级规划,预留集群维护窗口。建议在业务低峰期升级集群,升级完成后请充分验证、观察,确保升级对业务无影响。同时建议在测试环境先进行升级验证。

    • 使用自动升级:使用自动升级集群功能,ACK会提前生成升级计划,在维护窗口期内触发前置检查并升级集群,降低版本运维压力。

      您也可以创建ACK托管集群(智能托管模式),集群版本会由ACK自动升级。

  • 集群升级需要多长时间?

    • 控制面:ACK托管集群ACK Serverless集群ACK托管升级,约5分钟;ACK专有集群Master节点需逐一串行升级,每个节点约8分钟。

    • 节点池:取决于节点分批情况。原地升级每批次约5~10分钟;替盘升级(不涉及快照)约8分钟,具体时长受排水情况影响;如需创建快照,升级需等待快照结束后执行,快照创建时间受数据量影响。

  • 我能不能不升级集群版本,永远停留在一个版本?

    不能。过期版本的潜在安全风险不仅会对您的集群产生影响,也可能影响阿里云的整体安全。ACK不允许集群长期处于过期状态,会采取强制升级方式将集群升级至安全稳定的版本。

    请及时升级集群版本(手动升级集群),以便享受ACK提供的最新功能特性和更好的技术支持。升级前,请参见版本发布说明了解各版本的特性变更和注意事项。推荐您启用自动升级集群功能,保持集群的周期性自动升级。

  • ACK支持跨多个版本升级吗?

    ACK不支持跨次要版本升级,您需要逐级升级版本。此外,升级集群控制面前,请确保集群节点的版本与控制面版本相同。

  • 我的集群版本很老了,如何快速升级我的集群版本?

    您可以通过以下两种方案来实现。

    • 方案一:逐级升级版本。每次升级后,请观察集群业务是否持续稳定运行,再进行下一次升级。具体操作,请参见手动升级集群

    • 方案二:新建一个最新版本的集群,将集群应用逐步迁移至新集群,再下线老集群。关于如何创建并配置集群,请参见创建ACK托管集群

  • 1.22版本的集群升级至1.24时需要切换Dockercontainerd,如何操作?

    ACK1.24及更高版本中不再支持将Docker作为内置容器运行时,您需要将节点容器运行时从Docker迁移到containerd。

    您可以通过节点池升级功能在原节点池完成运行时切换,也可以新建containerd节点池完成轮转迁移。具体操作,请参见将节点容器运行时从Docker迁移到containerd

  • ACK如何保证集群升级的稳定性?

    一个ACK集群由控制面和节点池两部分组成。

    • 控制面升级:ACK提供升级前的前置检查功能,对废弃API、组件兼容性、功能配置兼容性、控制面组件等进行检查。检查结果不影响集群中业务的正常运行。如检查结果异常,可参见控制台获取修复建议。更多信息,请参见手动升级集群

    • 节点池升级:节点池升级包括kubeletcontainerd的升级。ACK提供升级前的前置检查功能,检查节点状态、系统资源、磁盘状态、网络环境等。检查结果不影响集群中业务的正常运行。如检查结果异常,可参见控制台获取修复建议。

      您也可以自行配置升级策略,例如通过指定待升级节点、设置每批次可升级的最大节点数、配置升级暂停策略等配置控制升级节奏。如节点系统盘上有重要业务数据,也可以在升级节点池前为节点创建快照。更多信息,请参见升级节点池

  • 集群升级有哪些注意事项?

  • 过期版本的集群还能正常使用吗?

    您仍然可以使用过期版本的集群。但过期版本集群存在安全隐患和稳定性风险,请参见及时升级至维护中的版本。

    由于ACK集群主要采用托管架构,这些安全风险不仅会对您的集群产生影响,也可能会影响阿里云的整体安全。因此,ACK不允许集群长期处于过期状态,会采取强制升级方式将集群升级至安全稳定的版本,请参见过期版本的强制升级

  • 集群升级后支持版本回退吗?

    控制面和节点池kubelet和容器运行时版本升级后均不支持回退。

    升级节点池过程中,如节点系统盘上有重要业务数据,您可在升级前为节点创建快照,以便进行节点数据的备份和恢复。

  • 同时需要升级集群和迁移集群至ACK托管集群Pro,应该先执行哪个?

    推荐您先完成集群的迁移,观测业务运行正常后再开始升级集群。

  • 前置检查提示废弃API怎么办?

    1.20及以上版本的集群升级时,ACK会检查当前版本是否使用了废弃API。检查结果不影响升级流程,仅作为提示信息。建议在升级前完成修复,避免影响下一版本集群的正常运行。

  • 前置检查提示组件版本过低怎么办?

    除控制面组件和部分核心组件(如kube-proxy)外,ACK不会升级其他集群组件。您可以在控制台的组件管理页面了解待升级的组件,参见组件介绍与发布记录了解其版本兼容性和升级要求,并在业务低峰期完成升级。

  • 如何处理集群升级失败并提示the aliyun service is not running on the instance?

    云助手不可用,导致升级命令下发失败。您可以在启动或停止云助手后,重新执行集群升级操作。具体操作,请参见启动、停止或者卸载云助手Agent

  • 如何处理节点PLEG not healthy?

    容器或者容器运行时无响应。请重启节点后重新执行升级。

  • 升级集群时出现invalid object doesn't have additional properties报错怎么办?

    集群升级后,需要同步升级本地的kubectl版本。如果未及时升级,在使用本地kubectl的过程中可能会因为与集群API Server版本不同,发生类似invalid object doesn't have additional properties的报错。关于如何安装或升级kubectl,请参见安装kubectl