livenessProbe 和 readinessProbe 最佳实践

在 Kubernetes 中,livenessProbe 和 readinessProbe 是确保应用高可用性的关键机制,但配置不当可能导致应用频繁重启或流量中断。以下是配置这两个探针的最佳实践:

1. 核心区别与作用

探针类型目的失败后果
livenessProbe检测应用是否 存活(如死锁、内存泄漏)。重启容器(kubectl restart
readinessProbe检测应用是否 准备好接收流量(如依赖服务未就绪、缓存未加载)。从 Service 的 Endpoints 移除 Pod

2. 最佳实践指南

(1) 明确区分两个探针的用途
  • livenessProbe
    • 保守检查:仅检测应用是否处于不可恢复的故障状态(如主线程崩溃)。一般服务没挂掉就认为是正常的。
    • 避免敏感条件:例如,不要用业务逻辑失败(如数据库连接超时)触发重启,除非明确需要。
  • readinessProbe
    • 严格检查:确保所有依赖(如数据库、通过 feign 调用的外部组件、中间件)就绪后才接收流量。
    • 动态调整:在运行时若依赖服务不可用(如 Redis 宕机),应通过 readinessProbe 主动拒绝流量。
(2) 设置合理的检查端点
  • livenessProbereadinessProbe 使用不同的 HTTP 路径

    livenessProbe:httpGet:path: /health/liveness   # 轻量级存活检查(仅进程存活)port: 8080
    readinessProbe:httpGet:path: /health/readiness  # 包含依赖检查(如数据库连接)port: 8080
    
(3) 配置合理的参数
livenessProbe:httpGet:path: /actuator/health/livenessport: 8080initialDelaySeconds: 10   # 应用启动后等待 10 秒再开始探测periodSeconds: 5          # 每 5 秒检查一次timeoutSeconds: 3         # 超时时间设为 3 秒failureThreshold: 3       # 连续失败 3 次后判定为故障readinessProbe:httpGet:path: /actuator/health/readinessport: 8080initialDelaySeconds: 5    # 比 livenessProbe 更早开始检查periodSeconds: 5timeoutSeconds: 3failureThreshold: 1       # 1 次失败即标记为未就绪

关键参数说明

  • initialDelaySeconds必须设置,避免应用未完成初始化就被判定为失败(如 JVM 启动慢)。
  • failureThreshold
    • livenessProbe 可设置较高(如 3),避免偶发故障触发重启。
    • readinessProbe 可设置较低(如 1),快速从负载均衡中剔除异常 Pod。
  • periodSecondstimeoutSeconds:根据应用响应时间调整,避免超时误判。
(4) 结合 startupProbe 处理慢启动应用

对于启动时间较长的应用(如 Java 服务),使用 startupProbe 延迟 livenessProbereadinessProbe 的启动:

startupProbe:httpGet:path: /actuator/health/startupport: 8080failureThreshold: 30  # 允许最多 30 次检查失败periodSeconds: 5      # 每 5 秒检查一次# 总等待时间 = failureThreshold * periodSeconds = 150 秒

如果想了解 k8s 为什么要专门提出 startupProb 来解决慢服务启动的问题,而不是直接把 livenessPro 中初始化的时间设置的长一点。可以参考下面的文章《为什么需要启动探针(StartupProb)?》。

(5) 选择适当的探测类型
  • HTTP GET:适合 Web 服务,通过状态码(2xx/3xx 表示成功)判断。

  • Exec:执行命令,返回 0 表示成功(适合非 HTTP 服务):

    readinessProbe:exec:command:- /app/check-dependency.sh  # 自定义脚本检查依赖
    
  • TCP Socket:仅检查端口是否开放(适用非 HTTP 协议)。

(6) 避免依赖下游服务
  • readinessProbe 不要深度检查外部依赖(如数据库、API):
    • 若外部服务宕机,所有 Pod 都会被标记为未就绪,导致全面故障。
    • 改为在应用内部实现熔断机制(如 Hystrix),部分功能降级。
(7) 日志与监控
  • 记录探针检查结果:在 /health 端点返回详细信息(如版本、依赖状态)。
  • 监控探针失败:通过 Prometheus 监控 kubelet_probe_errors_total,及时报警。

3. 示例配置

Spring Boot 应用
apiVersion: apps/v1
kind: Deployment
spec:template:spec:containers:- name: applivenessProbe:httpGet:path: /actuator/health/livenessport: 8080initialDelaySeconds: 30periodSeconds: 10failureThreshold: 3readinessProbe:httpGet:path: /actuator/health/readinessport: 8080initialDelaySeconds: 5periodSeconds: 5failureThreshold: 1startupProbe:httpGet:path: /actuator/health/startupport: 8080failureThreshold: 30periodSeconds: 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集成管理工具Gitlab

GitLab 是一个功能强大的开源代码托管和协作平台,集成 GitLab 可以显著提升团队的开发效率。下面我将为你介绍如何集成 GitLab,包括安装配置和基本使用流程。 一、GitLab 安装与配置 GitLab 有多种安装方式,推荐使用官方 Omnibus 包安装&am…

Electron-Vue3、Electron-React、Electron-Angular打造舆情监控系统项目

Electron是一个跨平台的桌面应用开发框架,可以让我们用html css js的技术开发跨平台桌面上可以安装的软件。视频详解: Electron教程 ElectronVue跨平台桌面软件开发教程-2024年更新(大地老师) 从Electron环境搭建开始到手把手教你调试、Elect…

08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习

本实例主要讲解内容 这个Three.js示例展示了无属性几何体渲染技术,通过WebGL 2的gl_VertexID特性和伪随机数生成算法,在着色器中动态计算顶点位置和颜色,而不需要在CPU端预先定义几何体数据。 核心技术包括: WebGL 2的顶点ID特…

Ubuntu 22.04搭建OpenStreeMap地址解析服务(保姆级教程)

1.数据准备 1.1.全球数据 下载地址:https://planet.openstreetmap.org/ 1.2.特定区域的数据 下载地址:Geofabrik Download Server 2.安装必要的软件包 2.1.更新系统软件包 sudo apt updatesudo apt upgrade 2.2.安装所需要的软件包 执行下面的命…

Ubuntu 22.04.5 LTS上部署Docker及相关优化

以下是在Ubuntu 22.04.5 LTS上部署Docker及相关优化的步骤: 安装Docker 更新系统:在安装Docker之前,先确保系统是最新的,执行以下命令:sudo apt update sudo apt upgrade -y安装依赖包:安装一些必要的依赖…

React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明

使用 React 搭建一个现代化的聊天界面&#xff0c;支持与 Ollama 本地部署的大语言模型进行多轮对话。界面清爽、功能完整&#xff0c;支持 Markdown 渲染、代码高亮、<think> 隐藏思考标签、流式渐进反馈、暗黑模式适配等特性。 &#x1f9e9; 核心功能亮点 ✅ 模型选择…

vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件

1. 安装依赖&#xff1a; #docx文档预览组件npm install vue-office/docx vue-demi0.14.6#excel文档预览组件npm install vue-office/excel vue-demi0.14.6#pdf文档预览组件npm install vue-office/pdf vue-demi0.14.6 vue2.6版本或以下还需要额外安装 vue/composition-api …

【应用密码学】实验五 公钥密码2——ECC

一、实验要求与目的 1.复习CCC基本概念&#xff0c;并根据实验平台提供的资料完成验证性实验。 2.编程练习&#xff1a;以书上例题小模数p为例编程实现ECC的基本运算规则。 二、实验内容与步骤记录&#xff08;只记录关键步骤与结果&#xff0c;可截图&#xff0c;但注意排版…

rust-candle学习笔记9-使用tokenizers加载qwen3分词,使用分词器处理文本

参考&#xff1a;about-pytorch&#xff0c; about-tokenizers 在魔搭社区链接下载qwen3的tokenizer.json文件 添加依赖库&#xff1a; cargo add tokenizers tokenizers库初体验&#xff1a; use tokenizers::tokenizer::{self, Result, Tokenizer};fn main() -> Resu…

【MySQL】存储引擎 - ARCHIVE、BLACKHOLE、MERGE详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

5.Redission

5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如 HashTable 这样的代码中&#xff0c;他的方法都是使用 sync…

C语言主要标准版本的演进与核心区别的对比分析

以下是C语言主要标准版本的演进与核心区别的对比分析 K&R C&#xff08;1978年&#xff09; 定位‌&#xff1a;非标准化的原始版本&#xff0c;由Brian Kernighan和Dennis Ritchie定义 特性‌&#xff1a; 基础语法&#xff1a;函数声明无参数列表&#xff08;如int func…

【C++设计模式之Template Method Pattern】

C设计模式之Template Method Pattern 模式定义核心思想动机(Motivation)结构&#xff08;Structure&#xff09;实现步骤应用场景要点总结 模式定义 模式定义&#xff1a; 定义一个操作中的算法的骨架(稳定)&#xff0c;而将一些步骤延迟(变化)到子类中。Template Method使得子…

【动态导通电阻】p-GaN HEMTs正向和反向导通下的动态导通电阻

2024 年,浙江大学的 Zonglun Xie 等人基于多组双脉冲测试方法,研究了两种不同技术的商用 p-GaN 栅极 HEMTs 在正向和反向导通模式以及硬开关和软开关条件下的动态导通电阻(RON)特性。实验结果表明,对于肖特基型 p-GaN 栅极 HEMTs,反向导通时动态 RON 比正向导通高 3%-5%;…

PDFMathTranslate:科学 PDF 文件翻译及双语对照工具

PDFMathTranslate&#xff1a;科学 PDF 文件翻译及双语对照工具 在科研和学习过程中&#xff0c;我们经常会遇到大量的英文 PDF 文献&#xff0c;翻译这些文献成为了一项繁琐且耗时的工作。PDFMathTranslate 是一款强大的科学 PDF 文件翻译及双语对照工具&#xff0c;它能够保…

Flutter PIP 插件 ---- 为iOS 重构PipController, Demo界面,更好的体验

接上文 Flutter PIP 插件 ---- 新增PipActivity&#xff0c;Android 11以下支持自动进入PIP Mode 项目地址 PIP&#xff0c; pub.dev也已经同步发布 pip 0.0.3&#xff0c;你的加星和点赞&#xff0c;将是我继续改进最大的动力 在之前的界面设计中&#xff0c;还原动画等体验一…

【Ansible】之inventory主机清单

前言 本篇博客主要解释Ansible主机清单的相关配置知识 一、inventory 主机清单 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或多个主机组内。 如果是名称类似的主机&#xff0c;可以使用列表的方式表示各个主机…

基于几何布朗运动的股价预测模型构建与分析

基于几何布朗运动的股价预测模型构建与分析 摘要 本文建立基于几何布朗运动的股价预测模型&#xff0c;结合极大似然估计与蒙特卡洛模拟&#xff0c;推导股价条件概率密度函数并构建动态预测区间。实证分析显示模型在标普500指数预测中取得89%的覆盖概率&#xff0c;波动率估…

【前端】【JavaScript】【总复习】四万字详解JavaScript知识体系

JavaScript 前端知识体系 &#x1f4cc; 说明&#xff1a;本大纲从基础到高级、从语法到应用、从面试到实战&#xff0c;分层级讲解 JavaScript 的核心内容。 一、JavaScript 基础语法 1.1 基本概念 1.1.1 JavaScript 的发展史与用途 1. 发展简史 1995 年&#xff1a;JavaS…

[Java实战]Spring Boot 3 整合 Apache Shiro(二十一)

[Java实战]Spring Boot 3 整合 Apache Shiro&#xff08;二十一&#xff09; 引言 在复杂的业务系统中&#xff0c;安全控制&#xff08;认证、授权、加密&#xff09;是核心需求。相比于 Spring Security 的重量级设计&#xff0c;Apache Shiro 凭借其简洁的 API 和灵活的扩…