You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Kubernetes Job被驱逐时重启、运行失败时不重启?

Kubernetes Job 区分驱逐与业务失败的重启配置方案

你的需求可以通过Kubernetes原生配置实现,核心是利用Job控制器对Pod终止原因的判断逻辑,区分节点缩容驱逐导致的Pod终止和业务错误/资源超限导致的容器退出,分别配置不同的重启策略。

配置逻辑说明

  • 节点驱逐属于集群侧触发的Pod外部终止事件,终止原因为Evicted,这类终止不会被计入Job的backoffLimit计数,Job控制器会自动创建新的Pod调度到其他可用节点
  • 容器非零退出、资源超限被OOM杀掉属于业务侧触发的内部终止事件,会被识别为执行失败,可以通过配置禁止这类场景的重启

推荐配置示例

apiVersion: batch/v1
kind: Job
metadata:
  name: custom-restart-job
spec:
  backoffLimit: 0 # 禁止业务失败后Job级别的新Pod重建
  template:
    spec:
      restartPolicy: Never # 禁止业务失败后的容器原地重启
      containers:
      - name: work-container
        image: your-business-image:v1
        resources:
          requests:
            cpu: "1"
            memory: "2Gi"
          limits:
            cpu: "1"
            memory: "2Gi"
      # 可选配置:设置节点临时异常时的容忍时间,避免误驱逐
      tolerations:
      - key: "node.kubernetes.io/not-ready"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 300

注意事项

  • 若使用Kubernetes 1.23之前的版本,可执行kubectl describe pod <被驱逐的Pod名称>查看Termination Reason字段,确认驱逐事件的原因是否为Evicted,部分旧版本的自定义驱逐规则可能会被误识别为业务失败
  • 若需要限制驱逐后的总重建次数,可在Job spec下添加activeDeadlineSeconds参数,设置Job的最长存活时间,超过该时间后所有Pod会被直接终止,避免极端场景下的资源浪费

内容的提问来源于stack exchange,提问作者interfect

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:06:04