jenkins - 当 CPU 使用率高时,Jenkins 使 Kubernetes 节点卡住
问题描述
我注意到在启动一些 Jenkins 构建时,托管 Jenkins 的节点有时会永远卡住。这意味着整个节点无法访问,并且它的所有 pod 都已关闭(在仪表板中未准备好)。
为了再次弥补,我需要将它从集群中删除并再次添加(我在 GCE 上,所以我需要从实例组中删除它才能删除它)。
注意:在几个小时内我无法通过 SSH 连接到节点,它显然已停止服务^^
据我了解,达到内存最高会使节点崩溃,但达到最高 CPU 使用率只会减慢服务器的速度,而不会像我正在经历的那样产生大问题。在最坏的情况下,Kubelet 应该在 CPU 变得更好之前不可用。
有人能帮我确定这个问题的根源吗?什么可能导致这样的问题?
另一方面,等了几个小时后,我已经能够通过 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 点左右节点卡住了:/
我真的很抱歉,这是很多信息,但我完全迷路了,这不是我第一次发生这种情况^^
谢谢,
解决方案
正如@Brandon 所提到的,这与应用于我的 Jenkins 奴隶的资源限制有关。
在我的情况下,即使在我的 Helm 图表 YAML 文件中精确,这些值也没有设置。我不得不在 UI 中更深入地手动设置它们。
通过这次修改,现在一切都稳定了!:)
推荐阅读
- oracle - Apex 静态文件放在哪里?
- prolog - Make swi prolog to return the predicate name
- c# - 如何创建基于 Youtube API 上传视频代码的 Azure Function?
- c++ - 使用 VID、PID、+SN 查找 USB 端口号
- reactjs - 如何使用 React 组件覆盖 Chrome 新标签页内容
- google-app-engine - google appengine 搜索存储桶以查找特定的“content_type”文本/csv
- c# - 如何从使用 MVVM 的代码中使用“text.changed”控件(在 Xamarin.Forms 中)
- node.js - 类型错误:tf.broadcastTo 不是函数
- javascript - forEach 循环分配相同的随机数
- sapui5 - 如何在 XML 视图的属性绑定中放置链式条件?