问题
在 CentOS 7.9 主机上部署了 k8s 1.21 集群。
因为改配置,需要重启 kubelet 。几个主机都能一秒重启完 kubelet ,不影响容器运行。
但是在某个主机重启 kubelet 时,却一直阻塞无反应,然后报错超时。
于是看 kubelet 日志,发现报错:
google 搜了下这个报错 org.freedesktop.systemd1
,发现可能是 systemd 出问题了。
于是看内核日志,发现几天前就有报错了:
报错表示 kubelet 收到了 QUIT 信号,因此不能正常工作。虽然容器还能继续运行,但重启 kubelet 就会失败。
而 Started Session
日志可能是有用户登录,也可能是 cron 等系统进程引发的。
但是看了监控,没人在这个主机上执行 kill 命令或什么奇怪命令。所以怀疑是 CentOS 或 k8s 的 bug 引发的。比如本来要发送 kill 信号给容器内 1 号进程,却发送给宿主机的 1 号进程。
解决办法
既然 systemd 不能正常工作,那就尝试重启主机,于是恢复了。
如果它没自己恢复,那就重装主机,反正是 k8s 节点,能自动迁移。文章来源:https://uudwc.com/A/zDJn
事后
选一台测试主机,尝试手动发送 SIGTERM 信号给 systemd 进程,没有反应。
然后发送 QUIT 信号,果然能复现该问题。一堆 systemd 模块不能正常工作,连 reboot、shutdown 也不行。
文章来源地址https://uudwc.com/A/zDJn