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

    文章

    185

    浏览量

    20015
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21878

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    容器三种用途

    容器大致用于以下三种用途。钽电容器作为电容器的一,也被用于同样的用途1. 储能用途利用了电池功能。电源瞬断或IC驱动速度急速上升引起负载
    发表于 05-24 02:33

    容器种类与优缺点

    、钽电容器三种。根据使用的电介质性质不同,有以下特征。种类铝电解电容器多层陶瓷电容器钽电容器电介
    发表于 05-24 04:17

    三种类型的功率MOSFET概述

    范围对应着三种不同驱动电压类型的功率MOSFET,下面就来认识这三种类型的功率MOSFET。1、功率MOSFET驱动电压类型1.1 通用驱动的功率MOSFET功率MOSFET的栅极氧化
    发表于 08-08 21:40

    进程类型三种状态

    进程类型进程的三种状态
    发表于 04-02 07:06

    相异步电动机加压启动的各种类型

    本文主要总结了相异步电动机加压启动的各种类型,常见的五种类型有定子电路串电阻、自耦变压器、星角、延边角形、自耦变压器。本文主要将前
    发表于 06-29 06:04

    三种类型的复位

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

    STM32的三种复位类型

    最近在项目的时候需要判别STM32的复位类型,网上这部分资料也有许多大神进行总结。但是感觉不是特别深入,因此,小编参考参考了STM32的参考手册进行详细总结了一下。1、STM32的三种复位类型分别为
    发表于 08-02 06:32

    三种类型的轴承数据

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

    AVR系列单片机内部有三种类型的被独立编址的存储器

    AVR 系列单片机内部有三种类型的被独立编址的存储器,它们分别为:Flash 程序存储器、内部SRAM 数据存储器和EEPROM 数据存储器[1]。Flash 存储器为1K~128K 字节,支持并行
    发表于 11-23 08:22

    STM32的三种boot模式介绍

    浅识STM32的三种boot模式文章目录浅识STM32的三种boot模式任务摘要一、认识boot1.三种BOOT模式介绍2.开发BOOT模式选择3.STM32
    发表于 12-10 07:46

    STM32的三种Boot模式的差异

    :STM32三种BOOT模式介绍.启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。内存类型简介主闪
    发表于 12-20 07:54

    编译的三种类型是什么?

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

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

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

    常见的socket三种类型

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