Kubernetes 中的作业被移动到另一个 pod

Kubernetes 中的作业被移动到另一个 pod

一个长时间运行的作业(45 小时)被移动到另一个 pod,导致它重新启动。

从日志中我可以看到该作业收到了 SIGTERM,然后它在另一个 pod 上重新启动,也可能在另一个节点上重新启动。

在 Google Cloud 中检索到的信息没有帮助。除了 Pod 创建之外,页面没有描述此事件Yamlevents

作业 YamlcreationTimestamp: 2019-06-15T10:39:25Z

pod YamlcreationTimestamp: 2019-06-17T13:26:25Z

我主要使用具有多个节点的默认配置1.12.6-gke.11,并且服务器是不可抢占的。

这是 k8s 的默认行为吗?如果是,我该如何禁用它?

答案1

既然您说过您正在使用集群自动缩放,我将假设 pod 被删除是因为集群正在缩小。我们看到了类似的问题,因为我们正在使用 0 缩放节点池运行视频转码作业(然后随着作业的添加而扩展)。

仔细研究后,我们发现自动缩放器文档关于自动缩放器,然后相应地修改了我们的工作:

哪些类型的 pod 可以阻止 CA 删除节点?

  • 具有限制性 PodDisruptionBudget 的 Pod。

  • Kube 系统 Pod 可以:

    • 默认情况下不在节点上运行,*
    • 没有设置 pod 中断预算或其 PDB 限制过多(自 CA 0.6 起)。

不受控制器对象支持的 Pod(因此不是由部署、副本集、作业、状态集等创建的)。*

具有本地存储的 Pod。*

由于各种限制(缺乏资源、节点选择器或亲和性不匹配、反亲和性匹配等)而无法移动到其他地方的 Pod

设置了以下注释的 Pod: "cluster-autoscaler.kubernetes.io/safe-to-evict": "false"

最后一个方法对我们很有效。我建议以此方法作为起点。

相关内容