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

简介: 容器健康检查探针用于检测应用运行状态,确保服务高可用。Kubernetes提供存活、就绪、启动三种探针,通过HTTP、TCP或命令方式定期检查,配合各参数阈值实现自动恢复与流量控制,避免异常实例影响业务。

简介

容器的健康检查探针是指容器运行过程中,需要定时检查容器中应用健康状况。
若未配置健康检查机制,当容器内的应用程序发生异常时,Pod无法感知该异常,也不会自动执行重启操作进行恢复。这样可能导致Pod状态显示为“运行中”,但实际上容器内的应用已处于不可用或异常状态。

官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

Kubernetes提供了三种健康检查探针:

  • 存活探针[livenessProbe]:用于检测容器是否正常,类似于执行ps命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作,否则不执行任何操作。

  • 就绪探针[readinessProbe]:探测应用业务是否已经就绪,用于判断容器中的业务是否已就绪,以决定是否将流量转发至当前实例。在某些场景中,应用程序虽然进程已启动,但由于需要依赖外部服务的初始化,尚未具备对外提供服务的能力。此时,通过就绪检查可以避免将流量路由至尚未就绪的实例。如果容器的就绪检查失败,CCE集群会临时将其从服务端点中移除,屏蔽外部请求的访问。而一旦检查通过,容器即被视为就绪,可正常接收流量。

  • 启动探针[startupProbe]:用于检测应用是否已启动。 启动探针检测通过后,集群才会开始执行存活检查和就绪检查, 从而确保这些检查不会影响应用程序的启动。该探针适用于启动时间较长的容器,能够有效避免容器在初始化尚未完成时被误判为异常,从而被提前终止。

健康检查方式

  • HTTP请求方式[httpGet]:探针往容器发送HTTP请求,如果探针收到2xx或3xx的返回状态码,说明容器是健康。HTTP请求检查(httpGet):适用于提供HTTP/HTTPS服务的容器。进行该配置后,集群将周期性地对该容器发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码属于200~399范围,则证明探测成功,否则探测失败。使用该方式时,必须指定容器监听的端口。

  • TCP请求方式[tcpSocket]:探针使用TCP套接字。 使用这种配置时,kubelet 会尝试在指定端口和容器建立套接字连接。如果能建立连接,这个容器就被看作是健康的,如果不能则这个容器就被看作是有问题的。适用于提供TCP协议通信的容器(如数据库、缓存、自定义TCP服务等)。集群会周期性地与该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败。使用该方式时,必须指定容器监听的端口。

  • 命令行脚本[exec]:探针执行容器中的命令并检查命令退出的状态码,如果状态码为0则说明健康。要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果退出码状态为0则检查成功,否则检查失败。

注意:

在高负载环境中,建议避免使用执行命令检查方式,执行命令会消耗系统资源,如果系统资源紧张(如CPU负载高、文件系统被锁住等)可能导致健康检查超时失败。如果需要使用执行命令检查,您可以参考以下建议:

  1. 增加失败次数和超时时间配置,避免因为突发性的资源竞争导致健康检查超时失败,但是该方式可能会降低业务敏感度,请合理配置。
  2. 通过合理规划业务容器或者系统插件的CPU Limit配置,避免出现因CPU时间片抢占导致内核锁长期不释放影响同节点其它容器执行exec探测的问题。

各参数指标含义:

参数 名称 介绍
periodSeconds 检测周期 表示两次检测的间隔时间,单位为秒。
例如,设置为30,表示每30秒检测一次。
initialDelaySeconds 启动延时 表示成功运行后多久时间开始检测,是预留给业务程序启动的时间,单位为秒。
例如,设置为30,表明容器启动后30秒开始健康检查。
timeoutSeconds 超时时间 探针超时时间,单位为秒。若设置为0或不设置,默认超时等待时间为1秒。
例如,设置为10,表明执行健康检查的超时等待时间为10秒。如果超过这个时间,本次健康检查就被视为失败。
successThreshold 成功阈值 表示服务检测失败后,转变为“健康”所需要的最小连续成功次数。该参数的默认值为1,且最小允许值为1。在存活探针和启动探针中,这个值必须为1。
例如,设置为1时,表明健康检查失败后,仅需连续成功1次,即可将工作负载恢复为正常状态。
failureThreshold 最大失败次数 表示在容器被判定为“不健康”之前,允许连续探测失败的次数。该参数默认值为 3,最小值为 1。
1.对于存活探针:当连续失败次数达到该阈值后,容器将被标记为不健康,且kubelet会重启容器。
2.对于就绪探针:当连续失败次数达到阈值后,Pod会被标记为未就绪,并从Service的Endpoints 中移除,停止接收新流量,且容器不会被重启。

YAML示例


apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: <image_address>
    args:
    - /server
    livenessProbe:                 # 存活探针
      httpGet:                     # 以HTTP请求检查为例
        path: /healthz             # HTTP检查路径为/healthz
        port: 80                   # 检查端口为80
        httpHeaders:               # 可选,请求头名称为Custom-Header,对应的值为Awesome
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3
    readinessProbe:                # 就绪探针
      exec:                        # 以执行命令检查为例
        command:                   # 需要执行的命令
          - cat
          - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
    startupProbe:                  # 启动探针
      httpGet:                     # 以HTTP请求检查为例
        path: /healthz             # HTTP检查路径为/healthz
        port: 80                   # 检查端口为80
      failureThreshold: 30
      periodSeconds: 10

通过xkube进行设置

通过多集群k8s管理平台xkube的功能可以轻松的设置探针,xkube安装部署参考:https://blog.csdn.net/weixin_56364253/article/details/156390146

功能参考下图:
tanzhen.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4月前
|
Kubernetes 容器 Perl
kubernetes-1.34.2 二级制快速安装部署
kubenetes-1.34.2 二进制安装包,其他版本同样可以使用,包含etcd,kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,containerd,coredns,metric-server的证书、配置文件,启动脚本。其中还包括证书的生成脚本、kubeconfig的生成脚本,同时包含了二进制可执行文件,本安装包已经包含了二进制文件,制作好的证书和安装包,可以直接拷贝到安装目录进行安装,也可以重新执行:make_install_package.sh 重新生成。该项目是为了配合k8s-1.34.2二进制的安装。
1092 2
|
缓存 负载均衡 前端开发
Nginx极简入门(九)Nginx实现动静分离!
前面介绍了Nginx的负载均衡,一般来说,都需要将动态资源和静态资源分开,这样可以很大程度的提升静态资源的访问速度,同时在开过程中也可以让前后端开发并行可以有效的提高开发时间,也可以有些的减少联调时间 。接下来介绍什么是动静分离以及如何使用Nginx实现动静分离。
Nginx极简入门(九)Nginx实现动静分离!
|
Kubernetes 应用服务中间件 API
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
2155 0
|
2月前
|
人工智能 缓存 Java
Spring AI 1.1 新特性详解:五大核心升级全面提升AI应用开发体验
Spring AI 1.1正式发布!新增Model Context Protocol(注解式工具注册)、Prompt缓存(降本90%)、递归顾问(自修正推理)、Google GenAI/ElevenLabs语音支持,及推理模式(输出思考步骤),全面提升AI应用开发效率与体验。(239字)
535 3
|
4月前
|
监控 API Docker
MinerU Docker 部署指南:PDF 结构化解析服务实践
MinerU 是面向开发者与科研用户的 PDF 结构化解析工具,支持将复杂版式、公式符号的科技文献精准转为 Markdown/JSON 等机器可读格式。基于“书生·浦语”大模型预训练需求研发,2.7.0 版本引入 hybrid 后端,融合 pipeline 与 VLM 优势,提升解析精度与多语言 OCR 能力。支持 Docker 部署,提供 vLLM 加速、API 服务与 Gradio 界面,开箱即用,助力科研数据高效处理。
1435 1
|
5月前
|
开发框架 人工智能 测试技术
字节推出VeAgentBench + veADK,打造可评估、可复现的智能体开发新范式
字节跳动推出VeAgentBench与veADK,打造智能体“开发-评估”闭环。VeAgentBench是覆盖教育、金融、法律等四大场景的开源评估基准,veADK为高效易用的开发框架,支持工具调用、RAG与记忆管理,助力AI智能体可度量、可复现、可落地。
911 11
|
人工智能 Prometheus 监控
监控vLLM等大模型推理性能
本文将深入探讨 AI 推理应用的可观测方案,并基于 Prometheus 规范提供一套完整的指标观测方案,帮助开发者构建稳定、高效的推理应用。
2173 169
监控vLLM等大模型推理性能
|
Kubernetes 网络协议 Shell
【赵渝强老师】K8s中Pod探针的ExecAction
在K8s集群中,kubelet通过三种探针(存活、就绪、启动)检查容器健康状态,支持HTTPGet、Exec和TCP检查方式。本文重点介绍ExecAction探针,通过在容器内执行Shell命令返回码判断健康状态,并附带视频讲解和实例演示,展示如何配置和使用ExecAction探针进行健康检查。
412 10
【赵渝强老师】K8s中Pod探针的ExecAction
|
运维 Kubernetes 监控
什么是Kubeasz
Kubeasz(Kubernetes Easy Setup with Ansible)是一个开源项目,旨在简化Kubernetes集群的部署过程。它使用Ansible作为基础设施管理工具,通过预定义的剧本和配置模板,自动化整个K8s集群的搭建流程。以下是对Kubeasz的详细介绍: ### 一、Kubeasz的特点 1. **快速部署**:Kubeasz支持一键部署Kubernetes集群,大大节省了运维成本和时间。 2. **高可用性**:可以部署高可用的Kubernetes集群,确保系统的稳定性和可靠性。 3. **可扩展性**:支持容器化部署,可以方便地扩展集群规模,满足不同的业务需
2041 3
|
12月前
|
存储 Prometheus 监控
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
Prometheus 是一款开源的系统监控与报警工具,专为云原生环境设计。它采用拉取模型采集数据,内置高效的本地时序数据库(TSDB),支持丰富的指标类型和四个黄金指标(延迟、流量、错误、饱和度)。其查询语言 PromQL 功能强大,可灵活聚合和分析时间序列数据。此外,通过 Exporter 机制,Prometheus 能轻松扩展到各种系统和服务。针对大规模场景,Thanos 提供高可用解决方案,整合多 Prometheus 实例,实现全局视图和长期存储。整体架构简洁可靠,适用于动态分布式环境。
1561 10
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos

热门文章

最新文章

下一篇
开通oss服务