读懂这一篇,集群节点不下线(13)

另外 , 我使用 systemd-analyze 命令 , 打开了 systemd 的调试日志 , 发现 systemd 有 Operation not supported 的报错 。

根据以上零散的知识 , 只能做出一个大概的结论:org.freedesktop.systemd1 这个 bus 在经过大量 Unit 创建删除之后 , 没有了响应 。
而这些频繁的 Unit 创建删除测试 , 是 runC 某一个 checkin 改写了 UseSystemd 这个函数 , 而这个函数被用来测试 systemd 的某些功能是否可用 。 UseSystemd 这个函数在很多地方被调用 , 比如创建容器、查看容器性能等操作 。

3. 代码分析

这个问题在线上所有 Kubernetes 集群中 , 发生的频率大概是一个月两例 。 问题一直在发生 , 且只能在问题发生之后 , 通过重启 systemd 来处理 , 这风险极大 。

我们分别给 systemd 和 runC 社区提交了 bug , 但是一个很现实的问题是 , 他们并没有像阿里云这样的线上环境 , 他们重现这个问题的概率几乎是零 , 所以这个问题没有办法指望社区来解决 。 硬骨头还得我们自己啃 。

推荐阅读