Kubernetes笔记(八)--探针健康检查

【云原生K8S】Kubernetes之探针 K8S探针检测类型与探针机制 阅读详情

健康检查

上节课我们和大家一起学习了Pod中容器的生命周期的两个钩子函数,PostStart与PreStop,其中PostStart是在容器创建后立即执行的,而PreStop这个钩子函数则是在容器终止之前执行的。除了上面这两个钩子函数以外,还有一项配置会影响到容器的生命周期的,那就是健康检查的探针。

在Kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期。

  • kubelet 通过使用 liveness probe 来确定你的应用程序是否正在运行,通俗点将就是是否还活着。一般来说,如果你的程序一旦崩溃了, Kubernetes 就会立刻知道这个程序已经终止了,然后就会重启这个程序。而我们的 liveness probe 的目的就是来捕获到当前应用程序还没有终止,还没有崩溃,如果出现了这些情况,那么就重启处于该状态下的容器,使应用程序在存在 bug 的情况下依然能够继续运行下去。
  • kubelet 使用 readiness probe 来确定容器是否已经就绪可以接收流量过来了。这个探针通俗点讲就是说是否准备好了,现在可以开始工作了。只有当 Pod 中的容器都处于就绪状态的时候 kubelet 才会认定该 Pod 处于就绪状态,因为一个 Pod 下面可能会有多个容器。当然 Pod 如果处于非就绪状态,那么我们就会将他从我们的工作队列(实际上就是我们后面需要重点学习的 Service)中移除出来,这样我们的流量就不会被路由到这个 Pod 里面来了。

和前面的钩子函数一样的,我们这两个探针的支持两种配置方式:

  • exec:执行一段命令
  • http:检测某个 http 请求
  • tcpSocket:使用此配置, kubelet 将尝试在指定端口上打开容器的套接字。如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。实际上就是检查端口!

好,我们先来给大家演示下存活探针的使用方法,首先我们用exec执行命令的方式来检测容器的存活,如下:

apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec
  labels:
    test: liveness
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

我们这里需要用到一个新的属性:livenessProbe,下面通过exec执行一段命令,其中periodSeconds属性表示让kubelet每隔5秒执行一次存活探针,也就是每5秒执行一次上面的cat /tmp/healthy命令,如果命令执行成功了,将返回0,那么kubelet就会认为当前这个容器是存活的并且很监控,如果返回的是非0值,那么kubelet就会把该容器杀掉然后重启它。另外一个属性initialDelaySeconds表示在第一次执行探针的时候要等待5秒,这样能够确保我们的容器能够有足够的时间启动起来。大家可以想象下,如果你的第一次执行探针等候的时间太短,是不是很有可能容器还没正常启动起来,所以存活探针很可能始终都是失败的,这样就会无休止的重启下去了,对吧?所以一个合理的initialDelaySeconds非常重要。

另外我们在容器启动的时候,执行了如下命令:

☁  ~ /bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

意思是说在容器最开始的30秒内有一个/tmp/healthy文件,在这30秒内执行cat /tmp/healthy命令都会返回一个成功的返回码。30秒后,我们删除这个文件,现在执行cat /tmp/healthy是不是就会失败了,这个时候就会重启容器了。

我们来创建下该Pod,在30秒内,查看Pod的Event:

☁  ~ kubectl describe pod liveness-exec

我们可以观察到容器是正常启动的,在隔一会儿,比如40s后,再查看下Pod的Event,在最下面有一条信息显示 liveness probe失败了,容器被删掉并重新创建。

然后通过

kubectl get pod liveness-exec

可以看到RESTARTS值加1了。

同样的,我们还可以使用HTTP GET请求来配置我们的存活探针,我们这里使用一个liveness镜像来验证演示下,

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: cnych/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: X-Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

同样的,根据periodSeconds属性我们可以知道kubelet需要每隔3秒执行一次liveness probe,该探针将向容器中的 server 的8080端口发送一个 HTTP GET 请求。如果 server 的 /healthz 路径的 handler 返回一个成功的返回码,kubelet就会认定该容器是活着的并且很健康,如果返回失败的返回码,kubelet将杀掉该容器并重启它。initialDelaySeconds 指定kubelet在该执行第一次探测之前需要等待3秒钟。

通常来说,任何大于200小于400的返回码都会认定是成功的返回码。其他返回码都会被认为是失败的返回码。

我们可以来查看下上面的healthz的实现:

http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
    duration := time.Now().Sub(started)
    if duration.Seconds() > 10 {
        w.WriteHeader(500)
        w.Write([]byte(fmt.Sprintf("error: %v", duration.Seconds())))
    } else {
        w.WriteHeader(200)
        w.Write([]byte("ok"))
    }
})

大概意思就是最开始前10s返回状态码200,10s过后就返回500的status_code了。所以当容器启动3秒后,kubelet 开始执行健康检查。第一次健康监测会成功,因为是在10s之内,但是10秒后,健康检查将失败,因为现在返回的是一个错误的状态码了,所以kubelet将会杀掉和重启容器。

同样的,我们来创建下该Pod测试下效果,10秒后,查看 Pod 的 event,确认liveness probe失败并重启了容器。

☁  ~ kubectl describe pod liveness-http

然后我们来通过端口的方式来配置存活探针,使用此配置,kubelet将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: cnych/goproxy
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

我们可以看到,TCP 检查的配置与 HTTP 检查非常相似,只是将httpGet替换成了tcpSocket。 而且我们同时使用了readiness probe和liveness probe两种探针。 容器启动后5秒后,kubelet将发送第一个readiness probe(可读性探针)。 该探针会去连接容器的8080端,如果连接成功,则该 Pod 将被标记为就绪状态。然后Kubelet将每隔10秒钟执行一次该检查。

除了readiness probe之外,该配置还包括liveness probe。 容器启动15秒后,kubelet将运行第一个 liveness probe。 就像readiness probe一样,这将尝试去连接到容器的8080端口。如果liveness probe失败,容器将重新启动。

有的时候,应用程序可能暂时无法对外提供服务,例如,应用程序可能需要在启动期间加载大量数据或配置文件。 在这种情况下,您不想杀死应用程序,也不想对外提供服务。 那么这个时候我们就可以使用readiness probe来检测和减轻这些情况。 Pod中的容器可以报告自己还没有准备,不能处理Kubernetes服务发送过来的流量。

从上面的YAML文件我们可以看出readiness probe的配置跟liveness probe很像,基本上一致的。唯一的不同是使用readinessProbe而不是livenessProbe。两者如果同时使用的话就可以确保流量不会到达还未准备好的容器,准备好过后,如果应用程序出现了错误,则会重新启动容器。

另外除了上面的initialDelaySeconds和periodSeconds属性外,探针还可以配置如下几个参数:

  • timeoutSeconds:探测超时时间,默认1秒,最小1秒。
  • successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,但是如果是liveness则必须是 1。最小值是 1。
  • failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。

这就是liveness probe(存活探针)和readiness probe(可读性探针)的使用方法。在Pod的生命周期当中,我们已经学习了容器生命周期中的钩子函数和探针检测,下节课给大家讲解Pod层面生命周期的一个阶段:初始化容器。

K8S 探针 探针(Probe)是一种健康检查机制,用于监测Pod中容器的运行状况,确保应用的高可用性和稳定性。 阅读详情

相关推荐

Kubernetes Pod的LivenessProbe探针:三种健康检查方式

Kubernetes通过LivenessProbe探针为Pod中的容器提供了强大的健康检查机制,确保应用的稳定运行。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 5019

K8S生命周期---钩子函数(postStart/preStop)

s

weixin_45880055的博客 6203

ingress-healthz:验证Kubernetes中入口功能的小型服务

入口健康 验证Kubernetes中入口功能的小型服务 谢谢

Kubernetes - 实战:Kubernetes pod健康状态检测

实战中,根据应用程序的具体需求,合理配置这些探针非常重要,包括检查间隔、超时时间、失败阈值等参数。这样可以确保Kubernetes在出现问题时能够及时作出响应,如重启不健康的应用程序或暂时隔离未就绪的Pod,进而提高整个系统的可用性和稳定性。在Kubernetes实战中,Pod健康状态检测是确保应用程序在集群中持续稳定运行的关键手段。

qq_33240556的博客 507

中国ETF基金行情数据API接口

上交所:https://tsanghi.com/api/fin/etf/XSHG/daily?token={token}&ticker={ticker} 深交所:https://tsanghi.com/api/fin/etf/XSHE/daily?token={token}&ticker={ticker}

2401_83242712的博客 4028

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1815

k8s服务健康检查不通过一直重启

解决:查看应用事件,带有connection refused,就要检查应用的监听IP或应用配置的端口。原因一:由于应用的资源配额过低,导致应用启动慢,使启动时间超出健康检查时间。原因二:由于健康检查时间设置过短,使健康检查时间低于应用启动时间。原因四:应用监听的IP错误,或暴露的端口不是8080。解决:检查应用的CPU配额和内存配额,适当调大额度。解决:检查健康检查的不健康阈值,适当调大阈值。原因三:应用程序有问题,启动报错。

AustinCien的博客 1020

AutoGenTestCase - AI大模型生成测试用例

AI技术助力高效软件测试:AutoGenTestCase工具介绍 传统手工测试存在效率低、覆盖不全等痛点。AutoGenTestCase工具集成DeepSeek、通义千问等AI大模型,能快速解析需求并自动生成标准化测试用例,将数小时工作缩短至分钟级。该工具部署简单,仅需配置APIKey即可运行,支持多种测试用例类型比例设置,并输出Markdown和Excel格式的测试用例。通过GitHub或网盘下载后,用户可按照教程完成APIKey配置、需求文档上传和用例生成等操作,显著提升测试效率与覆盖完整性。

YIqifeibaQI的博客 347

健康检查探针

在k8s集群内部署,pod有健康检查探针,httpd镜像检查nfs挂载到pod内的index.html存在即可更新。每次更新(新旧容器)最多容器总量为15个在所有节点上搭建nfs服务器。

weixin_66129730的博客 226

关于影响力最大化问题中贪心算法的一些理解

在影响力最大化问题中(Influence Maximization,以下简称IM),贪心算法是最早提出的一种解决方法,并且一直沿用至今。它基于IM问题所具有的单调性(Monotonicity)和子模性(Submodularity)使用一种Hill Climbing策略,不断使用Monte Carlo模拟来寻找在当前情况下的具有最大传播范围的节点,添加至种子集合,得到最终结果,算法伪代码如下所示: 这里算法1其实并没有使用MonteCarlo模拟,而只是使用了贪心的策略...

nianjuan1990的专栏 2851

国内主流AI编程工具使用实例及总结

AI编程辅助工具是利用人工智能技术来帮助程序员进行软件开发的工具。它们可以在代码编写、代码审查、错误检测、代码优化等多个编程环节发挥作用,提高编程效率和代码质量。通义灵码,基于通义大模型的AI研发辅助工具,提供代码智能生成、研发智能问答、任务自主执行等能力,为开发者带来智能化研发体验,引领AI原生研发新范式。包含智能编码助手和AI程序员。

技术博客 1万+

20210720-springboot项目使用k8s部署,服务启动成功,但是健康检查失败

问题一:提示/health 404错误 问题描述 Jenkins上配置了流水线脚本,其中配置了健康检查的路径(直接抄别人项目的配置) 此时虽然项目启动成功,但是由于健康检查提示404,导致项目一直重启 解决方案 我的项目依赖的springboot版本号是2.2.6.RELEASE,对应的actuator版本号也升级了 从项目启动日志看出,新版本下的健康检查路径该为了/actuator/health 因此需要修改Jenkins上的健康检查路径为/actuator/health 问题二:提示/actuat

u011439259的博客 2432

点云配准3:3d-ndt算法在pcl上的实现以及参数设置

3d-ndt算法在pcl上的使用方法以及参数设置

诺有缸的高飞鸟的博客 7891

k8s之健康检查及探针

Kubernetes(K8s)中的健康检查机制是确保应用在集群中正常运行的关键工具。它通过探针(Probes)监控 Pod 的状态,自动执行恢复操作(如重启或重新调度)以保持系统的稳定性。本文将详细介绍 K8s 的健康检查和探针,包括它们的类型、配置方法、以及常见的应用场景。

youziguo的专栏 3640

【CANdelaStudio编辑CDD】-1.2-给$10服务SessionControl创建一个新Session会话并修改Session state machine会话状态机(UDS诊断)

前一篇:【UDS诊断描述文件CDD】-1.1-ISO_14229中$10服务理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/120375515案例背景: 在CDD中如何给$10服务创建一个新的Session会话; 在CDD中如何给$10服务修改Session state machine会话状态机。 目录 1 查看$10服务中已有的Session会话​ 2 查看$10服务中已有的Session state machine会话状态机 3 在$10...

「汽车电子助手」的博客 6070

YOLOV26详解 从原理到部署

计算机视觉领域最具影响力的目标检测框架迎来重大里程碑。2026年1月,Ultralytics 正式发布 YOLOv26——这不是一次简单的版本迭代,而是一场面向边缘计算时代的架构重构。本专栏基于 Ultralytics 官方技术白皮书、YOLO Vision 2025 大会首发内容及国际前沿研究成果,系统拆解 YOLOv26 从算法原理到工程落地的全栈技术体系。与常规教程不同,我们聚焦与,帮助你在端侧 AI 部署的实战中掌握核心竞争力。

u012133341的博客 2009

深入理解Kubernetes探针和.NET服务健康检查机制

本博客深入介绍.NET框架的健康检查和Kubernetes的探针结合应用,解决微服务架构中的技术挑战。详细示例和最佳实践可在我的Azure仓库中找到。

qq_40404477的博客 1696

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[云原生] Kubernetes(k8s)健康检查详解与实战演示(就绪性探针 和 存活性探针)

Kubernetes中的健康检查主要使用 存活性探针()和 就绪性探针(异常实例自动剔除,并重启新实例多种类型探针检测,保证异常pod不接入流量不停机部署,更安全的滚动升级Kubernetes(k8s)最新版最完整版环境部署+master高可用实现(k8sV1.24.1+dashboard+harbor)......

匠人精神,持之以恒! 3576

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

一文掌握k8s的健康检查探针

本文介绍了Kubernetes容器健康检查探针的配置与使用。Kubernetes提供三种探针:存活探针(livenessProbe)用于检测容器运行状态,失败会触发重启;就绪探针(readinessProbe)判断业务是否就绪,控制流量转发;启动探针(startupProbe)检测应用启动状态。探针支持HTTP请求、TCP连接和命令行脚本三种检查方式,并详细说明了各配置参数的含义。文章还提供了YAML配置示例,并推荐使用xkube管理平台进行可视化配置。通过合理配置健康检查机制,可以确保容器应用稳定运行并及

weixin_56364253的博客 945

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

K8S环境下配置SpringBoot健康检查(活性探针)

容器存活性检查,用于判断容器是否健康,告诉 kubelet 一个容器什么时候处于不健康的状态。如果 LivenessProbe 探针探测到容器不健康,则 kubelet 将删除该容器,并根据容器的重启策略做相应的处理。如果ReadinessProbe探针探测到失败,Endpoint Controller 将从 Service 的 Endpoint 中删除包含该容器所在 Pod 的 IP 地址的Endpoint条目。:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。

慌途L 5775

【K8S 云原生】Pod资源限制、Pod容器健康检查(探针)

K8S Pod的资源限制、Pod的健康检查—探针

koeda1的博客 2377

K8S使用就绪和存活探针配置健康检查

本文转自:K8S使用就绪和存活探针配置健康检查 | 王柏元的博客,评论请前往原网站   一、 健康检查 健康检查(Health Check)可用于服务运行的状态监控,比如腾讯旗下的DNSPOD的D监控,要求配置一个访问路径以判断网站是否可以正常访问实际上就是一个健康检查,当发现健康检查失败时会发送一个邮件通知或者短信来告知网站管理员进行维修。 而在现代一些分布式系统中,用户访问不再是单台主...

retravel的专栏 4690

K8S 三种探针 readinessProbe、livenessProbe和startupProbe

介绍 K8S 提供了3种探针 readinessProbe livenessProbe startupProbe(这个1.16版本增加的) 1、startupProbe readinessProbe:指示容器是否准备好服务请求(是否启动完成并就绪)。绪探针初始延迟之前的就绪状态默认为Failure,待容器启动成功弹指指标探测结果为成功后,状态变更为 Success。如果未配置就绪探针,则默认状态为Success。 只有状态为 Success ,才会被纳入 pod 所属 service 中,也就是

Jerry00713的博客 3万+

手把手带你玩转k8s-健康检查之存活探针与就绪探针

前言 经过前面的一系列文章,我们对k8s应该也算是简单的入门了。本文开始,会逐步开始讲解一些进阶的知识点。在前面的文章中,我们主要是围绕如何完整地发布一个可对外访问的服务。其中重点是以springboot+vuejs前后端分离项目为主的。后续的文章也会是围绕springboot+vuejs,不过会基于其扩展一些新的服务,如redis、rabbitmq、elk等。 关于健康检测 健康检查(Health Check)是让系统知道您的应用实例是否正常工作的简单方法。 如果您的应用实例不再工作,则其他服务不应访问

mldong的博客 3357

【K8s-Day 27】应用的“体检医生”:深入解析 Kubernetes 健康检查探针 (Probe)

在 Kubernetes 的世界里,一个容器进程正在运行,并不等同于它能正常提供服务。应用可能会因死锁、内存溢出或无法连接后端依赖而陷入“假死”状态。为了实现真正的自愈和高可用,Kubernetes 提供了一套强大的健康检查机制——**探针 (Probe)**。本文将深入剖析三种核心探针:**存活探针 (Liveness Probe)**、**就绪探针 (Readiness Probe)** 和 **启动探针 (Startup Probe)**。我们将通过原理讲解、场景分析、YAML 实例和最佳实践,带你彻

吴师兄大模型的博客 1065
上一篇: Kubernetes笔记(七)--PodHook钩子函数
下一篇: Kubernetes笔记(九)--初始化容器
那记忆微凉
博客等级 码龄9年 412粉丝 387原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值