Pod 状态为 `Running` 但 `READY=0/1

根据你的描述(Pod 状态为 RunningREADY=0/1),结合你提供的配置和现象(可通过 curl 访问),以下是详细的排查思路和解决方案:


📌 核心结论先行

你的 readinessProbe 配置与实际应用行为存在偏差,导致 Kubernetes 认为该 Pod 尚未就绪。典型原因包括:

  1. 探针路径/端口不匹配 → Nginx 未在指定路径返回成功响应
  2. 探针触发时机过早 → 应用未完全初始化时就尝试探测
  3. 探针判定逻辑过于严格 → 偶发性超时被计为失败

🔍 逐步排查指南

1. 查看详细事件日志(定位根本原因)
kubectl describe pod busybox5

重点关注 Events 部分是否有类似以下错误:

Readiness probe failed: HTTP probe failed with statuscode: 5xx

如果有具体错误码,可直接跳转到对应解决方案。

2. 进入容器验证真实响应(关键步骤!)
# 进入容器后执行以下命令
kubectl exec -it busybox5 -c loader -- curl -v http://localhost:80/

观察输出结果:

  • 如果返回 200 OK + HTML 内容 → 证明应用正常工作,问题出在探针配置
  • 如果返回 404 Not Found路径不存在,需调整 readinessProbe.httpGet.path
  • 如果连接超时或拒绝 → 端口未监听/应用未启动
3. 对比探针配置 vs 实际行为
配置项当前值要求常见问题
path/Nginx 根目录必须存在若 Nginx 重定向到其他路径会失败
port80Nginx 默认端口若容器改端口必同步修改
initialDelaySeconds❌ 未设置至少留够应用启动时间Nginx 启动较慢时易误判
periodSeconds❌ 未设置默认 10s频繁探测加重负载
successThreshold❌ 未设置默认 1 次成功即标记为就绪适合快速启动场景
failureThreshold❌ 未设置默认 3 次失败才标记为不可用你的配置中只有 startupProbe 设置了
4. 优化后的探针配置建议(更新 Deployment/Pod)
spec:
  containers:
    - name: loader
      image: nginx:latest
      # ✅ 增加初始延迟(给 Nginx 足够启动时间)
      readinessProbe:
        httpGet:
          path: /           # 确保此路径有响应
          port: 80
        initialDelaySeconds: 15  # Nginx 启动约需 5-10s
        periodSeconds: 20         # 降低探测频率
        timeoutSeconds: 5         # 避免网络抖动导致超时
        successThreshold: 1       # 一次成功即可
      startupProbe:
        exec:
          command: ["sh", "-c", "test -f /var/ready"]
        failureThreshold: 30
        periodSeconds: 5
5. 验证修改效果
# 删除旧 Pod(触发重新调度)
kubectl delete pod busybox5

# 观察新 Pod 状态变化
watch kubectl get po busybox5

当看到 READY=1/1 时,表示探针已成功。


💡 为什么能 curl 访问但探针失败?

场景原因解决方案
Web界面可访问浏览器自动重定向到非 / 路径将探针路径改为重定向后的路径
首次启动慢Nginx 加载配置文件耗时较长增大 initialDelaySeconds
间歇性超时集群网络波动导致偶发性超时增大 timeoutSeconds
静态资源缺失Nginx 根目录无索引文件(index.html)添加默认索引文件或改探针路径

🛠️ 终极排查命令组合

# 1. 实时查看探针检测结果
kubectl get events --namespace=default | grep busybox5

# 2. 查看容器内部网络监听状态
kubectl exec busybox5 -c loader -- netstat -tulnp | grep :80

# 3. 导出完整审计日志分析
kubectl describe pod busybox5 > pod_diagnosis.txt

最终建议方案

  1. 显式设置探针参数(参考上面的优化配置)
  2. 验证 Nginx 根目录内容:确保 / 路径有有效响应(可临时添加 index.html 测试)
  3. 监控启动流程:通过日志确认 Nginx 完全启动后再进行探针检测

注意:Nginx 官方镜像默认的根目录是 /usr/share/nginx/html,如果你的应用使用自定义根目录,必须同时满足两个条件:

  • readinessProbe.path 指向正确的相对路径
  • Nginx 配置中明确定义了该路径的权限和内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

teayear

读后有收获可以获取更多资源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值