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的重启策略包括 Always,OnFailure和Never,默认值为Always。
- Always:当容器失效时,由kubelet自动重启该容器。
- ONFailure:当容器终止运行且退出码不为0时,由kubelet自动启动该容器。
- Never:不论该容器运行状态如何,kubelet都不会重启该容器。
Pod的重启策略与控制方式息息相关,当前可用于管理Pod的控制器包括RelicationController、Job、DaemonSet,还可以通过kubelet管理(静态Pod)。每种控制器对Pod的重启策略要求如下。
- RC和DaemonSet: 必须设置为Always,需要保证该容器持续运行。
- Job:OnFailure或Never,确保容器执行完成后不再重启。
- kubelet:在Pod失效时自动重启它,不论将RestartPolicy设置为什么值,也不会对Pod进行健康检查。