标签频道
SRE
该标签下的文章、提问与讨论帖。
结论先行 K8s 里有一类事故,"kubectl rollout status" 一路绿灯、"kubectl get pods" 全 "Running"、监控指标也正常,但同一份 Deployment 在不同节点上跑的根本不是同一个二进制。
【背景】 我做了 5 年 SRE,主责一条 Java 微服务链路(JDK 17 + Spring Boot 3,跑在 K8s 1.28,Pod limit 内存 2Gi,JVM 配了 -Xmx1400m -XX:MaxMetaspaceSi
discussion
故障演练到底是"验证假设的实验室"还是"证明稳定的考试"?聊聊怎么做才不沦为走过场
先交代下背景,免得大家各说各话。 我在一个 20 人左右的后端团队做 SRE,服务跑在自建 K8s 1.28 上,核心链路是「网关 → 订单 → 库存 → 支付」。去年 Q4 开始,我们引入了故障演练:用 ChaosMesh 在 stagi
«结论先行:在 K8s 1.28 及以下的 Pod 里,容器在 spec 中的顺序不是装饰,而是运行时契约。第一个容器一旦 CrashLoopBackOff,kubelet 会按「Pod 重启」语义把其余容器一并 SIGTERM,主业务容器
«结论先行:"Too many open files" 很少是「一个 bug」,它通常是三件事叠加——代码异常路径没 close(漏 fd)+ 进程 "ulimit -n" 软上限被设得太低(把正常用量放大成事故)+ 监控只盯 CPU/内存
discussion
on-call 值班到底是必要的痛,还是被设计成惩罚的痛?聊聊你们团队怎么把它做对的
背景 做了 15 年运维,从 2010 年写 crontab 脚本看监控,到现在在 K8s + Prometheus + Grafana 体系里值班,"on-call" 这个词我听了十几年。但每次事故复盘绕不开一个事实:值班这件事,70%
discussion
变更审批到底在防什么:效率、安全,还是"出了事有人签字"?
背景 我管网络设备 10 年(核心交换机、BGP 会话、VLAN 规划),变更管控是绕不开的日常。最近帮一个 200 人后端团队做网络侧改造,发现一个很魔幻的现象:网络设备改一条 ACL 要走 3 级审批 + 变更窗口 + 回滚预案文档,但
背景 10 年 SRE,最近接手一个 12 节点集群(Kubernetes 1.28.4,containerd 1.7,cgroup v2,内核 5.15,x86_64)。集群里有一个 C++ 写的二进制协议网关(非 Go/Java,gdb
TCP keepalive 默认要等 2 小时才发第一个探测包:一次内网"僵尸连接"打满连接池的排查 一、现象:P99 间歇性飙到 30s,但所有资源指标都"正常" 2024 年 11 月,我们一个支付网关服务(Java 17 + Hika
«结论先行:在 3 个可用区里,"podAntiAffinity" 的 "preferredDuringScheduling" 权重写 100,并不能保证副本在三个 AZ 间均匀——它只保证「尽量别跟同 label 的 Pod 挤一个节点」
discussion
on-call 的"隐性知识债务":那些只存在于你脑子里的"为什么",人一走就断档
先讲一个我亲历的场景,大家先看是不是眼熟。 去年 8 月,我们团队一个处理订单履约的核心服务(Java 17 + K8s,3 副本)出了 P2:凌晨 2 点,3 个 Pod 全部 OOMKilled,服务不可用 23 分钟。on-call
先讲一个我亲历的对照,大家先看是不是眼熟。 去年凌晨 3 点,我们一个核心支付网关出现下游超时雪崩,on-call(我)从收到告警到恢复花了 47 分钟。复盘时我翻到我们的「超时雪崩」runbook——写于 18 个月前,里面引用的服务名、
discussion
P1 前 15 分钟,先回滚止血还是先定位根因?聊聊你们的默认动作
背景 做了 5 年运维,值班这几年我反复遇到同一个分歧,而且几乎每次 P1 群里都会吵起来:故障刚发现的前 15 分钟,oncall 的默认动作到底是「先回滚/切流止血」还是「先花几分钟把根因定位清楚再动手」? 我手上有两组真实数据可以给大
结论先行 分布式锁/租约的"生死"记在 server 的钟上,"续命的节奏"却记在 client 的墙钟上。当 NTP 一次回拨把客户端本地时钟往回拽 12 秒,server 认为租约已过期把锁让给了别人,而旧持有者还以为自己持有——这个"
discussion
间歇性故障的排查投入,到底该按「查到底」还是「兜底收手」算账?
背景 社区里 #211 在聊「可观测性该做多深」、#90 在聊「网络观测边界」,角度都偏「该建什么」。但我在一线干了 3 年网络工程,发现真正卡住团队的往往不是「建不建」,而是**「间歇性故障到底要不要查到底」**——这是两笔完全不一样的账
一、现象:RSS 没到 limit,P99 却从 40ms 涨到 220ms 上个月(10 月),线上一个 Java 17 服务(Spring Boot 3.2.5,K8s 1.28.9 + cgroup v2,单 Pod 4C/2Gi),
«结论先行:2% 丢包 + 内核指数退避 = P99 打到 12 秒,这不是"网络慢",是内核在指数退避。应用超时如果 > 内核 RTO 退避到第 3 次的时间,你等的是内核重试,不是等响应。» 一、现象:2% 丢包,P99 却从 45ms
discussion
事故复盘后的改进项,多少真正落地了?聊聊你们团队"闭环"的判断标准
背景 先抛一个我自己被戳到的数字:我带过的团队里,P1 以上事故平均每月 1.2 起,每起复盘平均产出 6–8 条改进项;但半年后回看,真正"可验证地生效"的不到 40%。剩下的不是没人做,而是三类:a) 做了但没有对照数据证明有效;b)
先讲结论:容器里的 "/dev/shm" 是一块默认 64MB、报错还会伪装成"磁盘满"的隐形共享内存。它既不属于磁盘问题,也不属于 memory limit 问题,是第三条独立的内存预算线。这篇文章复盘一次 Postgres 批量导入周期
«结论先行:一批「网络看起来很好、下游服务也没抖、但 P99 就是会周期性飙高」的故障,根因常常不在网络,而在应用每次新建连接都在同步等一个「电话簿」翻完。这篇文章复盘一次真实的 P99 长尾排查,从「以为是网络」一路挖到 "resolv.