kubernetes pod生命周期、探针简介、类型及示例
kubernetes pod生命周期
-
pod的生命周期(pod lifecycle),从pod start时候可以配置postStart检测,运行过程中可以配置livenessProbe和 readinessProbe,最后在 stop前可以配置preStop操作
探针简介
-
探针是由 kubelet 对容器执行的定期诊断,以保证Pod的状态始终处于运行状态,要执行诊断,kubelet 调用由容器实现的Handler(处理程序),也成为Hook(钩子),有三种类型的处理程序:
-
ExecAction #在容器内执行指定命令,如果命令退出时返回码为0则认为诊断成功。
-
TCPSocketAction #对指定端口上的容器的IP地址进行TCP检查,如果端口打开,则诊断被认为是成功的。
-
HTTPGetAction:#对指定的端口和路径上的容器的IP地址执行HTTPGet请求,如果响应的状态码大于等于200且小于 400,则诊断被认为是成功的。
-
-
每次探测都将获得以下三种结果之一:
-
成功:容器通过了诊断。
-
失败:容器未通过诊断。
-
未知:诊断失败,因此不会采取任何行动。
-
Pod重启策略与镜像拉取策略
Pod重启策略:Pod一旦配置探针,在检测失败时候,会基于restartPolicy对Pod进行下一步操作:
-
restartPolicy (容器重启策略):
-
Always:当容器异常时,k8s自动重启该容器,ReplicationController/Replicaset/Deployment,默认为Always。
-
OnFailure:当容器失败时(容器停止运行且退出码不为0),k8s自动重启该容器。
-
Never:不论容器运行状态如何都不会重启该容器,Job或CronJob。
-
-
imagePullPolicy (镜像拉取策略):
-
IfNotPresent:node节点没有此镜像就去指定的镜像仓库拉取,node有就使用node本地镜像。
-
Always:每次重建pod都会重新拉取镜像
-
Never:从不到镜像中心拉取镜像,只使用本地镜像
-
探针类型
-
startupProbe: #启动探针,kubernetes v1.16引入
-
判断容器内的应用程序是否已启动完成,如果配置了启动探测,则会先禁用所有其它的探测,直到startupProbe检测成功为止,如果startupProbe探测失败,则kubelet将杀死容器,容器将按照重启策略进行下一步操作,如果容器没有提供启动探测,则默认状态为成功
-
-
livenessProbe: #存活探针
-
检测容器容器是否正在运行,如果存活探测失败,则kubelet会杀死容器,并且容器将受到其重启策略的影响,如果容器不提供存活探针,则默认状态为 Success,livenessProbe用于控制是否重启pod。
-
-
readinessProbe: #就绪探针
-
如果就绪探测失败,端点控制器将从与Pod匹配的所有Service的端点中删除该Pod的IP地址,初始延迟之前的就绪状态默认为Failure(失败),如果容器不提供就绪探针,则默认状态为 Success,readinessProbe用于控制pod是否添加至service。
-
探针配置参数
-
探针有很多配置字段,可以使用这些字段精确的控制存活和就绪检测的行为:
-
initialDelaySeconds: 120 #初始化延迟时间,告诉kubelet在执行第一次探测前应该等待多少秒,默认是0秒,最小值是0
-
periodSeconds: 60 #探测周期间隔时间,指定了kubelet应该每多少秒秒执行一次存活探测,默认是 10 秒。最小值是 1
-
timeoutSeconds: 5 #单次探测超时时间,探测的超时后等待多少秒,默认值是1秒,最小值是1。
-
successThreshold: 1 #从失败转为成功的重试次数,探测器在失败后,被视为成功的最小连续成功数,默认值是1,存活探测的这个值必须是1,最小值是
1。
-
failureThreshold: 3 #从成功转为失败的重试次数,当Pod启动了并且探测到失败,Kubernetes的重试次数,存活探测情况下的放弃就意味着重新启动容器,就绪探测情况下的放弃Pod 会被打上未就绪的标签,默认值是3,最小值是1。
探针http配置参数:
HTTP 探测器可以在 httpGet 上配置额外的字段:
-
host: #连接使用的主机名,默认是Pod的 IP,也可以在HTTP头中设置 “Host” 来代替。
-
scheme: http #用于设置连接主机的方式(HTTP 还是 HTTPS),默认是 HTTP。