0

我有一个 Kubernetes 集群,在一个 pod 中运行 Jenkins master,每个构建都在一个单独的从属 pod 中运行。当有很多构建运行时,会有很多 pod 上下旋转,我经常会在这样的作业中看到错误:

Cannot contact slave-jenkins-0g9p0: hudson.remoting.ChannelClosedException: Channel "hudson.remoting.Channel@197b6a38:JNLP4-connect connection from 10.10.3.90/10.10.3.90:54418": Remote call on JNLP4-connect connection from 10.10.3.90/10.10.3.90:54418 failed. The channel is closing down or has closed down
Could not connect to slave-jenkins-0g9p0 to send interrupt signal to process

例如slave-jenkins-0g9p0,吊舱就消失了。没有任何痕迹表明它存在。在观看诸如 之类的信息kubectl describe pod slave-jenkins-0g9p0时,没有错误消息,它只是停止存在。

我有一种感觉,因为有多个 Pod 上下旋转,Kubernetes 试图平衡节点上的负载并重新调度 Pod,但是在杀死它之后,它无法在另一个节点上旋转 Pod。不过我不能确定。也许有一种方法可以告诉 K8s 将一个 pod 绑定到一个节点,直到它自行退出?我不确定什么/如何调试这种情况。

  • Kuberentes 版本:v1.16.13-eks-2ba888在 AWS EKS 上
  • 詹金斯版本:2.257
  • Kubernetes 插件版本1.27.2

任何建议将不胜感激

谢谢

更新:

我在这里上传了三个从属 pod 清单示例,您可以在其中查看分配的资源。上述问题发生在每个正在运行的 pod 中。

节点池由 Kubernetes 自动缩放器 ( v1.14.6) 控制并使用 AWS t3a.large(2 个 CPU,8GB 内存)实例。

更新 2:

我相信我已经找到了问题的原因。我禁用了集群自动缩放器](https://github.com/kubernetes/autoscaler)(v1.14.6)并且问题停止了。

所以似乎正在发生的是自动缩放器正在删除运行从 pd 的节点。我知道污点可用于告诉自动缩放器不要删除节点,但有没有办法动态地执行此操作,如果某个 pod 正在其上运行,它不会删除节点。无需开发新的东西。

4

0 回答 0