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: 容器无论是正常退出还是异常退出,都不会被重启。适用于一次性任务或不希望容器继续运行的场景。
通过合理选择重启策略,用户可以根据应用的特点和需求来控制容器的生命周期,确保集群的健康和稳定运行。
浙公网安备 33010602011771号