• Kubernetes中的探针机制


    引言

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

  • 相关阅读:
    介绍一个开源IOT组态项目
    JDBC概念及连接数据库
    JavaScript 各种小案例
    彻底搞懂Spring的循环依赖
    JQuary学习之路---初始JQuary
    高防CDN:构筑网络安全的钢铁长城
    【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 源码介绍以及原理介绍
    有没有可以大量注册虾皮买家号的软件
    1651. Hopper 公司查询 III
    vim入门
  • 原文地址:https://blog.csdn.net/qq_51574197/article/details/126639425