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 配置的一些详细信息
- 如果将
WatchdogSec
的 systemd 值设置为 0 或省略不设置,则不会为此 unit 启用 systemd watchdog。 - kubelet 支持最短 1.0 秒的 watchdog 周期;这是为了防止 kubelet 被意外杀死。虽然可以在 systemd unit 定义中将
WatchdogSec
的值设置为短于 1 秒的周期,但 Kubernetes 不支持任何更短的间隔。超时不必是整数秒。 - 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)