用户访问503
一、故障现象
核心交业务凌晨3点全量503,用户侧完全不可用。
二、五层排障过程(这是最值钱的部分)
第一层:Ingress——确认请求有没有进来
排查Ingress Controller日志,发现upstream: ""为空,说明Nginx Ingress根本没找到可用后端,是自己返回的503,不是后端返回的503。
面试金句:
upstream: ""+ 503 和upstream: "10.244.1.15:8080"+ 503 是两种完全不同的故障路径——前者是"没后端可转发",后者是"转发了但后端返回503"。
第二层:Service和Endpoints——后端池子空了
检查Endpoints发现为空。Endpoints空有两个方向:
-
selector不匹配:改了Deployment的labels但忘了同步Service的selector
-
Pod不是Running或没通过readinessProbe:Endpoints controller只会把Running且readinessProbe通过的Pod IP注册进去
这次的情况是:Pod全部处于Terminating或Pending状态。
第三层:Pod——为什么全军覆没
3个Pod状态分别是:CrashLoopBackOff、Terminating(卡住)、Evicted。
-
CrashLoopBackOff那个:
OOMKilled,Exit Code 137,内存limit只有512Mi,大促期间缓存膨胀扛不住 -
Evicted那个:节点内存不足,kubelet主动驱逐
第四层:Node——谁把节点内存吃光了
检查节点发现MemoryPressure: True。SSH到节点一看,同节点另一个namespace的Elasticsearch直接吃了12G内存,节点总共才16G。
kubelet的eviction threshold默认是memory.available < 100Mi,触发后按QoS等级从低到高驱逐Pod。order-service是Burstable(request和limit不相等),被优先驱逐。
第五层:为什么重调度也救不了
Pod被驱逐后Deployment Controller尝试重调度,但FailedScheduling:5个节点,2个内存不够,3个被打上了MemoryPressure taint——新Pod无处可调度,形成死循环。
三、根因总结
ES内存膨胀 → 节点MemoryPressure → kubelet按QoS驱逐Burstable Pod → order-service全部被驱逐 → Endpoints清空 → Ingress无可用后端 → 全量503 → 重调度失败死循环
11分钟故障窗口。
四、止血操作
-
缩容ES或限制其内存
-
等节点MemoryPressure恢复或手动去掉taint加速恢复
-
确认Pod重调度成功、Endpoints恢复、服务恢复200
五、避坑清单(面试加分项)
-
关键服务与资源大户隔离:用nodeAffinity或专用nodePool把核心Pod和ES/Kafka这类"内存黑洞"隔开
-
PodDisruptionBudget必须配:防止主动eviction时一次性杀太多
-
requests和limits别差太大:request是调度依据,limits是OOM红线,差值全是"超卖"风险
-
多副本+跨节点分散:用
topologySpreadConstraints强制分散到不同节点 -
监控覆盖Endpoints数量:大多数人监控Pod数量、CPU、内存,但很少有人监控Endpoints变化。加一条告警:Endpoints < 2 就报警
六、排障原则(面试可直接说)
503排查从上往下走:Ingress → Service → Endpoints → Pod → Node,每一层确认"这层有没有问题"再往下。别跳着排查,不然可能花30分钟在Pod日志里找一个根本不存在的应用bug,而问题其实在节点层。
七、面试话术建议
如果面试官问"讲一次你最难忘的排障经历",可以这样开头:
"有一次核心链路凌晨全量503,我从Ingress日志开始查,发现
upstream是空的——说明请求根本没到应用层。往下看Endpoints,空了;再看Pod,全部Terminating/Evicted;再看Node,MemoryPressure;最后SSH上去发现是同节点一个ES吃了12G内存。根因是kubelet按QoS驱逐了我们的Burstable Pod,重调度又因为节点taint死循环。整个过程挖了5层才找到根因。这次之后我们做了几件事:核心服务和ES用nodeAffinity隔离、配了PDB、监控加了Endpoints告警……"

浙公网安备 33010602011771号