$ oc get node
OpenShift Container Platform 更新持续时间因部署拓扑而异。此页面可帮助您了解影响更新持续时间的因素,并估算集群更新在您的环境中需要多长时间。
以下因素会影响集群更新持续时间
机器配置运算符 (MCO) 将计算节点重新引导到新的机器配置
机器配置池中MaxUnavailable
的值
|
在 Pod disruption budget (PDB) 中设置的最小副本数或百分比
集群中的节点数量
集群节点的运行状况
在 OpenShift Container Platform 中,集群更新分为两个阶段
集群版本运算符 (CVO) 目标更新有效负载部署
机器配置运算符 (MCO) 节点更新
集群版本操作符 (CVO) 获取目标更新发行版镜像并将其应用于集群。此阶段将更新所有以 Pod 形式运行的组件,而主机组件则由机器配置操作符 (MCO) 更新。此过程可能需要 60 到 120 分钟。
更新的 CVO 阶段不会重启节点。 |
机器配置操作符 (MCO) 将新的机器配置应用于每个控制平面和计算节点。在此过程中,MCO 对集群的每个节点执行以下顺序操作:
隔离并驱逐所有节点
更新操作系统 (OS)
重启节点
取消隔离所有节点并在节点上调度工作负载。
隔离节点后,无法在其上调度工作负载。 |
完成此过程所需的时间取决于多个因素,包括节点和基础设施配置。此过程每个节点可能需要 5 分钟或更长时间才能完成。
除了 MCO 之外,还应考虑以下参数的影响:
控制平面节点更新持续时间是可预测的,并且通常短于计算节点,因为控制平面工作负载经过调整,可以实现优雅更新和快速驱逐。
可以通过将机器配置池 (MCP) 中的maxUnavailable
字段设置为大于1
来并行更新计算节点。MCO 隔离maxUnavailable
中指定数量的节点,并将其标记为不可用于更新。
增加 MCP 上的maxUnavailable
可以帮助池更快地更新。但是,如果maxUnavailable
设置过高,并且同时隔离多个节点,则由于找不到可调度的节点来运行副本,因此 Pod 中断预算 (PDB) 保护的工作负载可能会无法驱逐。如果增加 MCP 的maxUnavailable
,请确保仍然有足够的可调度节点来允许 PDB 保护的工作负载驱逐。
在开始更新之前,必须确保所有节点都可用。任何不可用的节点都会严重影响更新持续时间,因为节点不可用会影响maxUnavailable
和 Pod 中断预算。
要从终端检查节点状态,请运行以下命令:
$ oc get node
NAME STATUS ROLES AGE VERSION
ip-10-0-137-31.us-east-2.compute.internal Ready,SchedulingDisabled worker 12d v1.23.5+3afdacb
ip-10-0-151-208.us-east-2.compute.internal Ready master 12d v1.23.5+3afdacb
ip-10-0-176-138.us-east-2.compute.internal Ready master 12d v1.23.5+3afdacb
ip-10-0-183-194.us-east-2.compute.internal Ready worker 12d v1.23.5+3afdacb
ip-10-0-204-102.us-east-2.compute.internal Ready master 12d v1.23.5+3afdacb
ip-10-0-207-224.us-east-2.compute.internal Ready worker 12d v1.23.5+3afdacb
如果节点的状态为NotReady
或SchedulingDisabled
,则该节点不可用,这会影响更新持续时间。
可以通过在 Web 控制台中扩展**计算** → **节点**来从**管理员**角度检查节点状态。
上图显示了集群操作符更新到其新版本可能花费的时间示例。该示例基于一个三节点 AWS OVN 集群,该集群具有健康的计算MachineConfigPool
,并且没有需要长时间驱逐的工作负载,从 4.13 更新到 4.14。
|
每个集群操作符都具有影响其自身更新时间的特性。例如,此示例中的 Kube API 服务器操作符花费了超过 11 分钟的时间进行更新,因为kube-apiserver
提供优雅终止支持,这意味着允许现有活动请求优雅地完成。这可能会导致kube-apiserver
关闭时间更长。对于此操作符,为了帮助防止和限制更新期间对集群功能的中断,牺牲了更新速度。
另一个影响操作符更新持续时间的特性是操作符是否使用 DaemonSet。网络和 DNS 操作符使用全集群 DaemonSet,这可能需要时间才能推出其版本更改,这是这些操作符自身更新可能需要更长时间的几个原因之一。
某些操作符的更新持续时间很大程度上取决于集群本身的特性。例如,机器配置操作符更新会将机器配置更改应用于集群中的每个节点。与节点较少的集群相比,节点较多的集群的机器配置操作符更新持续时间更长。
每个集群操作符都被分配一个可以更新的阶段。同一阶段的操作符可以同时更新,并且给定阶段的操作符只有在所有先前阶段都完成后才能开始更新。有关更多信息,请参阅“其他资源”部分中的“了解更新期间如何应用清单”。 |
类似集群的历史更新持续时间为您提供了未来集群更新的最佳估计。但是,如果历史数据不可用,则可以使用以下约定来估算集群更新时间:
Cluster update time = CVO target update payload deployment time + (# node update iterations x MCO node update time)
节点更新迭代包括一个或多个并行更新的节点。控制平面节点始终与计算节点并行更新。此外,根据maxUnavailable
值,可以并行更新一个或多个计算节点。
|
例如,要估算更新时间,请考虑一个具有三个控制平面节点和六个计算节点的 OpenShift Container Platform 集群,每个主机大约需要 5 分钟才能重新启动。
重新启动特定节点所需的时间差异很大。在云实例中,重新启动可能需要大约 1 到 2 分钟,而在物理裸机主机中,重新启动可能需要超过 15 分钟。 |
当您为控制平面和计算节点机器配置池 (MCP) 将maxUnavailable
设置为1
时,所有六个计算节点都将一个接一个地在每次迭代中更新。
Cluster update time = 60 + (6 x 5) = 90 minutes
当您为计算节点 MCP 将maxUnavailable
设置为2
时,则每次迭代将并行更新两个计算节点。因此,更新所有节点总共需要三个迭代。
Cluster update time = 60 + (3 x 5) = 75 minutes
OpenShift Container Platform 中所有 MCP 的 |