Kubernetes之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都不会重启该容器。 

kubelet重启策略与控制器息息相关,可用于管理Pod的控制器包括ReplicationController、Job、DaemonSet及直接通过kubelet管理(静态Pod)。每种控制器对Pod的重启策略如下:

RC和DaemonSet:必须设置Always,需确保容器持续运行。

Job:OnFailure或Never,确保容器执行完成后不再重启。

kubelet:在Pod失效时自动重启它,无论将RestartPolicy设置为什么值,也不会对Pod进行健康检查。

三、健康检查 

对Pod的健康检查可以通过两类探针来检查:LivenessProbe和ReadinessProbe。

LivenessProbe探针:用于判断容器是否存活(Running状态)。如果LivenessProbe探针探测到容器不健康,kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回值永远是Success。

ReadinessProbe探针:用于判断容器是否启动完成(read状态),可以接受请求。如果ReadinessProbe探针检测到失败,则Pod的状态将被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器的所在Pod的Endpoint。

kubelet定期从LivenessProbe探针来诊断容器的健康状况。LivenessProbe有以下三种实现方式。

(1)ExecAction:在容器内部执行一个命令,如果该命令返回码为0,则表明容器健康。

(2)TCPSocketAction:通过容器的IP地址和端口号执行TCP检查,如果能建立起TCP连接,则表明容器健康。

(3)HTTPGetAction:通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应状态码大于等于200且小于400,则认为容器状态健康。

 对于每种探测方式,都需要设置initialDelaySeconds和timeoutSeconds两个参数,含义如下。

initialDelaySeconds:启动容器后进行首次健康检查的等待时间,单位为s。

timeoutSeconds:健康检查发送请求后等待响应的超时时间,单位为s。当超时发生时,kubelet会认为容器已经无法提供服务,将会重启该容器。


版权声明:本文为weixin_40225165原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。