随笔 - 240  文章 - 0  评论 - 3  阅读 - 2814

Pod的重启策略

Kubernetes Pod 的重启策略

在 Kubernetes(简称 K8s)中,Pod 的重启策略(Restart Policy)决定了当容器失败时,kubelet 应该如何处理容器的重启行为。重启策略主要由 spec.restartPolicy 字段定义,并适用于整个 Pod 中的所有容器。Kubernetes 支持以下三种主要的重启策略:

1. Always(默认策略)

  • 行为:
    如果重启策略设置为 Always,无论容器因何原因停止运行(正常退出或异常终止),kubelet 都会尝试重启该容器。这是 Kubernetes 中最常用的重启策略,也是默认值。
  • 适用场景:
    用于长时间运行的服务(如 Web 应用或 API 服务),即服务型容器。
  • 注意:
    当 Pod 被控制器(如 Deployment)管理时,即使容器频繁崩溃,kubelet 也会持续重启容器,直至问题被解决或 Pod 被替换。

2. OnFailure

  • 行为:
    如果设置为 OnFailure,kubelet 仅在容器以非零退出码结束时重启容器。如果容器正常退出(退出码为 0),kubelet 不会进行重启操作。
  • 适用场景:
    通常用于批处理任务或作业型工作负载(如计算任务、数据迁移)。这些任务在成功完成后可以自然终止,无需重启。
  • 典型用法:
    配合 Job 或 CronJob 控制器运行一次性任务。

3. Never

  • 行为:
    如果设置为 Never,kubelet 无论容器停止的原因如何,都不会尝试重启容器。容器停止后将保持停止状态,直到手动干预或关联的控制器(如 Job)重新调度 Pod。
  • 适用场景:
    用于需要手动管理容器状态的场景,或明确指定某些任务在终止后无需重启。

特别说明:OnCrash

文中提到的 OnCrash 策略并非 Kubernetes 原生的重启策略选项(当前 Kubernetes 仅支持 AlwaysOnFailureNever)。类似的行为通常通过控制器(如 DaemonSet 或 NodeProblemDetector)实现。例如,DaemonSet 在节点重启或 Pod 崩溃时会触发 Pod 的重新调度和恢复操作。


控制器的重启行为

在 Kubernetes 中,当 Pod 由控制器(如 Deployment、StatefulSet、DaemonSet)管理时,实际的重启行为由控制器的逻辑控制。例如:

  • Deployment 和 StatefulSet:
    会持续监控 Pod 的状态。如果 Pod 异常终止,控制器会重新创建一个新的 Pod 副本,而不是仅仅重启容器。

  • Job 和 CronJob:
    通常配合 OnFailureNever 策略使用,确保任务在失败时被重新调度运行,直到成功完成。


配置示例

以下是配置不同重启策略的 Pod 示例:

使用 Always 策略(默认值)

apiVersion: v1
kind: Pod
metadata:
  name: always-restart
spec:
  restartPolicy: Always
  containers:
  - name: app
    image: myapp:latest

使用 OnFailure 策略

apiVersion: v1
kind: Pod
metadata:
  name: onfailure-restart
spec:
  restartPolicy: OnFailure
  containers:
  - name: app
    image: myapp:latest

使用 Never 策略

apiVersion: v1
kind: Pod
metadata:
  name: never-restart
spec:
  restartPolicy: Never
  containers:
  - name: app
    image: myapp:latest

总结

  • restartPolicy 的默认值为 Always,适用于服务型工作负载。
  • 使用 OnFailureNever 时,通常搭配 Job 或其他手动管理流程。
  • 控制器(如 Deployment、StatefulSet)会接管 Pod 的重启和替换逻辑,因此 restartPolicy 对这些控制器管理的 Pod 并不生效。

通过合理选择重启策略和控制器逻辑,可以确保 Kubernetes 集群的工作负载具备高可用性和良好的恢复能力。

posted on   Leo-Yide  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
< 2025年2月 >
26 27 28 29 30 31 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 1
2 3 4 5 6 7 8

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