第 12 章 使用 worker 延迟配置集提高高延迟环境中的集群稳定性

默认情况下,所有节点都会每 10 秒向 OpenShift Container Platform 集群中的 Kubernetes Controller Manager Operator(kube controller)发送心跳信号。如果集群没有从节点获得 heartbeat,OpenShift Container Platform 会使用几个默认机制进行响应。

例如,如果 Kubernetes Controller Manager Operator 在配置的时间后丢失与节点联系:

  1. 控制平面上的节点控制器将节点健康状况更新为 Unhealthy,并将节点 Ready 条件标记为 Unknown
  2. 因此,调度程序会停止将 pod 调度到该节点。
  3. 内部节点控制器添加了一个 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-frequencynode-monitor-grace-perioddefault-not-ready-toleration-secondsdefault-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-readynode.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-secondsdefault-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-readynode.kubernetes.io/unreachable 污点标记节点,并驱除该节点上的 pod。如果该节点上的 pod 具有 NoExecute 容限,则 pod 将在 300 秒后被驱除。如果 pod 具有 tolerationSeconds 参数,则驱除会等待该参数指定的周期。

profile组件参数

Default(默认)

kubelet

node-status-update-frequency

10s

kubelet Controller Manager

node-monitor-grace-period

40s

Kubernetes API 服务器

default-not-ready-toleration-seconds

300s

Kubernetes API 服务器

default-unreachable-toleration-seconds

300s

中型 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-frequency

20s

kubelet Controller Manager

node-monitor-grace-period

2m

Kubernetes API 服务器

default-not-ready-toleration-seconds

60s

Kubernetes API 服务器

default-unreachable-toleration-seconds

60s

低 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-frequency

1m

kubelet Controller Manager

node-monitor-grace-period

5m

Kubernetes API 服务器

default-not-ready-toleration-seconds

60s

Kubernetes API 服务器

default-unreachable-toleration-seconds

60s