Kubelet Systemd Watchdog

功能状态: Kubernetes v1.32 [beta] (默认启用:true)

在 Linux 节点上,Kubernetes 1.33 支持与 systemd 集成,以便操作系统 supervisor 可以恢复发生故障的 kubelet。此集成默认不启用。它可以作为定期请求 kubelet 的 /healthz 端点以进行健康检查的替代方案。如果 kubelet 在超时期限内未响应 watchdog,watchdog 将会杀死 kubelet。

systemd watchdog 的工作原理是要求服务定期向 systemd 进程发送一个 keep-alive 信号。如果在指定的超时期限内未收到该信号,则认为该服务无响应并被终止。然后可以根据配置重启该服务。

配置

使用 systemd watchdog 需要在 kubelet service unit 文件中的 [Service] 部分配置 WatchdogSec 参数。

[Service]
WatchdogSec=30s

设置 WatchdogSec=30s 表示服务 watchdog 超时为 30 秒。在 kubelet 中,sd_notify() 函数会以 \( WatchdogSec \div 2\) 的间隔调用,发送 WATCHDOG=1(一个 keep-alive 消息)。如果在超时期限内未向 watchdog 提供信号,kubelet 将被杀死。将 Restart 设置为 "always"、"on-failure"、"on-watchdog" 或 "on-abnormal" 将确保服务自动重启。

关于 systemd 配置的一些详细信息

  1. 如果将 WatchdogSec 的 systemd 值设置为 0 或省略不设置,则不会为此 unit 启用 systemd watchdog。
  2. kubelet 支持最短 1.0 秒的 watchdog 周期;这是为了防止 kubelet 被意外杀死。虽然可以在 systemd unit 定义中将 WatchdogSec 的值设置为短于 1 秒的周期,但 Kubernetes 不支持任何更短的间隔。超时不必是整数秒。
  3. Kubernetes 项目建议将 WatchdogSec 设置为大约 15 秒。支持长于 10 分钟的周期,但明确推荐。

配置示例

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

[Service]
ExecStart=/usr/bin/kubelet
# Configures the watchdog timeout
WatchdogSec=30s
Restart=on-failure
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target

接下来

有关 systemd 配置的更多详细信息,请参考 systemd 文档

最后修改于 2025 年 2 月 12 日太平洋标准时间 12:12 PM:使用数学公式表示除法 (80609828b2)