用 kubectl 1.28 发布推理服务新镜像,rollout status 一直停在 1 out of 3 new replicas have been updated,等了二十分钟没有进展,旧 Pod 也没有被替换。

一开始怀疑是「镜像拉取走的是私有仓库,新节点没有凭据」,查了一圈,方向不对。

这类报错背后常见的原因有几处,逐个排除就行。readinessProbe 路径返回 404,新 Pod 永远不就绪。也可能是maxUnavailable 设成 0 且资源不足,新 Pod 调度不上。

少数情况下是PDB 限制导致驱逐被阻塞。

上来先看 rollout 状态与事件

kubectl rollout status deploy/infer -n llm --timeout=30s

接着查看新 Pod 的就绪探针失败原因

kubectl describe pod -l app=infer -n llm | grep -A5 Readiness

然后确认节点资源是否够调度

kubectl get events -n llm --sort-by=.lastTimestamp | tail -20

修好探针后主动触发一次发布

kubectl rollout restart deploy/infer -n llm

改之前先确认了最近有没有人动过配置,避免白查一遍。

这次没动代码,只在配置和运行环境上找原因。

隔了一天再看,现象没变,说明不是偶发。

恢复的判定其实很直接。rollout status 输出 successfully rolled out,三个新 Pod 全部 Ready,旧 ReplicaSet 缩到零。

容易忽略的是,滚动更新卡住先看新 Pod 为什么没 Ready,而不是反复删 Pod,重建只会重复同一个失败。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189