跳过正文
k8s使用Job执行任务失败了怎么办
  1. Posts/

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

·666 字·2 分钟· · ·
Kubernetes
小碗汤
作者
小碗汤
云原生搬砖师
Table of Contents

图片描述: 100

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

修改job-fail.yaml,故意引入一个错误:

image.png

Never
#

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

运行 Job 并查看状态,可以看到Never策略的job,pod失败后,重新创建:

image.png

image.png

直到重新创建7个(spec.backoffLimit默认为6,即重试6次,共7个pod)pod都失败后,认为失败,job的status里会更新为Failed
image.png

当前 Completion 的数量为 0

image.png

查看 Pod 的状态:

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

image.png

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

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

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

image.png

OnFailure
#

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

image.png

image.png

Job 的 Completions Pod 数量还是为 0,看看 Pod 的情况:

image.png

这里只有一个 Pod,不过 RESTARTS 在不断增加,说明 OnFailure 生效,容器失败后会自动重启。

image.png

6次失败后,pod被删除:

image.png

同时更新job的status为失败,方便查看最终执行结果:

image.png

-------莫愁前路无知己 天下谁人不识君-------

相关文章

采坑指南——k8s域名解析coredns问题排查过程
·1652 字·4 分钟·
Kubernetes
如何批量删除k8s资源对象
·827 字·2 分钟·
Kubernetes
kubernetes垃圾回收器GarbageCollector控制器源码分析(二)
·5313 字·11 分钟·
Kubernetes
kubernetes垃圾回收器GarbageCollector控制器源码分析(一)
·6943 字·14 分钟·
Kubernetes
亚马逊AWS云服务器不合理扣费怎么处理
·1395 字·3 分钟·
服务器
CSDN VIP如何添加自定义栏目
·2537 字·6 分钟·
Blog

公众号二维码