1.## 首先解释 “Running” 和 “READY 0/1” 的区别
| 字段 | 含义 |
|---|---|
| STATUS=Running | 容器进程已经启动、在运行中。 |
| READY=0/1 | Pod 里只有 1 个容器,其中 0 个 通过了「就绪探针 (readiness probe)」检查。 |
✅ 换句话说:
“容器已经启动了(Running),但 K8s 认为它还没准备好对外提供服务(Not Ready)。”
⚙️ 二、导致 READY 0/1 的常见原因
| 原因类别 | 说明 |
|---|---|
| 🩺 就绪探针 (readinessProbe) 检查失败 | 例如 /health 接口返回非 200 状态码,或者端口没开。 |
| 🕒 启动时间太短 | 容器刚启动,应用还没完全起来(K8s 探针检查失败几次)。 |
| 🧩 应用启动异常 | Java/Spring 等应用可能卡在初始化或连接数据库阶段。 |
| 🛠️ 探针配置错误 | 探针路径、端口写错,永远通不过。 |
🩺 三、如何查看具体原因
1️⃣ 查看 Pod 状态详情
kubectl describe pod <pod-name>
重点看:
Conditions:
Type Status
Ready False
Events:
Type Reason Message
Message 里一般会提示「Readiness probe failed: ...」。
2️⃣ 查看容器日志
kubectl logs <pod-name>
如果是 Java 应用,看看是不是卡在启动、报错、连数据库失败等。
🔍 四、举个典型例子
假设你的 deployment 里配置了探针:
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
如果容器刚起来,应用 10 秒还没启动好,
K8s 去访问 http://<pod-ip>:8080/actuator/health 返回非 200,
就会显示:
READY 0/1
STATUS Running
几次之后,如果健康检查通过,就会变为:
READY 1/1
STATUS Running
🧾 五、总结判断口诀
| 状态 | 含义 |
|---|---|
| Running + READY 1/1 | ✅ 服务可用 |
| Running + READY 0/1 | ⚠️ 应用启动了但未通过就绪检查 |
| CrashLoopBackOff | ❌ 应用启动失败反复重启 |
🔧 六、你可以这样快速排查:
kubectl describe pod <pod名> | grep -A5 Readiness
kubectl logs <pod名>