Jenkins for Kubernetes,如何防止ClosedLogicelException并保持pod代理活跃

w7t8yxp5  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(108)

我在Kubernetes上使用Jenkins,有时候由于ClosedPaddelException,与代理Pod的连接会丢失。根据我的经验,我们观察到这是因为:

  • 与pod的随机连接丢失,特别是当pod运行占用大量资源的大型进程时。因此pod仍然存在,但连接现在丢失
  • 由于kubectl drain集群所有者在节点上进行维护而导致Pod被逐出

我想问一些关于如何防止这种情况的想法。我不是一个JenkinsMaven,需要一些帮助什么是可能的。

  • 对于第一点,我可以以某种方式配置Jenkins master来尝试“重新搜索”丢失的代理吗?
  • 关于第二点,我知道Kubernetes有一个"preStop"钩子,可以在pod被驱逐之前运行一个pre-stop命令。是否可以以某种方式告诉控制平面(可能通过这个钩子,或者其他方式)在pod完成操作之前不要驱逐它?

对于上下文,我还使用Jenkins Configuration as Code部署Jenkins。

5gfr0r5j

5gfr0r5j1#

下面是我如何通过在代理pod规范中捕获SIGTERM来修复这个问题的。陷阱帮助代理进程保持活动状态并连接到jenkins控制器。即使你尝试耗尽kubernetes节点,jenkins代理java进程也会保持活动状态,直到终止宽限期结束,在示例中是120秒。

apiVersion: v1
kind: Pod
spec:
  terminationGracePeriodSeconds: 120
  containers:
  - name: jnlp
    command:
      - sh
      - -xc
      - | 
        trap 'echo "Pod Received SIGTERM, Pipeline will continue till terminationGracePeriodSeconds ends; $(date +"%d-%m-%Y %T.%N %Z")"' SIGTERM;
        /usr/local/bin/jenkins-agent

字符串

相关问题