一个长时间运行的作业(45 小时)被移动到另一个 pod,导致它重新启动。
从日志中我可以看到该作业收到了 SIGTERM,然后它在另一个 pod 上重新启动,也可能在另一个节点上重新启动。
在 Google Cloud 中检索到的信息没有帮助。除了 Pod 创建之外,页面没有描述此事件Yaml
。events
作业 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"
最后一个方法对我们很有效。我建议以此方法作为起点。