目录
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
1. Pod的生命周期
Pod在整个生命周期过程中被系统定义为各种状态:
状态 | 描述 |
Pending | API Server已经创建该Pod,但Pod内还有一个或多个容器的镜像没有创建成功,包括正在下载的镜像的过程 |
Running | Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动或正在重启状态 |
Succeeded | Pod内所有容器均已成功执行退出,且不会再重启 |
Failed | Pod内所有容器均已退出,但至少有一个容器退出为失败状态 |
Unknown | 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致 |
2. Pod的重启策略
Pod重启策略RestartPolicy应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时,kubelet将根据RestartPolicy的设置来进行相应的操作。
Pod的重启策略包括Always、OnFailure和Never,默认值为Always
- 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: OnFailure或Never,确保容器执行完成后不再重启。
- Kubelet: 在Pod失效时自动重启它,不论将RestartPolicy设置为什么值,也不会对Pod进行健康检查
常见状态转换:
3. Pod健康检查
对Pod的健康状态检查可以通过两类探针来检查:LivenessProbe
和ReadinessProbe
3.1 LivenessProbe探针
用于判断容器是否存活(Running状态),如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。
如果一个容器不包含你LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回的值永远是 "Success"
3.2 ReadinessProbe探针
用于判断容器是否完成(Ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态将被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在的Pod的Endpoint。