本文介绍如何在不影响数据盘的情况下进行节点池升级。升级节点池的过程包含前置检查、执行升级。前置检查提示影响升级的风险。您可以对kubelet、操作系统和容器运行时按需组合升级。
使用须知
节点池升级功能仅支持有节点的节点池。
替盘升级时会对节点进行排水,排水时干扰预算机制PDB(Pod Disruption Budgets)和终止宽限期为30分钟。届时即使节点上运行的Pod无法调度到新的节点上,节点依然会启动升级。关于干扰预算机制,请参见干扰预算机制。
节点池升级过程中仅支持扩容操作,不支持缩容操作。
功能说明
节点池升级功能支持升级以下三个组件,可以按需组合选择。
组件名称 | 升级说明 | 升级操作 | 注意事项 |
kubelet | 如果kubelet发布了新的版本,您可以将该节点池内节点的kubelet升级到与控制平面相同的版本。可用的升级版本以当前集群的管控版本为准。 |
| 升级kubelet版本的注意事项,请参见集群升级。 |
操作系统 | 操作系统升级场景包括:
| 选中更换操作系统选项,采取替盘重置节点的方式升级节点池节点。支持选中升级前为节点建立快照选项,为节点创建快照。 | 操作系统版本升级或更换操作系统会通过替换节点系统盘的方式分批次升级节点,请不要在系统盘中保存重要数据,或提前做好备份工作,数据盘在升级过程中则不受影响。 |
容器运行时 | 如果容器运行时发布了新的版本,您可以升级节点池内节点到新版本的容器运行时。 | 选中运行时升级选项。
支持选中升级前为节点建立快照选项,为节点创建快照。 |
|
替盘升级时会使用节点池的配置渲染节点组件参数,使节点组件配置与节点池配置保持一致。
操作步骤
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池列表的操作升级列,选择目标节点池对应的更多 > 升级。
选择需要升级的操作对象(操作系统、容器运行时或kubelet版本),指定需要升级的节点(所有节点或指定节点),并配置批量升级的策略,然后单击前置检查,并在前置检查通过后单击开始升级。
批量升级策略的配置项说明如下。
升级方式:
每批次可执行的最大节点数量:升级过程会根据设置的最大并行数依次对节点进行升级,最大可设置为10。详细介绍,请参见下方参考信息:原地升级和替盘升级。
自动暂停策略:选择在节点升级过程中是否需要暂停或暂停的频率。自动暂停便于您观察升级批次的健康状况。
每批次的间隔时间:自动暂停策略为不暂停时,选择每个升级批次之间是否需要时间间隔或间隔的时长。间隔时间可选范围为5~120分钟。
说明如果前置检查执行失败或者存在警告项,请参见异常检查项修复方案或通过单击查看详情进入检查报告页面进行排查。
相关操作
升级时,在事件轮转区域,您可以进行如下操作:
暂停或继续:在升级到某个阶段您需要暂停或继续升级时,您可以单击暂停或继续。
集群暂停状态为节点池升级的中间状态,建议您不要在此时对集群进行操作,并尽快完成升级过程。处于中间状态的集群会在7日之后关闭升级过程,同时清理一切升级相关的事件和日志信息。
单击暂停后,已完成升级的节点的kubelet和容器运行时在版本升级后不支持版本回退。对于操作系统,只要原镜像仍旧为创建节点池所支持,操作系统在升级后就支持版本回退,可以替换为原镜像。
取消:在升级到某个阶段您需要取消升级时,您可以单击取消。
单击取消后,已完成升级的节点的kubelet和容器运行时在版本升级后不支持版本回退。对于操作系统,只要原镜像仍旧为创建节点池所支持,操作系统在升级后就支持版本回退,可以替换为原镜像。
参考信息:原地升级和替盘升级
原地升级和替盘升级流程
原地升级和替盘升级的流程如下。节点池升级过程会根据设置的最大并行数,依次对节点进行升级,并行节点数最大可设置为10。每个批次的升级节点数依次为1、2、4、8……直至达到最大并行数。达到最大并行数后,每个批次都按最大并行数的节点进行升级。例如,最大并行数设置为4,那么第一批升级的节点个数为1,第二批升级的节点个数为2,第三批升级的节点个数为4,以后每批的升级节点个数均为4。
下图以最大并行数=N时为例,介绍分批次执行的流程,即每个批次的升级节点数为依次为1、2、4、8……直至达到最大并行数N。
原地升级单个节点内部的升级逻辑
执行升级前置检查。如果容器有关键异常(例如无法正常服务ttrpc请求、容器内进程无法正常响应信号等),则会停止升级。
将当前容器和Pod状态保留到tmp临时目录。
将containerd、crictl及相关配置文件升级为ACK提供的新版本,重启containerd(此行为不会影响运行中的容器)。如果您之前在节点上修改过
/etc/containerd/config.toml
配置,此次升级会导致您的修改被覆盖。确保kubelet处于正常运行状态,节点就绪。
替盘升级单个节点内部的升级逻辑
执行节点排水(并设置节点为不可调度)。
ECS关机,即停止节点。
更换系统盘,系统盘ID会变更,但是云盘类型、实例IP地址以及弹性网卡MAC地址保持不变。
重新初始化节点。
重启节点,节点就绪(设置节点为可调度)。
常见问题
节点池升级后支持版本回退吗?
kubelet和容器运行时在版本升级后均不支持版本回退。操作系统在升级后支持版本回退,回退时需要确保原镜像仍被该节点池所支持。
升级过程中业务是否受影响?
原地升级:Pod不会重启,不会影响业务。
替盘升级:替盘升级时会对节点排水,如果Pod实现了优雅退出逻辑(Graceful shutdown and zero downtime deployments in Kubernetes),并且多副本部署在多个Node上,对业务没有影响。为了避免同一个应用的多个副本都在一个批次内进行升级,可以手动调整并行数小于Pod副本数。
每个批次升级大概需要多长时间?
原地升级:5min内
替盘升级:如果不涉及快照,一般是8min内。如果在升级时选中快照,升级会在快照结束后执行,执行时间取决于快照时间。节点池升级容忍快照40min,如果40min内快照还未结束会判定节点升级超时失败,失败的节点此时还未开始执行升级操作。如果没有在系统盘中保存业务数据,可以不选中快照,避免升级用时过久。
节点升级过程中节点数据会丢失吗?
以替换节点系统盘的方式执行节点运行时升级时,请不要在系统盘中保存重要数据或者提前做好备份工作,数据盘在升级过程中则不受影响。
节点替换系统盘后,节点的IP地址会变吗?
替换系统盘, 系统盘ID会变更,但是云盘类型、实例IP地址以及弹性网卡MAC地址保持不变。更多信息,请参见更换操作系统(系统盘)。
如何升级不属于任何节点池的集群节点?
在节点池功能上线前创建的老集群,会存在不属于任何节点池的游离节点。您可以将游离节点迁移到一个节点池后,对节点池进行升级。关于如何迁移游离节点至节点池,请参见迁移游离节点至节点池。
节点运行时由Docker切换为containerd后,Docker目录未被清理占用磁盘空间怎么办?
除Kubernetes集群可管理的容器、镜像、日志等文件外,Docker目录中也包含您自行创建的文件路径。如无需使用,请在运行时切换后手动删除数据盘中的Docker目录。