随笔 - 307  文章 - 0  评论 - 5  阅读 - 4264

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,分别使用 AlwaysOnFailureNever 重启策略。

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: 容器无论是正常退出还是异常退出,都不会被重启。适用于一次性任务或不希望容器继续运行的场景。

通过合理选择重启策略,用户可以根据应用的特点和需求来控制容器的生命周期,确保集群的健康和稳定运行。

posted on   Leo-Yide  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示