kubelet systemd 看门狗

特性状态: Kubernetes v1.32 [beta] (enabled by default: true)

在 Linux 节点上,Kubernetes 1.32 支持与 systemd 集成,以允许操作系统监视程序恢复失败的 kubelet。 这种集成默认并未被启用。它可以作为一个替代方案,通过定期请求 kubelet 的 /healthz 端点进行健康检查。 如果 kubelet 在设定的超时时限内未对看门狗做出响应,看门狗将杀死 kubelet。

systemd 看门狗的工作原理是要求服务定期向 systemd 进程发送一个保持活跃的信号。 如果 systemd 进程在指定的超时时限内未接收到某服务发出的信号,则对应的服务被视为无响应并被终止。 之后 systemd 进程可以基于配置重启该服务。

配置

使用 systemd 看门狗需要在 kubelet 服务单元文件的 [Service] 部分配置 WatchdogSec 参数:

[Service]
WatchdogSec=30s

设置 WatchdogSec=30s 表示服务看门狗超时时限为 30 秒。 在 kubelet 内,sd_notify() 函数被调用,以 WatchdogSec ÷ 2 的时间间隔, 发送 WATCHDOG=1(保持活跃的消息)。如果在超时时限内看门狗未被“投喂”此信号,kubelet 将被杀死。 将 Restart 设置为 "always"、"on-failure"、"on-watchdog" 或 "on-abnormal" 将确保服务被自动重启。

systemd 配置相关的一些细节:

  1. 如果你将 systemd 的 WatchdogSec 值设置为 0,或省略不设置,则对应的单元上不启用 systemd 看门狗。
  2. kubelet 支持设置的最小看门狗超时时限为 1.0 秒;这是为了防止 kubelet 被意外杀死。 你可以在 systemd 单元定义中将 WatchdogSec 的值设置为短于 1 秒的超时时限, 但 Kubernetes 不支持任何更短的时间间隔。超时时限不必是整数的秒数。
  3. Kubernetes 项目建议将 WatchdogSec 时限设置为大约 15 秒。 系统支持超过 10 分钟的时限设置,但明确推荐这样做。

示例配置

[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/bin/kubelet
# 配置看门狗的超时时限
WatchdogSec=30s
Restart=on-failure
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target

接下来

有关 systemd 配置的细节,请参阅 systemd 文档

最后修改 December 19, 2024 at 9:31 AM PST: [zh] Add systemd-watchdog.md and its feature gate (ba2944fdf4)