全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:升级节点池

更新时间:Apr 01, 2024

本文介绍如何在不影响数据盘的情况下进行节点池升级。升级节点池的过程包含前置检查、执行升级。前置检查提示影响升级的风险。您可以对kubelet、操作系统和容器运行时按需组合升级。

使用须知

  • 节点池升级功能仅支持有节点的节点池。

  • 替盘升级时会对节点进行排水,排水时干扰预算机制PDB(Pod Disruption Budgets)和终止宽限期为30分钟。届时即使节点上运行的Pod无法调度到新的节点上,节点依然会启动升级。关于干扰预算机制,请参见干扰预算机制

功能说明

节点池升级功能支持升级以下三个组件,可以按需组合选择。

组件名称

升级说明

升级操作

注意事项

kubelet

如果kubelet发布了新的版本,您可以将该节点池内节点的kubelet升级到与控制平面相同的版本。可用的升级版本以当前集群的管控版本为准。

  • 仅选中Kubelet 升级:采取原地升级的方式升级kubelet组件。

  • 同时选中更换操作系统:以更换操作系统的方式为准。

  • 选中通过替换节点系统盘的方式升级节点池:采取替盘升级的方式升级kubelet组件。

升级kubelet版本的注意事项,请参见集群升级

操作系统

操作系统升级场景包括:

  • 操作系统版本升级

  • 更换操作系统类型

    说明

    当前操作系统可更换的类型以控制台给出的可替换镜像为准。

选中更换操作系统选项,采取替盘重置节点的方式升级节点池节点。支持选中升级前为节点建立快照选项,为节点创建快照。

操作系统版本升级或更换操作系统会通过替换节点系统盘的方式分批次升级节点,请不要在系统盘中保存重要数据或者提前做好备份工作,数据盘在升级过程中则不受影响。

容器运行时

如果容器运行时发布了新的版本,您可以升级节点池内节点到新版本的容器运行时。

选中运行时升级选项。

  • 如果从Docker升级到containerd,采用替盘重置节点的方式升级节点池节点。详细信息,请参见将节点容器运行时从Docker迁移到containerd

  • 如果从containerd升级到containerd其他版本,默认采取原地升级的方式。支持选中通过替换节点系统盘的方式升级节点池,采取替盘升级。

支持选中升级前为节点建立快照选项,为节点创建快照。

  • 以替换节点系统盘的方式执行节点运行时升级时,请不要在系统盘中保存重要数据或者提前做好备份工作,数据盘在升级过程中则不受影响。

  • 运行时升级过程中可能造成Pod Prober、Lifecycle Hook失败,也可能会出现Pod原地重启情况。

说明

替盘升级时会使用节点池的配置渲染节点组件参数,使节点组件配置与节点池配置保持一致。

操作步骤

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池列表页面中,选择目标节点池,选择更多>升级

  4. 选择需要升级的操作对象,单击前置检查

    说明

    如果前置检查执行失败或者存在警告项,请参见异常检查项修复方案或通过单击查看详情进入检查报告页面进行排查。

  5. 选择需要升级的操作对象,单击开始升级。您可以通过设置批量升级策略的参数定义每批次最大并行升级的节点数。升级节点池.jpg

相关操作

升级时,在事件轮转区域,您可以进行如下操作:

  • 暂停或继续:在升级到某个阶段您需要暂停或继续升级时,您可以单击暂停继续

    • 集群暂停状态为节点池升级的中间状态,建议您不要在此时对集群进行操作,并尽快完成升级过程。处于中间状态的集群会在7日之后关闭升级过程,同时清理一切升级相关的事件和日志信息。

    • 单击暂停后,已完成升级的节点的kubelet和容器运行时在版本升级后不支持版本回退。对于操作系统,只要原镜像仍旧为创建节点池所支持,操作系统在升级后就支持版本回退,可以替换为原镜像。

  • 取消:在升级到某个阶段您需要取消升级时,您可以单击取消

    单击取消后,已完成升级的节点的kubelet和容器运行时在版本升级后不支持版本回退。对于操作系统,只要原镜像仍旧为创建节点池所支持,操作系统在升级后就支持版本回退,可以替换为原镜像。

节点池升级暂停

参考信息:原地升级和替盘升级

原地升级和替盘升级流程

原地升级和替盘升级的流程如下。节点池升级过程会根据设置的最大并行数,依次对节点进行升级,最大并行数推荐设置为10。每个批次的升级节点数依次为1、2、4、8……直至达到最大并行数。达到最大并行数后,每个批次都按最大并行数的节点进行升级。例如,最大并行数设置为4,那么第一批升级的节点个数为1,第二批升级的节点个数为2,第三批升级的节点个数为4,以后每批的升级节点个数均为4。

下图以最大并行数=N时为例,介绍分批次执行的流程,即每个批次的升级节点数为依次为1、2、4、8……直至达到最大并行数N。

image

替盘升级单个节点内部的升级逻辑

  1. 执行节点排水(并设置节点为不可调度)。

  2. ECS关机,即停止节点。

  3. 更换系统盘,系统盘ID会变更,但是云盘类型、实例IP地址以及弹性网卡MAC地址保持不变。

  4. 重新初始化节点。

  5. 重启节点,节点就绪(设置节点为可调度)。

常见问题

如何基于快照还原数据?

节点池升级时支持为节点创建快照,该快照会默认保持30天,您也可以手动提前清理快照。在极端场景下,例如发现升级后数据丢失,您可以通过下面的方式对数据进行还原。

  • 如果是原地升级,比如只升级了kubelet的版本,您可以通过直接回滚快照的方式还原数据,请参见使用快照回滚云盘

  • 如果是替盘升级,比如升级了操作系统或容器运行时,您可以通过快照创建云盘的方式还原数据,请参见使用快照创建云盘

每个批次升级大概需要多长时间?

原地升级:5min内

替盘升级:如果不涉及快照,一般是8min内。如果在升级时选中快照,升级会在快照结束后执行,执行时间取决于快照时间。节点池升级容忍快照40min,如果40min内快照还未结束会判定节点超时失败,失败的节点此时还未开始执行升级操作。如果没有在系统盘中保存业务数据,可以不选中快照,避免升级用时过久。

升级过程中业务是否受影响?

原地升级:Pod不会重启,不会影响业务。

替盘升级:替盘升级时会对节点排水,如果Pod实现了优雅退出逻辑(Graceful shutdown and zero downtime deployments in Kubernetes),并且多副本部署在多个Node上,对业务没有影响。为了避免同一个应用的多个副本都在一个批次内进行升级,可以手动调整并行数小于Pod副本数。

节点池升级后支持版本回退吗?

目前,kubelet和容器运行时在版本升级后不支持版本回退。操作系统在升级后支持版本回退,前提只要原镜像仍旧为创建节点池所支持,就可以替换为原镜像。

节点升级过程中节点数据会丢失吗?

以替换节点系统盘的方式执行节点运行时升级时,请不要在系统盘中保存重要数据或者提前做好备份工作,数据盘在升级过程中则不受影响。

节点替换系统盘后,节点的IP地址会变吗?

替换系统盘, 系统盘ID会变更,但是云盘类型、实例IP地址以及弹性网卡MAC地址保持不变。更多信息,请参见更换操作系统(系统盘)

如何升级不属于任何节点池的集群节点?

在节点池功能上线前创建的老集群,会存在不属于任何节点池的游离节点。您可以将游离节点迁移到一个节点池后,对节点池进行升级。关于如何迁移游离节点至节点池,请参见迁移游离节点至节点池

节点运行时由Docker切换为containerd后,Docker目录未被清理占用磁盘空间怎么办?

除Kubernetes集群可管理的容器、镜像、日志等文件外,Docker目录中也包含您自行创建的文件路径。如无需使用,请在运行时切换后手动删除数据盘中的Docker目录。

相关文档