症状
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 会在确定性错误上反复浪费资源;应先分类失败原因。