首页 > 其他分享 >一文带你了解容器探针

一文带你了解容器探针

时间:2024-02-23 18:44:10浏览次数:29  
标签:容器 一文 启动 kubelet 探针 存活 就绪

一文带你了解容器探针

马哥Linux运维 2024-02-23 18:31 江苏 听全文

简介

容器探针(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参数,避免存活探针过早介入导致容器频繁重启。如果应用启动时间不固定建议使用启动探针。

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

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

链接:https://www.cnblogs.com/huaweiyun/p/18028870

(版权归原作者所有,侵删)

阅读原文 阅读 148 马哥Linux运维 ​ 喜欢此内容的人还喜欢   Oracle 主从配置详细介绍     我常看的号 马哥Linux运维 不看的原因   C++20新规大揭秘:编程的未来已来!     AI让生活更美好 不看的原因   阿里员工自曝:白天得知绩效3.25,晚上回到家看到蹒跚学步的儿子和做饭的老母亲,彻底绷不住了,自己太失败了!     3个朋友读过 猫哥职场见闻 不看的原因   写留言              

人划线

 

标签:容器,一文,启动,kubelet,探针,存活,就绪
From: https://www.cnblogs.com/cheyunhua/p/18030201

相关文章

  • 多个docker容器如何共享网络
    目录多个docker容器如何共享网络一、创建共享网络二、docker-compose启动容器共享网络参考文档:多个docker容器如何共享网络一、创建共享网络无论哪种方式,第一步都是创建一个共享网络,这里创建一个名为local_public的网络,可以自定义,执行后会输出一个网络的ID,代表创建成功,也可......
  • docker中mysql容器中配置时区
    mysql在docker容器中跑默认是取系统时区的,所以一般是UTC的时区,也就是说在中国的话,会比实际时间小8个小时。所以可以在环境变量中配置时区,我这里是通过docker-compose.yml中配置,如下图:[root@localhostmysql8]#catdocker-compose.ymlversion:'3'services:mysql8:......
  • 11. 盛最多水的容器C++
    原本想o(n2)遍历的,结果超时了,果然没这么简单就解决。classSolution{public:ints(vector<int>height,inti,intj){ints1=min(height[i],height[j])*(j-i);returns1;}intmaxArea(vector<int>&height){intmax=0,i=0,j=heigh......
  • 在k8S中,Pod的容器重启策略有哪些?
    在Kubernetes(k8S)中,Pod的容器重启策略(restartPolicy)定义了当Pod中的容器终止运行时kubelet应该如何处理。Kubernetes提供了以下三种重启策略:Always:默认值,表示无论容器以何种方式退出(包括正常退出、非零退出码或其他故障),kubelet都会自动重启该容器。这个策略适用......
  • 在k8S中,如何实现Pod中容器的文件和宿主机之间相互拷贝?
    在Kubernetes(k8S)中,要实现Pod中容器的文件与宿主机之间的相互拷贝,可以使用kubectlcp命令。以下是具体的命令格式和用法:从Pod中复制文件到本地(宿主机):kubectlcp[NAMESPACE/]POD:CONTAINER_PATHLOCAL_FILEPATH例如,将名为my-pod的Pod中,容器内的/path/to/file-i......
  • Docker 常用容器命令
    Docker常用容器命令  一、新建并启动容器dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]--name="容器新名字"#为容器指定一个名称;-d#后台运行容器,并返回容器ID,也即启动守护式容器;-i#以交互模式运行容器,通常与-t同时使用;-t#为容器重新分配......
  • 责任链模式与spring容器的搭配应用
    背景有个需求,原先只涉及到一种A情况设备的筛选,每次筛选会经过多个流程,比如先a功能,a功能通过再筛选b功能,然后再筛选c功能,以此类推。现在新增了另外一种B情况的筛选,B情况同样需要A情况的筛选流程,并且需要在A情况的基础上,新增另外的功能筛选,这里假设A需要a、b、c功能的筛选,而B需要a......
  • 掌握云容器网络:何为ipvs
    本文分享自华为云社区《【理解云容器网络】2-基础篇-ipvs介绍》,作者:可以交个朋友。IPVS简介ipvs是工作在Linux内核态的4层负载均衡;和用户态的负载均衡软件(如nginx、haproxy)功能类似:作为客户端访问的统一入口并将访问请求根据调度算法转给后端真实的服务器。相比于用户态负载......
  • pve 将硬盘挂载到ct容器
    1.配置文件方法vi/etc/pve/lxc/101.conf#101是ct容器编号mp0:/mnt/pve/hdd4,mp=/mnt/hdd4tmp1:/mnt/pve/hdd6,mp=/mnt/hdd6tmp2:/mnt/pve/sdd,mp=/mnt/sdd1t配置信息如图:配置完成后,可在容器资源里看到挂载信息:然后重启容器即可。......
  • 华为云帕鲁服务器-云耀云容器版,到底强在哪?
    本文分享自华为云社区《深入解析华为云帕鲁服务器-云耀云容器版》,作者:云容器大未来。随着游戏【幻兽帕鲁】爆火出圈,和好友联机玩帕鲁已成为当前很多玩家的日常,天下打工人一道“白天当帕鲁,晚上玩帕鲁”,各家云厂商自然不会放过这个带货的热点,纷纷跟进推出各自的帕鲁专用服务器。放......