第 12 章 使用 worker 延迟配置集提高高延迟环境中的集群稳定性
默认情况下,所有节点都会每 10 秒向 OpenShift Container Platform 集群中的 Kubernetes Controller Manager Operator(kube controller)发送心跳信号。如果集群没有从节点获得 heartbeat,OpenShift Container Platform 会使用几个默认机制进行响应。
例如,如果 Kubernetes Controller Manager Operator 在配置的时间后丢失与节点联系:
-
控制平面上的节点控制器将节点健康状况更新为
Unhealthy,并将节点Ready条件标记为Unknown。 - 因此,调度程序会停止将 pod 调度到该节点。
-
内部节点控制器添加了一个
node.kubernetes.io/unreachable污点,对节点具有NoExecute效果,默认在五分钟后调度节点上的任何 pod 进行驱除。
如果您的网络容易出现延迟问题,尤其是在网络边缘中有节点时,此行为可能会造成问题。在某些情况下,Kubernetes Controller Manager Operator 可能会因为网络延迟而从健康的节点接收更新。然后,Kubernetes Controller Manager Operator 会从节点驱除 pod,即使节点健康。要避免这个问题,您可以使用 worker 延迟配置集调整 kubelet 和 Kubernetes Controller Manager Operator 在执行操作前等待状态更新的频率。这些调整有助于确保集群在控制平面和 worker 节点间网络延迟无法正常工作时,集群无法正常工作。
这些 worker 延迟配置集是预定义的三组参数,它们带有精心调优的值,可让您控制集群的反应延迟问题,而无需手动确定最佳值。
您可在安装集群时配置 worker 延迟配置集,或当您发现集群网络中的延迟增加时。
12.1. 了解 worker 延迟配置集
worker 延迟配置集包括了为 node-status-update-frequency、node-monitor-grace-period、default-not-ready-toleration-seconds 和 default-unreachable-toleration-seconds 参数精心调整的值。这些参数可让您控制集群的反应延迟问题,而无需手动确定最佳值。
所有 worker 延迟配置集配置以下参数:
-
node-status-update-frequency。指定 kubelet 将其状态更新为 Kubernetes Controller Manager Operator 的时间(以秒为单位)。 -
node-monitor-grace-period。指定 Kubernetes Controller Manager Operator 在节点不健康前等待更新的时间(以秒为单位),并将node.kubernetes.io/not-ready或node.kubernetes.io/unreachable污点添加到节点。 -
default-not-ready-toleration-seconds。在标记节点不健康后,Kubernetes Controller Manager Operator 在从该节点驱除 pod 前等待的时间(以秒为单位)。 -
default-unreachable-toleration-seconds。在标记节点无法访问后,Kubernetes Controller Manager Operator 在从该节点驱除 pod 前等待的时间(以秒为单位)。
不支持手动修改 node-monitor-grace-period 参数。
以下 Operator 监控 worker 延迟配置集的更改并相应地响应:
-
Machine Config Operator (MCO) 更新 worker 节点上的
node-status-update-frequency参数。 -
Kubernetes Controller Manager Operator 更新 control plane 节点上的
node-monitor-grace-period参数。 -
Kubernetes Controller Manager Operator 更新控制计划节点上的
default-not-ready-toleration-seconds和default-unreachable-toleration-seconds参数。
虽然默认配置在大多数情况下可以正常工作,但 OpenShift Container Platform 会为网络遇到比通常更高的延迟的情况提供两个其他 worker 延迟配置集。以下部分描述了三个 worker 延迟配置集:
- 默认 worker 延迟配置集
使用
Default配置集,每个 kubelet 每 10 秒都会将其节点状态报告为 Kubelet Controller Manager Operator(kube controller)。Kubelet Controller Manager Operator 每 5 秒检查 kubelet 的状态。Kubernetes Controller Manager Operator 在考虑不健康的节点前等待 40 秒进行状态更新。它使用
node.kubernetes.io/not-ready或node.kubernetes.io/unreachable污点标记节点,并驱除该节点上的 pod。如果该节点上的 pod 具有NoExecute容限,则 pod 将在 300 秒后被驱除。如果 pod 具有tolerationSeconds参数,则驱除会等待该参数指定的周期。profile 组件 参数 值 Default(默认)
kubelet
node-status-update-frequency10s
kubelet Controller Manager
node-monitor-grace-period40s
Kubernetes API 服务器
default-not-ready-toleration-seconds300s
Kubernetes API 服务器
default-unreachable-toleration-seconds300s
- 中型 worker 延迟配置集
如果网络延迟比通常稍高,则使用
MediumUpdateAverageReaction配置集。MediumUpdateAverageReaction配置集减少了 kubelet 更新频率为 20 秒,并将 Kubernetes Controller Manager Operator 等待这些更新的时间更改为 2 分钟。该节点上的 pod 驱除周期会减少到 60 秒。如果 pod 具有tolerationSeconds参数,则驱除会等待该参数指定的周期。Kubernetes Controller Manager Operator 等待 2 分钟以认为节点不健康。另一分钟后,驱除过程会启动。
profile 组件 参数 值 MediumUpdateAverageReaction
kubelet
node-status-update-frequency20s
kubelet Controller Manager
node-monitor-grace-period2m
Kubernetes API 服务器
default-not-ready-toleration-seconds60s
Kubernetes API 服务器
default-unreachable-toleration-seconds60s
- 低 worker 延迟配置集
如果网络延迟非常高,请使用
LowUpdateSlowReaction配置集。LowUpdateSlowReaction配置集减少了 kubelet 更新频率为 1 分钟,并将 Kubernetes Controller Manager Operator 等待这些更新的时间更改为 5 分钟。该节点上的 pod 驱除周期会减少到 60 秒。如果 pod 具有tolerationSeconds参数,则驱除会等待该参数指定的周期。Kubernetes Controller Manager Operator 等待 5 分钟时间认为节点不健康。另一分钟后,驱除过程会启动。
profile 组件 参数 值 LowUpdateSlowReaction
kubelet
node-status-update-frequency1m
kubelet Controller Manager
node-monitor-grace-period5m
Kubernetes API 服务器
default-not-ready-toleration-seconds60s
Kubernetes API 服务器
default-unreachable-toleration-seconds60s