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的重启策略包括:
-
Always : 当容器失效时,由kubelet自动重启该容器。
-
OnFailure : 当容器终止运行且退出码不为0时,由kubelet自动重启该容器
-
Never : 不论容器运行状态如何,kubelet 都不会重启该容器。
kubelet重启失效容器的时间间隔以sync-frequency乘以2n来计算,例如1、2、4、8倍等,最长延时5min,并且在成功重启后的10min后重置该时间。
pod的重启策略与控制方式息息相关,当前可用于管理pod的控制器包括ReplicationController、Job、DaemonSet,还可以通过kubelet管理(静态pod)。
每种控制器对pod对重启策略要求如下:
- RC和DaemonSet : 必须设置为Always,需要保证该容器持续运行。
- Job : OnFailur或Never ,确保容器执行完成后不再重启
- kubelet : 在pod失效时自动重启它,不论将RestartPolicy设置为什么值,也不会对pod进行健康检查。
结合pod对状态和重启策略,下表列出一些常见的状态转换场景。