引言

在 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官网

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐