Kubernetes中的探针机制
k8s探针
引言
在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是一个应用,应用在运行期间,可能因为某也意外情况致使程序挂掉;在启动 Pod时,显示明明 Pod 已经启动成功,且能访问里面的端口,但是却返回错误信息。监控这些容器状态稳定性,保证服务在运行期间不会发生问题,发生问题后进行重启等机制,就成为了重中之重的事情,考虑到这点 kubernetes 推出了探针机制。
探针简介
- LivenessProbe(存活性探针):用指定的方式进入容器检测容器中的应用是否正常,如果检测失败,则认为容器不健康,那么kubelet将根据Pod中设置的restartPolicy(重启策略)来判断,Pod是否要进行重启操作,如果容器配置中没有配置livenessProbe存活探针,kubelet将认为存活探针一直为成功状态。
- ReadinessProbe(就绪探针):用于判断容器中应用是否启动完成,当探测成功后才使Pod对外提供网络访问,设置了容器Ready状态为True,如果探测失败,则设置容器的Ready状态为False。对于被Service管理的Pod,Service与Pod、EndPoint的关联关系也将基于Pod时候为Ready进行设置,如果Pod运行过程中Ready状态变为False,则系统自动从Service关联的EndPoint列表中移除,如果Pod恢复Ready状态。将再会被加回Endpoint列表。通过这种机制就能防止将流量转发到不可用的Pod上。
- StartupProbe(启动探针):用于保护慢启动容器,判断容器中的应用是否已经启动,当容器启动时间通常超出 initialDelaySeconds + failureThreshold × periodSeconds 总值时使用。时启动探针时,则所有其他探针都会被禁用,直到探针成功为止。
探针的探测方式
- exec:在容器内指定命令。如果命令返回码为0时探测成功。
- grpc:使用 gRPC 执行一个远程过程调用。 目标应该实现 gRPC健康检查。 如果响应的状态是 “SERVING”,则认为诊断成功。 gRPC 探针是一个 alpha 特性,只有在你启用了 “GRPCContainerProbe” 特性门控时才能使用。
- httpGet:通过对容器的 IP 地址、端口和路径发送 HTTP GET 请求。如果响应的状态码大于等于 200 且小于 400,则认为被认为是成功的。
- tcpSocket:通过容器的 IP 地址和端口号执行 TCP 检查,如果能够建立 TCP 连接,则探测成功。
探针的相关属性
- initialDelaySeconds: Pod 启动后首次进行检查的等待时间,单位“秒”。
- periodSeconds:检查的间隔时间,默认为 10s,单位“秒”。
- timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为1s,单位“秒”。
- successThreshold: 探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness
- 探针中必须为 1s,最小值为 1s。
- failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在
- readiness 探针中,Pod会被标记为未就绪,默认为 3s,最小值为 1s。
探针的探测结果
Success:表示通过检测。
Failure:表示未通过检测。
Unknown:表示检测没有正常进行。
示例
readinessPorbe+livenessProbe
容器在初始化20秒以后,就绪探针每5秒钟使用HTTPGet的方式向服务发起请求,请求8081端口的/actuator/health 路径来进行存活判断:探测结果的http状态码大于等于200小于等于400,则表示探测成功,Pod变成Running状态;否则会杀死pod根据重启策略进行下一步操作。容器在初始化30秒以后,存活探针每5秒钟使用HTTPGet的方式向服务发起请求,请求8081端口的/actuator/health 路径来进行存活判断:探测结果的http状态码大于等于200小于等于400,则表示内部程序已经成功启动,并开放对外提供访问,否则表示内部应用没有启动或者正在启动中,暂不对外提供访问,直到就绪探针探测成功才允许外部访问。
startupPorbe+livenessProbe
Springboot容器在启动在启动应用程序时将会有5分钟(30*10=300s)的时间完成其启动过程。启动探针每10秒钟使用HTTPGet的方式向服务发起请求,请求8081端口的/actuator/health 路径来进行存活判断:探测结果的http状态码大于等于200小于等于400,一旦启动探测成功一次,存活探测任务就会接管对容器的探测, 如果启动探测30次都没有成功,容器会被杀死,并且根据重启策略进行下一步操作。
补充:httpGet探测方式可选字段:
scheme: 用于测试连接的协议,默认为 HTTP。
host: 要连接的主机名,默认为 Pod IP。
port: 容器上要访问端口号或名称。
path: Http 服务器上的访问 URL。
httpHeaders: 自定义 Http请求 Headers,Http 允许重复 Headers。
本文主要内容来自 kubernetes官网
更多推荐
所有评论(0)