Pod 生命周期和重启策略

Pod 在整个生命周期中被系统定义为各种状态,熟悉 Pod 的各种状态对于理解如何设置 Pod 的调度策略、重启策略是很有必要的。

Pod 的状态
状态值 | 描述

  • | -
    Pending | API Server 已经创建该 Pod,但在 Pod 内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程
    Running | Pod 内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态
    Succeeded | Pod 内所有容器均成功执行后退出,且不会再重启
    Failed | Pod 内所有容器均已退出,但至少有一个容器退出为失败状态
    Unknown | 由于某种原因无法获取该 Pod 的状态,可能由于网络通信不畅导致

Pod 的重启策略(RestartPolicy)应用于 Pod 内的所有容器,并且仅在 Pod 所处的 Node 上由 kubelet 进行判断和重启操作。
当某个容器异常退出或者健康检查失败时,kubelet 将根据 RestartPolicy 的设置来进行相应的操作。

Pod 的重启策略包括AlwaysOnFailureNever,默认值为 Always

  • Always: 当容器失效时,由 kubelet 自动重启该容器。
  • OnFailure: 当容器终止运行且退出码不为 0 时,由kubelet自动重启该容器。
  • Never: 不论容器运行状态如何,kubelet 都不会重启该容器。

kubelet 重启失效容器的时间间隔以 sync-frequency 乘以 2n 来计算,例如,1、2、4、8倍等,最长延时 5min,并且在成功重启后的 10min 后重置该时间。

Pod 的重启策略与控制方式息息相关,当前可用于管理 Pod 的控制器包括ReplicationControllerJobDaemonSet 及直接通过kubelet管理(静态Pod)。 每种控制器对 Pod 的重启策略要求如下。

  • RC 和 DaemonSet:必须设置为 Always,需要保证该容器持续运行。
  • JobOnFailureNever,确保容器执行完成后不再重启。
  • kubelet:在 Pod 失效时自动重启它,不论将 RestartPolicy 设置为什么值,也不会对 Pod 进行健康检查。

结合 Pod 的状态和重启策略,下表列出了一些常见的状态转换场景。
Pod 包含的容器数 | Pod 当前的状态 | 发生时间 | Pod 的结果状态 Always | Pod 的结果状态 OnFailure | Pod 的结果状态 Never

  • | - | - | - | - | -
    包含 1 个容器 | Running | 容器成功退出 | Running | Succeeded | Succeeded
    包含 1 个容器 | Running | 容器失败退出 | Running | Running | Failed
    包含两个容器 | Running | 1 个容器失败退出 | Running | Running | Running
    包含两个容器 | Running | 容器被 OOM 杀掉 | Running | Running | Failed
posted @ 2021-03-18 01:16  Professor哥  阅读(409)  评论(0编辑  收藏  举报