K8s 探针配置的 3 个反直觉行为:为什么 Pod 一直没就绪
我不会起名字322· 后端 / 算法 / 数据库 技术栈 力扣 Hot100 Go 项目 Redis MySQL文章目录K8s 探针配置的 3 个反直觉行为为什么 Pod 一直没就绪一、先分清三种探针很多人混用二、反直觉行为 1startupProbe 与 initialDelaySeconds 的优先级三、反直觉行为 2什么时候被杀 failureThreshold × periodSeconds四、反直觉行为 3liveness 打到未就绪的 Pod → 重启风暴五、探针参数对照表可带走物六、排查没就绪的三步K8s 探针配置的 3 个反直觉行为为什么 Pod 一直没就绪“应用日志明明写着server started on :8080为什么 Pod 一直是0/1”这是个几乎每个上 K8s 的人都会遇到的困惑。你盯着 Pod 状态READY是0/1kubectl describe里一堆Readiness probe failed。而应用自己觉得一切正常。问题几乎总是出在探针配置上。这篇先分清三种探针再拆 3 个反直觉行为。一、先分清三种探针很多人混用探针作用失败后果失败的严重度livenessProbe判断容器活着吗重启容器高会重启readinessProbe判断容器能收流量吗从 Service 摘除不重启中不接流量startupProbe判断容器启动完了吗重启容器高会重启最常见的错误把 liveness 探针配得太激进去探业务接口或者用 liveness 代替 readiness导致服务没就绪就被杀 → 重启 → 又没就绪的重启风暴。二、反直觉行为 1startupProbe 与 initialDelaySeconds 的优先级很多人以为配了startupProbe之后livenessProbe.initialDelaySeconds就无所谓了。基本正确但有个坑配了startupProbe在 startup 成功之前liveness 和 readiness 都不会执行。这期间只有 startup 在起作用。没配startupProbeliveness 会立即按initialDelaySeconds开始计时。反直觉点initialDelaySeconds不是启动后多久开始探而是容器创建后多久开始第一次探测。如果镜像拉取花了 40 秒而initialDelaySeconds 10那么第一次 liveness 探测发生在应用还没启动时——直接失败。# ❌ 危险初始延迟太短livenessProbe:httpGet:{path:/healthz,port:8080}initialDelaySeconds:5# 应用 30 秒才启动完 → 前 5 次全失败periodSeconds:5failureThreshold:3# 15 秒后就被杀 → 重启风暴# ✅ 正确用 startupProbe 单独兜启动期startupProbe:httpGet:{path:/healthz,port:8080}periodSeconds:5failureThreshold:30# 最多等 150 秒启动livenessProbe:httpGet:{path:/healthz,port:8080}periodSeconds:10failureThreshold:3记忆点startupProbe是给启动慢的应用用的配了它liveness 的initialDelaySeconds就可以设成 0。三、反直觉行为 2什么时候被杀 failureThreshold × periodSeconds这是最容易被误算的一个。决定多久被杀的不是initialDelaySeconds而是最长容忍时间 failureThreshold × periodSeconds举例livenessProbe:initialDelaySeconds:10# 第一次探测在 10s 后periodSeconds:10# 每 10s 探一次failureThreshold:3# 连续失败 3 次就杀从容器创建到被杀的最坏时间initialDelaySeconds failureThreshold × periodSeconds 10 30 40 秒。反直觉点timeoutSeconds是每次探测的超时它也算进周期。如果timeoutSeconds 5、periodSeconds 10那实际周期可能变成探测 5 秒超时 等 5 秒节奏被打乱。# 完整的时间账livenessProbe:initialDelaySeconds:10periodSeconds:10timeoutSeconds:5# 单次探测超时failureThreshold:3successThreshold:1# liveness 必须为 1# 最坏10 3×(5超时10间隔) 55 秒才被杀readiness 的 successThreshold 可以 1需要连续成功 N 次才算就绪但liveness 的 successThreshold 只能是 1这是强制的。四、反直觉行为 3liveness 打到未就绪的 Pod → 重启风暴这是最惨烈的一种。典型配置错误# ❌ liveness 探了一个依赖就绪的接口livenessProbe:httpGet:{path:/api/health,port:8080}# 这个接口依赖下游 DB/Redis问题链服务启动但下游 DB 还没连上或者自己还没热身完/api/health因为依赖未就绪返回 500liveness 判定失败 → 重启容器重启后又没连上下游 → 又失败 → 又重启重启风暴——Pod 永远起不来还拖垮了下游。正确原则探针该探什么不该探什么liveness进程是否卡死一个不依赖任何外部组件的轻量端点业务接口、依赖下游的接口readiness是否具备处理请求的能力可以含依赖检查会触发重活的接口# ✅ liveness 只探进程健康livenessProbe:httpGet:{path:/healthz,port:8080}# 只返回 200不查依赖# ✅ readiness 探业务就绪可含依赖readinessProbe:httpGet:{path:/readyz,port:8080}# 检查 DB 连接等Go 实现示例// 健康端点分离mux.HandleFunc(/healthz,func(w http.ResponseWriter,r*http.Request){// liveness只要进程活着就返回 200不查任何依赖w.WriteHeader(http.StatusOK)w.Write([]byte(ok))})mux.HandleFunc(/readyz,func(w http.ResponseWriter,r*http.Request){// readiness检查下游依赖ctx,cancel:context.WithTimeout(r.Context(),1*time.Second)defercancel()iferr:db.PingContext(ctx);err!nil{w.WriteHeader(http.StatusServiceUnavailable)w.Write([]byte(db not ready))return}w.WriteHeader(http.StatusOK)w.Write([]byte(ready))})五、探针参数对照表可带走物参数含义推荐值常见错误initialDelaySeconds创建后多久首次探测liveness: 配了 startup 可设 0设太短→启动期被杀periodSeconds探测间隔10readiness 可 5太小→频繁探测耗资源timeoutSeconds单次超时2~5大于 period→节奏乱failureThreshold连续失败几次算失败liveness: 3readiness: 3设 1→一次抖动就摘successThreshold连续成功几次算成功readiness: 1~2liveness: 必须 1readiness 设太高→恢复慢六、排查没就绪的三步顺序动作命令1看具体失败原因kubectl describe pod pod找Probe failed那行2手动模拟探测kubectl exec -it pod -- curl -v localhost:8080/readyz3核对端口和路径探针的port是容器端口不是 Service 端口第 3 条特别常错探针的port必须写容器内监听的端口。如果写了 Service 的端口或 hostPort探测必然失败。留个问题给你你们的 liveness 探针是探/healthz这种纯进程健康端点还是探业务接口initialDelaySeconds现在配的是多少

相关新闻

Linux 6.12 源码深度剖析: shrink_node

Linux 6.12 源码深度剖析: shrink_node

Linux 6.12 内核深度解析:内存回收核心引擎 shrink_node 1. 📌 技术点速览 在 Linux 内存管理系统中,当物理内存紧张、达到或低于特定的水位线(Watermark)时,内核必须启动页面回收(Page Reclaim)机制以释放物理内存。shrink_node 函数是整个内存回收子系统的核心控制…

2026/10/13 10:20:50 阅读更多 →
闲鱼自动回复不生效怎么办?叮当小宝CS排查三步

闲鱼自动回复不生效怎么办?叮当小宝CS排查三步

闲鱼的自动回复是卖家最常用也最常出状况的功能:明明设了话术,买家发来消息却没有回。这篇按三步排查把常见原因过一遍,再说说闲鱼自带工具的边界,以及单量上来之后怎么补位。## 先查:设置是否真的保存生效路径再走一遍…

2026/10/13 10:20:50 阅读更多 →
十六进制转十进制C语言代码实现

十六进制转十进制C语言代码实现

本文章主要讲解: 将输入的十六进制数转化为十进制数的C语言代码实现过程知识较为基础&#xff0c;若有不足请各位多多指教首先给出完整实现代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define weish…

2026/10/13 10:20:50 阅读更多 →

最新新闻

MySQL慢查询定位与索引设计:EXPLAIN与B+树实战全解析

MySQL慢查询定位与索引设计:EXPLAIN与B+树实战全解析

接手线上业务系统这几年&#xff0c;最让我头疼的问题之一就是MySQL慢查询。明明功能开发完了、测试也过了&#xff0c;一到流量高峰期&#xff0c;几个核心接口突然就卡了几秒&#xff0c;数据库CPU飙高&#xff0c;紧接着就是连接数打满、应用报错。排查下来&#xff0c;十有…

2026/10/13 11:00:03 阅读更多 →
ASIO2WASAPI:让普通声卡也能跑低延迟ASIO的桥接实践

ASIO2WASAPI:让普通声卡也能跑低延迟ASIO的桥接实践

简介&#xff1a;ASIO2WASAPI 是面向 Windows Vista 及以上系统的开源音频驱动方案&#xff0c;为音乐制作人与音频工程师提供硬件无关的 ASIO 支持。它借助中间层将 ASIO 协议和 Windows 原生 WASAPI 结合&#xff0c;用独占模式逼近硬件极限延迟&#xff0c;解决无专用音频接…

2026/10/13 11:00:03 阅读更多 →
JumpServer统一纳管PostgreSQL:从资产配置到安全审计的完整实践

JumpServer统一纳管PostgreSQL:从资产配置到安全审计的完整实践

搞了这么多年运维&#xff0c;数据库资产一直是权限管理里最让人头疼的一环。尤其PostgreSQL这种逻辑库多、角色权限细的系统&#xff0c;直接让人连生产库&#xff0c;账号密码满天飞不说&#xff0c;出事了你连谁干的都查不到。前阵子刚把一套PostgreSQL完整接进了JumpServer…

2026/10/13 11:00:03 阅读更多 →
MySQL Workbench 从下载到实战:安装避坑、连接配置与日常管理技巧

MySQL Workbench 从下载到实战:安装避坑、连接配置与日常管理技巧

最早学数据库那会儿&#xff0c;我一直在黑窗口里敲命令。建表、导数据、改权限全靠手打&#xff0c;一条语句写错就得整条回滚&#xff0c;效率低不说&#xff0c;眼睛也是真遭罪。后来换了 MySQL Workbench&#xff0c;整个体验完全不一样&#xff1a;不用背那么多命令&#…

2026/10/13 11:00:03 阅读更多 →
快速搭建规范开源项目:从零构建可协作可维护的GitHub仓库

快速搭建规范开源项目:从零构建可协作可维护的GitHub仓库

1. 为什么“快速搭建规范开源项目”这件事&#xff0c;比你想象中更值得花时间 “快速在GitHub搭建一个规范的开源项目&#xff08;一&#xff09;”——这个标题里藏着三个被新手普遍低估的关键词&#xff1a; 快速 、 规范 、 &#xff08;一&#xff09; 。不是“建个…

2026/10/13 11:00:03 阅读更多 →
用帕累托图做线上问题优先级排序:从频次统计到加权决策

用帕累托图做线上问题优先级排序:从频次统计到加权决策

作为负责线上稳定性的工程师&#xff0c;我每天到工位后的第一件事&#xff0c;不是看代码&#xff0c;而是先扫一眼昨夜的问题清单。以前团队排故障优先级基本靠嗓门&#xff0c;谁在群里吼得凶就修谁的&#xff1b;直到我们用帕累托图把问题频次和影响摊开做排序&#xff0c;…

2026/10/13 10:58:59 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目&#xff0c;我最大的感受是&#xff0c;大部分坑不是出在技术前沿&#xff0c;而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节&#xff0c;最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了&#xff0c;很难不碰到舵机控制这道坎。做智能小车要转方向&#xff0c;做机械臂要抬关节&#xff0c;做云台要偏航俯仰&#xff0c;背后都是同一个东西在干活&#xff1a;舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”&#xff1f;——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台&#xff1f;或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜&#xff1f;又或者&#xff0c;在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →