0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

容器探针的三种类型介绍

马哥Linux运维 来源:cnblogs 2024-02-26 11:08 次阅读

简介

容器探针(Container Probes)是一种机制,由 kubelet 对容器执行定期的探查,从而获取容器的状态。探针的类型有三种:

启动探针(Startup Probe)

存活探针(Liveness Probe)

就绪探针(Readiness Probe)

探针功能

启动探针

启动探针(StartupProbe)主要用于检测容器内的应用是否已经成功启动并完成初始化任务。它的主要作用有以下几点:

延缓其他探针生效:在容器启动初期,启动探针先于存活探针(LivenessProbe)和就绪探针(ReadinessProbe)生效。当启动探针配置存在时,kubelet 不会执行存活和就绪探针,直到启动探针成功为止。这对于某些启动时间较长或者启动过程中有复杂初始化序列的应用程序来说非常重要,可以避免在应用还未完全启动时就被误判为不健康或就绪,进而被错误地重启或流量过早涌入。

防止频繁重启:若应用启动期间,存活探针或就绪探针就开始工作,而此时应用可能还没有完全启动成功,这两个探针可能会因为应用未能及时响应而触发容器重启,造成不必要的服务中断和循环重启。启动探针的存在可以有效地防止此类情况的发生。

存活探针

存活探针(Liveness Probe)主要作用是检测容器内主进程或服务是否仍然运行正常且响应健康检查。具体来说:

自动恢复:当存活探针检测失败时,kubelet 将认为该容器内的主进程已经不再健康或者已停止提供预期的服务。此时,kubelet 会根据 Pod 的重启策略来决定是否应该重新启动这个容器。通过这种方式,存活探针可以帮助实现故障自愈,及时恢复服务的可用性。

就绪探针

就绪探针(Readiness Probe)主要作用是检测容器是否已经准备好对外提供服务。具体来说:

流量路由控制:当就绪探针成功时,表示该容器内部的应用程序已处于可接受请求的状态,此时 kubelet 会将该容器标记为“就绪”状态,Service 将会将其 IP 地址添加到后端服务列表中,允许 Service 开始将网络流量转发至这个 Pod。

避免无效请求:如果就绪探针失败,则意味着容器可能还在启动过程中、正在重启服务、或者由于某种原因暂时无法正常响应请求。在这种情况下,kubelet 会将容器从 Service 的后端池中移除,确保不会向其发送任何用户请求,从而避免了因应用未准备完毕而引起的错误响应和用户体验下降。

平滑过渡:通过就绪探针,Kubernetes 可以实现滚动更新或部署过程中的平滑过渡,新版本的容器在通过就绪探针验证前,不会承担任何实际流量,直到它们完全启动并做好处理请求的准备。

探针方式

探针实现方式有三种:

HTTP GET请求:Kubernetes 通过向容器内应用发送一个HTTP GET请求来检查应用的状态。如果收到的 HTTP 响应码在 200-399 范围内,则认为该探测成功。


livenessProbe:   #可指定其他两种探针类型
  httpGet:     #指定探针方式
    path: /healthz   #http请求路径
    port: 8080      #请求端口
    httpHeaders: # 可选,用于设置自定义HTTP头部
    - name: Custom-Header
      value: huawei

TCP Socket检查:Kubernetes 尝试与容器上指定的端口建立 TCP 连接。如果能够成功建立连接,则说明探测成功。


livenessProbe:
  tcpSocket:
    port: 8080

exec执行命令:在容器内部执行一个命令,并根据命令退出时返回的状态码判断容器是否正常运行。通常情况下,如果命令返回 0,则表示成功。


livenessProbe:
  exec:
    command:
    - cat
    - /tmp/health

启动探针、存活探针和就绪探针同时支持这三种方式。每种探针可以选择不同探测方式

探针配置参数

Kubernetes中的探针都支持一些通用的参数来定义它们的行为。以下是这些探针通常使用的配置参数:

initialDelaySeconds:容器启动后要等待多少秒后才启动启动、存活和就绪探针。如果定义了启动探针,则存活探针和就绪探针的延迟将在启动探针已成功之后才开始计算。如果 periodSeconds 的值大于 initialDelaySeconds,则 initialDelaySeconds 将被忽略。默认是 0 秒,最小值是 0。

periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。

timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。

successThreshold:探针在失败后,被视为成功的最小连续成功数。默认值是 1。存活和启动探针的这个值必须是 1。

failureThreshold:探针连续失败了 failureThreshold 次之后, Kubernetes 认为总体上检查已失败:容器状态未就绪、不健康、不活跃。对于启动探针或存活探针而言,如果至少有 failureThreshold 个探针已失败, Kubernetes 会将容器视为不健康并为这个特定的容器触发重启操作。kubelet 遵循该容器的terminationGracePeriodSeconds 设置。

terminationGracePeriodSeconds:k8s1.25以上版本新增,为 kubelet 配置从为失败的容器触发终止操作到强制容器运行时停止该容器之前等待的宽限时长。默认值是继承 Pod 级别的 terminationGracePeriodSeconds 值(如果不设置则为 30 秒),最小值为 1。就绪探针不需要配置该参数

完整配置示例:


livenessProbe:
  #可以选择 httpGet、tcpSocket 或 exec 中的一种
  httpGet:
    path: /health
    port: 8080
    httpHeaders:
    - name: Custom-Header
      value: huawei
  #通用参数:
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 1
  successThreshold: 1
  failureThreshold: 3
  terminationGracePeriodSeconds: 30


readinessProbe: # 就绪探针配置类似
startupProbe:   # 启动探针配置也相似

配置建议

如果应用是慢启动类型,建议配置启动探针或者为存活探针配置initialDelaySeconds参数,避免存活探针过早介入导致容器频繁重启。如果应用启动时间不固定建议使用启动探针。

可以将启动探针initialDelaySeconds、periodSeconds的值调低,让启动探针更快感知容器健康状态;由于启动探针探测成功后就会退出不会影响容器后续运行,可以将failureThreshold的值调大,避免应用还未启动完成过早触发重启

由于存活探针探测失败会导致容器重启,因此将存活探针的failureThreshold设置比就绪探针大,这样如果应用有问题应该先切断流量

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 探针
    +关注

    关注

    4

    文章

    206

    浏览量

    20372
  • 容器
    +关注

    关注

    0

    文章

    492

    浏览量

    22025

原文标题:一文带你了解容器探针

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    protel *** 一个库安装了三种类型的,怎么回事?

    本帖最后由 pqwlkh 于 2012-11-28 10:15 编辑 protel *** 一个库安装了三种类型的,怎么回事?
    发表于 11-28 09:59

    三种类型的复位

    00. 目录文章目录00. 目录01. 概述02. 系统复位03. 电源复位04. 备份域复位05. 预留06. 附录07. 声明01. 概述共有三种类型的复位,分别为系统复位、电源复位和备份域复位
    发表于 07-23 06:10

    三种类型的轴承数据

    参见相关说明,或者参见其他帖子。然后下载其中某一个类别的某一个故障数据文件后,文件类型是.mat格式,可以使用MATLAB打开,打开后发现里面又区分了三种类型的数据,如上图,这里不太清楚为什么在已...
    发表于 09-08 06:32

    编译的三种类型是什么?

    编译的三种类型是什么?ARM_Linux制作嵌入式远程调试工具
    发表于 12-24 06:42

    mimo技术的三种模式介绍,mimo技术作用,mimo技术种类

    本文以MIMO技术为中心,主要介绍了mimo技术的三种模式介绍,mimo技术作用,mimo技术种类以及mimo技术在生活当中的应用。
    发表于 12-12 15:58 6.6w次阅读
    mimo技术的<b class='flag-5'>三种</b>模式<b class='flag-5'>介绍</b>,mimo技术作用,mimo技术<b class='flag-5'>种类</b>

    区块链的三种类型及应用介绍

    因为,区块链应用的领域不同,有的领域更需要安全,有的领域则更注重效率,于是就导致,市面上就出现了多种改良版本的区块链,按照对节点的开放程度的不同,目前主要把区块链分为三种类型,分别是公有链、私有链和联盟链。
    发表于 10-25 10:41 1.1w次阅读

    verilog中端口类型有哪三种_verilog语言入门教程

    本文主要阐述了verilog中端口的三种类型及verilog语言入门教程。
    发表于 08-27 09:29 1.1w次阅读

    薄膜电容器按电介质的不同可分为三种类型

    薄膜电容的分类介绍 电介质分类 按电介质的不同可将薄膜电容器分为以下三种类型: T型:即PET –Polyethylene(聚乙烯对苯二酸盐(或酯))P型:即PP-Polypropylene(聚丙烯
    发表于 05-25 00:18 2357次阅读

    气动气缸的类型之气缸的三种种类类型说明

    气动气缸的类型(气缸的三种种类类型)-藤仓自动化 气动气缸最常用于工程和制造行业,通过加压气体的积聚来产生运动。当然,您需要的气缸类型会因具体应用和行业而异。圆柱体也俗称圆柱体;由于仪
    发表于 08-05 17:31 7178次阅读

    容器三种用途分享

    容器大致用于以下三种用途。钽电容器作为电容器的一,也被用于同样的用途。
    发表于 01-03 11:54 1726次阅读

    功率放大器的种类有哪三种类型

    功率放大器是一能将输入信号转换为更高功率输出的电子设备。在电子工程和音频领域中,功率放大器通常被分为三种类型:A类、B类和AB类。下面安泰电子将详细介绍三种类型的功率放大器及其特点
    的头像 发表于 08-02 17:45 1392次阅读
    功率放大器的<b class='flag-5'>种类</b>有哪<b class='flag-5'>三种类型</b>

    射频探针类型有哪些

    为了测量电路性能,需要将信号传输到某种传输线上,这要求至少两个导体,即“信号导体”和“地导体”。因此,射频探针可以分为三种基本类型:GS、SG、GSG。
    发表于 09-05 11:01 4287次阅读
    射频<b class='flag-5'>探针</b>的<b class='flag-5'>类型</b>有哪些

    耦合有哪几种类型?电路的三种耦合方式 三种耦合电路及其特点

    耦合有哪几种类型?电路的三种耦合方式 三种耦合电路及其特点 耦合是指电子元件或电路中不同部分之间的相互作用。在电路中,耦合可以分为很多种类型,其中最基本的有磁耦合和电容耦合两
    的头像 发表于 09-22 12:22 8451次阅读

    常见的socket三种类型

    常见的socket三种类型  Socket是计算机网络中常用的通信机制,在网络编程中起到了非常重要的作用。Socket可以分为三种类型:流套接字(Stream Socket)、数据报套接字
    的头像 发表于 12-08 11:18 2291次阅读

    雷达的种类有哪三种类型

    雷达是一利用电磁波进行目标探测和跟踪的设备。它在军事、航空、海洋、天文和气象等领域具有广泛的应用。雷达的种类可以按照不同的分类方式进行划分。在本文中,我们将按照雷达的工作方式,将雷达分为三种类型
    的头像 发表于 12-21 11:38 5236次阅读