首页 > 解决方案 > 当 CPU 使用率高时,Jenkins 使 Kubernetes 节点卡住

问题描述

我注意到在启动一些 Jenkins 构建时,托管 Jenkins 的节点有时会永远卡住。这意味着整个节点无法访问,并且它的所有 pod 都已关闭(在仪表板中未准备好)。

为了再次弥补,我需要将它从集群中删除并再次添加(我在 GCE 上,所以我需要从实例组中删除它才能删除它)。

注意:在几个小时内我无法通过 SSH 连接到节点,它显然已停止服务^^

据我了解,达到内存最高会使节点崩溃,但达到最高 CPU 使用率只会减慢服务器的速度,而不会像我正在经历的那样产生大问题。在最坏的情况下,Kubelet 应该在 CPU 变得更好之前不可用。

有人能帮我确定这个问题的根源吗?什么可能导致这样的问题?

节点指标 1

节点指标 2

詹金斯奴隶指标

来自 GCE 的节点指标

另一方面,等了几个小时后,我已经能够通过 SSH 访问节点,然后我跑去sudo journalctl -u kubelet看看发生了什么。我在晚上 7 点看不到任何具体内容,但我可以看到经常出现的错误,例如:

Apr 04 19:00:58 nodes-s2-2g5v systemd[43508]: kubelet.service: Failed at step EXEC spawning /home/kubernetes/bin/kubelet: Permission denied
Apr 04 19:00:58 nodes-s2-2g5v systemd[1]: kubelet.service: Main process exited, code=exited, status=203/EXEC
Apr 04 19:00:58 nodes-s2-2g5v systemd[1]: kubelet.service: Unit entered failed state.
Apr 04 19:00:58 nodes-s2-2g5v systemd[1]: kubelet.service: Failed with result 'exit-code'.
Apr 04 19:01:00 nodes-s2-2g5v systemd[1]: kubelet.service: Service hold-off time over, scheduling restart.
Apr 04 19:01:00 nodes-s2-2g5v systemd[1]: Stopped Kubernetes Kubelet Server.
Apr 04 19:01:00 nodes-s2-2g5v systemd[1]: Started Kubernetes Kubelet Server.
Apr 04 19:01:00 nodes-s2-2g5v systemd[43511]: kubelet.service: Failed at step EXEC spawning /home/kubernetes/bin/kubelet: Permission denied
Apr 04 19:01:00 nodes-s2-2g5v systemd[1]: kubelet.service: Main process exited, code=exited, status=203/EXEC
Apr 04 19:01:00 nodes-s2-2g5v systemd[1]: kubelet.service: Unit entered failed state.
Apr 04 19:01:00 nodes-s2-2g5v systemd[1]: kubelet.service: Failed with result 'exit-code'.
Apr 04 19:01:02 nodes-s2-2g5v systemd[1]: kubelet.service: Service hold-off time over, scheduling restart.
Apr 04 19:01:02 nodes-s2-2g5v systemd[1]: Stopped Kubernetes Kubelet Server.
Apr 04 19:01:02 nodes-s2-2g5v systemd[1]: Started Kubernetes Kubelet Server.

我查看旧日志,发现在下午 5:30 开始出现此类消息:

Apr 04 17:26:50 nodes-s2-2g5v kubelet[1841]: I0404 17:25:05.168402    1841 prober.go:111] Readiness probe for "...
Apr 04 17:26:50 nodes-s2-2g5v kubelet[1841]: I0404 17:25:04.021125    1841 prober.go:111] Readiness probe for "...
-- Reboot --
Apr 04 17:31:31 nodes-s2-2g5v systemd[1]: Started Kubernetes Kubelet Server.
Apr 04 17:31:31 nodes-s2-2g5v systemd[1699]: kubelet.service: Failed at step EXEC spawning /home/kubernetes/bin/kubelet: Permission denied
Apr 04 17:31:31 nodes-s2-2g5v systemd[1]: kubelet.service: Main process exited, code=exited, status=203/EXEC
Apr 04 17:31:31 nodes-s2-2g5v systemd[1]: kubelet.service: Unit entered failed state.
Apr 04 17:31:31 nodes-s2-2g5v systemd[1]: kubelet.service: Failed with result 'exit-code'.
Apr 04 17:31:33 nodes-s2-2g5v systemd[1]: kubelet.service: Service hold-off time over, scheduling restart.
Apr 04 17:31:33 nodes-s2-2g5v systemd[1]: Stopped Kubernetes Kubelet Server.
Apr 04 17:31:33 nodes-s2-2g5v systemd[1]: Started Kubernetes Kubelet Server.

此时节点 kubelet 重新启动,它对应于 Jenkins 构建。高 CPU 使用率也有相同的模式。我不知道为什么早些时候它刚刚重新启动,并且在晚上 7 点左右节点卡住了:/

我真的很抱歉,这是很多信息,但我完全迷路了,这不是我第一次发生这种情况^^

谢谢,

标签: jenkinskuberneteskops

解决方案


正如@Brandon 所提到的,这与应用于我的 Jenkins 奴隶的资源限制有关。

在我的情况下,即使在我的 Helm 图表 YAML 文件中精确,这些值也没有设置。我不得不在 UI 中更深入地手动设置它们。

通过这次修改,现在一切都稳定了!:)


推荐阅读