上一节讨论了 Job 执行成功的状况,若是失败了会怎么样呢?html
修改 myjob.yml,故意引入一个错误:ide
先删除以前的 Job:ui
若是将 restartPolicy
设置为 OnFailure
会怎么样?下面咱们实践一下,修改 myjob.yml 后从新启动。spa
运行新的 Job 并查看状态:rest
当前 SUCCESSFUL
的 Pod 数量为 0
,查看 Pod 的状态:日志
能够看到有多个 Pod,状态均不正常。kubectl describe pod
查看某个 Pod 的启动日志:code
日志显示没有可执行程序,符合咱们的预期。orm
下面解释一个现象:为何 kubectl get pod
会看到这么多个失败的 Pod?htm
缘由是:当第一个 Pod 启动时,容器失败退出,根据 restartPolicy: Never
,此失败容器不会被重启,但 Job DESIRED
的 Pod 是 1
,目前 SUCCESSFUL
为 0
,不知足,因此 Job controller 会启动新的 Pod,直到 SUCCESSFUL
为 1
。对于咱们这个例子,SUCCESSFUL
永远也到不了 1
,因此 Job controller 会一直建立新的 Pod。为了终止这个行为,只能删除 Job。ci
若是将 restartPolicy
设置为 OnFailure
会怎么样?下面咱们实践一下,修改 myjob.yml 后从新启动。
Job 的 SUCCESSFUL
Pod 数量仍是为 0
,看看 Pod 的状况:
这里只有一个 Pod,不过 RESTARTS
为 3
,并且不断增长,说明 OnFailure
生效,容器失败后会自动重启。
下一节咱们讨论提升 Job 执行效率的方法。
书籍:
1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html