我在Kubernetes上使用Jenkins,有时候由于ClosedPaddelException,与代理Pod的连接会丢失。根据我的经验,我们观察到这是因为:
- 与pod的随机连接丢失,特别是当pod运行占用大量资源的大型进程时。因此pod仍然存在,但连接现在丢失
- 由于
kubectl drain
集群所有者在节点上进行维护而导致Pod被逐出
我想问一些关于如何防止这种情况的想法。我不是一个JenkinsMaven,需要一些帮助什么是可能的。
- 对于第一点,我可以以某种方式配置Jenkins master来尝试“重新搜索”丢失的代理吗?
- 关于第二点,我知道Kubernetes有一个"preStop"钩子,可以在pod被驱逐之前运行一个pre-stop命令。是否可以以某种方式告诉控制平面(可能通过这个钩子,或者其他方式)在pod完成操作之前不要驱逐它?
对于上下文,我还使用Jenkins Configuration as Code部署Jenkins。
1条答案
按热度按时间5gfr0r5j1#
下面是我如何通过在代理pod规范中捕获SIGTERM来修复这个问题的。陷阱帮助代理进程保持活动状态并连接到jenkins控制器。即使你尝试耗尽kubernetes节点,jenkins代理java进程也会保持活动状态,直到终止宽限期结束,在示例中是120秒。
字符串