k8s常见异常处理

k8s常见异常处理

日常问题

  1. 拉取镜像失败

    • 仓库确实没有这个镜像
    • 权限不足
    • 路径写错了, tag 写错了
    • 网络错误
  2. Pod 一直 Pending

    • 查看调度状态
  3. 资源不足

    • request 配置太多, 虽然还有资源但是不够分配了
  4. 节点选择器不匹配

    • 实际上节点没有这个标签
  5. 污点兼容未设置

  6. PVC 未绑定

  7. pod CrashLoopBackOff 循环重启

    • 主要是看日志,
    • 程序自己退了
    • oom杀死了
    • 健康检查不过
  8. 健康检查不过

    • 端点配置错误
    • 程序启动太慢,初始探测值设置太少
  9. configmap 不存在

  10. 请求固定比例访问失败

    • internalTrafficPolicy: Local 模式只会给本地节点发流量
  11. 访问应用服务接口网络不通

    • 先在集群内部访问 集群ip 验证是否能通
  12. 很多服务都出现间歇性访问超时

    • coredns 压力是否过大,如果是则扩容 或者 增加本地环境
  13. pod 间网络不通

    • 排查是否有 NetworkPolicy 限制
  14. PVC 一直 Pending

    • 访问模式不匹配, ReadWriteMany 和 ReadWriteMany
  15. 节点间压力负载流量差异比较大

    • pod的资源划分粒度太粗,个别高压服务集中落到了少数节点
    • 节点亲和性调整
    • 通过 Descheduler 进行动态平衡
  16. ConfigMap 更新不生效

    • 需要重启pod
    • 直接挂载目录, 不通过 subPath 挂载
  17. pod 启动失败

    • 查看集群或pod事件
    • 查看pod日志
    • 确认外部依赖, redis, db 等
  18. etcd默认存储空间不足

    • 压缩
    • 或者扩容 quota-backend-bytes 大小

故障排查

# 1. 看全局异常 Pod(最快速定位)
kubectl get pods -A | grep -Ev "Running|Completed"

# 2. 看最近的事件(按时间倒序)
kubectl get events -A --sort-by='.lastTimestamp' | tail -30

# 3. 看节点状态
kubectl get nodes -o wide

# 4. 看所有 Deployment 是否都 Ready
kubectl get deploy -A | awk '$3 != $4 {print}'

# 5. 查某个 Pod 的全部容器日志
kubectl logs <pod-name> -c <container-name> --tail=200 --timestamps=true
最后更新于