Pod 的重启策略
Pod 的重启策略
在 K8s 中,Pod 重启策略(restartPolicy
)定义了容器在退出时是否重新启动。它是 Pod 的一部分,并且与容器的生命周期管理紧密相关。重启策略指定了容器退出时的行为,以确保 Pod 达到所需的状态。
1. 重启策略的三种类型
重启策略有三种类型,每种类型会影响容器退出后的行为:
-
Always: 无论容器是正常退出(退出状态码为 0)还是异常退出(退出状态码非 0),Kubernetes 都会自动重启容器。这是默认的重启策略,适用于希望容器始终保持运行的情况。
-
OnFailure: 只有当容器非正常退出(退出状态码非 0)时,才会重启容器。如果容器正常退出(退出状态码为 0),Kubernetes 不会重启该容器。适用于执行任务时,只有遇到错误时才希望重新启动容器的场景。
-
Never: 容器无论是正常退出还是异常退出,都不会被重启。适用于一些一次性任务,或者不希望容器在退出后重新启动的场景。
2. 参考案例
我们通过一个配置文件来演示三种不同的重启策略,文件中包含了三个不同的 Pod 配置,分别指定了不同的重启策略。
2.1 master231 测试
以下是一个配置文件示例,定义了三种不同的重启策略:
apiVersion: v1
kind: Pod
metadata:
name: restartpolicy-always
spec:
restartPolicy: Always
containers:
- image: harbor.oldboyedu.com/oldboyedu-troubleshooting/stress:v0.1
name: stress
command: ["sleep", "60"]
imagePullPolicy: Always
---
apiVersion: v1
kind: Pod
metadata:
name: restartpolicy-onfailure
spec:
restartPolicy: OnFailure
containers:
- image: harbor.oldboyedu.com/oldboyedu-troubleshooting/stress:v0.1
name: stress
command: ["sleep", "120"]
imagePullPolicy: Always
---
apiVersion: v1
kind: Pod
metadata:
name: restartpolicy-never
spec:
restartPolicy: Never
containers:
- image: harbor.oldboyedu.com/oldboyedu-troubleshooting/stress:v0.1
name: stress
command: ["sleep", "120"]
imagePullPolicy: Always
通过以下命令应用该配置文件:
kubectl apply -f 19-pods-restartPolicy.yaml
这将创建三个 Pod,分别使用 Always
、OnFailure
和 Never
重启策略。
2.2 worker232 测试
在 worker232
节点上测试容器的重启行为。首先,查看 restartpolicy-always
容器状态:
docker ps -a | grep restartpolicy-always
然后,手动杀掉容器并观察容器是否会根据重启策略进行重启:
docker kill 712c557476d8
docker ps -a | grep restartpolicy-always
对于 restartpolicy-always
,容器在退出后会自动重启。
同样地,查看 restartpolicy-never
容器:
docker ps -a | grep restartpolicy-never
docker kill a4f4f9eeb993
docker ps -a | grep restartpolicy-never
对于 restartpolicy-never
,容器在退出后不会重启。
2.3 worker233 测试
在 worker233
节点上测试 restartpolicy-onfailure
容器。首先查看容器状态:
docker ps -a | grep restartpolicy-onfailure
然后杀掉容器并观察容器是否会根据重启策略进行重启:
docker kill bbb26d604dcd
docker ps -a | grep restartpolicy-onfailure
对于 restartpolicy-onfailure
,容器只有在异常退出时才会重启。
2.4 master231 测试
最后,在 master231
节点查看 Pod 的状态,确保重启策略正确应用:
kubectl get pods -o wide
通过输出,你将看到:
restartpolicy-always
: 无论容器是正常退出还是异常退出,都会重新启动。restartpolicy-never
: 无论容器是正常退出还是异常退出,都不会重新启动。restartpolicy-onfailure
: 容器只有在异常退出时才会重新启动。
3. 总结
通过测试我们可以得出以下结论:
- Always: 每当容器退出(无论是正常退出还是异常退出),都会被重启。常用于保证关键服务持续运行的场景。
- OnFailure: 容器正常退出时不会重启,但如果容器因异常退出(退出状态码非 0),Kubernetes 会自动重启容器。适用于需要容器执行任务的场景,但只在任务失败时需要重启。
- Never: 容器无论是正常退出还是异常退出,都不会被重启。适用于一次性任务或不希望容器继续运行的场景。
通过合理选择重启策略,用户可以根据应用的特点和需求来控制容器的生命周期,确保集群的健康和稳定运行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!