容器 28:Running 之后服务为什么还不能用
普通进程00 的 /health=200、/ready=503已经证明“活着”和“就绪”不同。在 Kubernetes 节点上还要区分 Pod phase、容器 status、探针结果、Service 端点和用户请求。CrashLoopBackOff 常表示重启等待状态,而不是一种 Pod phase;Running 不等于所有容器已 Ready,更不保证业务已成功执行。
把检查点放回节点路径
init 容器先于应用启动完成;sidecar 语义要按当前 Kubernetes API/版本核查,不把任何普通辅助容器都当作同样的启动顺序。startup probe 给慢启动争取窗口,readiness probe 控制何时把后端纳入就绪集合,liveness probe 可触发重启;这些探针并不能证明数据正确性。优雅终止时观察终止通知、endpoint 移除、收到的信号与应用结束请求的时间顺序;即使 readiness 很快转 false,已在途请求也需要单独验证。
正例在专用 kind 集群用 probe_app.py --ready-delay 10 记录容器 Running、probe 503、后续 probe 200 与 Service endpoint 集合;边界例把 ready-delay 延长、在滚动更新中替换为不可就绪的新版本,统计真实成功/失败请求与终止期间存留的流量。只删除自己的 Deployment/Service,保留 Pod UID、容器 ID、事件和 HTTP 输出。入口与探针源码提供同一应用代码;当前无 kind,真实 Pod 生命周期、探针与滚动更新 NOT_RUN,00 的普通进程 503 不能充当 k8s 成功案例。
| 现象 | 检查 | 限定条件 |
|---|---|---|
| Running 但 503 | 容器、readiness 与请求 | 不等于运行时 create 失败 |
| 有 Ready 端点却业务失败 | 实际请求和应用数据 | probe 非完整业务测试 |
| 更新被卡住 | 新旧 ReplicaSet/Pod UID | 不把副本名当事件顺序 |
练习
- 先预测
ready-delay大于 readiness 初次探测窗口时,Pod phase 与 Service 后端集合分别如何变化,专用集群保存时间线。 - 预测坏版本替换时滚动更新是否必然停止旧版本请求,记录每秒成功/失败计数和在途请求,而不是只报
kubectl rollout status。
上一篇:27:资源;下一篇:29:Pod IP 与 Service。
系列总目录:从进程隔离到运行时与编排。

