欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

k8s使用Job执行任务失败了怎么办

程序员文章站 2022-05-09 11:33:43
Kubernetes 中使用 Job 和 CronJob 两个资源分别提供了一次性任务和定时任务的特性,这两种对象也使用控制器模型来实现资源的管理,我们在这篇文章来介绍Job执行如果失败了会怎么样呢? 修改job fail.yaml,故意引入一个错误: Never 如果将 设置为 会怎么样?下面我们 ......

kubernetes 中使用 job 和 cronjob 两个资源分别提供了一次性任务和定时任务的特性,这两种对象也使用控制器模型来实现资源的管理,我们在这篇文章来介绍job执行如果失败了会怎么样呢?

修改job-fail.yaml,故意引入一个错误:
k8s使用Job执行任务失败了怎么办

never

如果将 restartpolicy 设置为 never 会怎么样?下面我们实践一下,修改job-fail.yaml后重新启动。

运行 job 并查看状态,可以看到never策略的job,pod失败后,重新创建:
k8s使用Job执行任务失败了怎么办

k8s使用Job执行任务失败了怎么办
直到重新创建7个(spec.backofflimit默认为6,即重试6次,共7个pod)pod都失败后,认为失败,job的status里会更新为failed
k8s使用Job执行任务失败了怎么办

当前 completion 的数量为 0
k8s使用Job执行任务失败了怎么办

查看 pod 的状态:

可以看到有多个 pod,状态均不正常。kubectl describe pod 查看某个 pod 的启动日志:

k8s使用Job执行任务失败了怎么办

日志显示没有可执行程序,符合我们的预期。

为什么 kubectl get pod 会看到这么多个失败的 pod?

原因是:当第一个 pod 启动时,容器失败退出,根据 restartpolicy: never,此失败容器不会被重启,但 job desired 的 pod 是 1,目前 successful0,不满足,所以 job controller 会启动新的 pod,直到 successful1。对于我们这个例子,successful 永远也到不了 1,所以 job controller 会一直创建新的 pod,直到设置的数量,失败后pod不会自动被删除,为了终止这个行为,只能删除 job,pod也会被同时删掉。

k8s使用Job执行任务失败了怎么办

onfailure

如果将 restartpolicy 设置为 onfailure 会怎么样?下面我们实践一下,修改job-fail.yaml后重新启动。k8s使用Job执行任务失败了怎么办

k8s使用Job执行任务失败了怎么办

job 的 completions pod 数量还是为 0,看看 pod 的情况:

k8s使用Job执行任务失败了怎么办

这里只有一个 pod,不过 restarts 在不断增加,说明 onfailure 生效,容器失败后会自动重启。
k8s使用Job执行任务失败了怎么办

6次失败后,pod被删除:
k8s使用Job执行任务失败了怎么办

同时更新job的status为失败,方便查看最终执行结果:
k8s使用Job执行任务失败了怎么办



本公众号免费提供csdn下载服务,海量it学习资源,如果你准备入it坑,励志成为优秀的程序猿,那么这些资源很适合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大数据、面试资料、前端 等资源。同时我们组建了一个技术交流群,里面有很多大佬,会不定时分享技术文章,如果你想来一起学习提高,可以公众号后台回复【2】,免费邀请加技术交流群互相学习提高,会不定期分享编程it相关资源。


扫码关注,精彩内容第一时间推给你

k8s使用Job执行任务失败了怎么办