← 中文资源

简体中文版本

Kubernetes Job 以 BackoffLimitExceeded 失败

通过阅读 Pod 失败原因并决定是修复作业还是调整重试,诊断 BackoffLimitExceeded。

阅读英文原文

症状

Job 以 BackoffLimitExceeded 失败结束,说明其 Pod 失败次数超出重试预算。关键问题是为何失败:确定性应用错误永不恢复,而 OOMKilled 的 Pod 指向内存上限,依赖暂时不可用则可能是暂时性的。属于哪一种决定了修复在代码、资源还是重试策略。

诊断

describe job 与 Pods;读取上一容器的日志;检查 lastState 与退出码。

kubectl describe job <name> ; kubectl get pods -l job-name=<name>

根因

Job 耗尽重试预算,因为容器反复失败,或源于确定性应用错误,或源于将其杀死的资源上限,控制器遂停止重试并标记失败。

修复

修复底层失败:修正命令、镜像或配置,或在 Pod 被杀时提高内存上限。仅在失败确为暂时性时调整 backoffLimit 与 restartPolicy。

验证

重跑 Job 确认以预期的成功 Pod 数完成,并确认无 Pod 被 OOMKilled。Job 成功且 Pod 健康即证明根因已修复。

常见陷阱

为过检查一味提高 backoffLimit 会在确定性错误上反复浪费资源;应先分类失败原因。