上一节讨论了 Job 执行成功的情况,如果失败了会怎么样呢?
修改 myjob.yml,故意引入一个错误:
先删除之前的 Job:
如果将 restartPolicy
设置为 OnFailure
会怎么样?下面我们实践一下,修改 myjob.yml 后重新启动。
运行新的 Job 并查看状态:
当前 SUCCESSFUL
的 Pod 数量为 0
,查看 Pod 的状态:
可以看到有多个 Pod,状态均不正常。kubectl describe pod
查看某个 Pod 的启动日志:
日志显示没有可执行程序,符合我们的预期。
下面解释一个现象:为什么 kubectl get pod
会看到这么多个失败的 Pod?
原因是:当第一个 Pod 启动时,容器失败退出,根据 restartPolicy: Never
,此失败容器不会被重启,但 Job DESIRED
的 Pod 是 1
,目前 SUCCESSFUL
为 0
,不满足,所以 Job controller 会启动新的 Pod,直到 SUCCESSFUL
为 1
。对于我们这个例子,SUCCESSFUL
永远也到不了 1
,所以 Job controller 会一直创建新的 Pod。为了终止这个行为,只能删除 Job。
如果将 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义