K8s 生产排障基本原则与快速定位流程
四大排查原则
1. 分层排查,从下往上
先看 Node 状态,再看 Pod 状态,最后看 应用日志。跳过底层基础设施直接看 Pod 内部容易误判。
2. 先看状态,再看日志
kubectl get pod 的 STATUS 列已能给出初步方向。CrashLoopBackOff 和 ImagePullBackOff 的处理路径完全不同。
3. 不要轻易重启
重启 Pod 会丢失现场,日志和事件信息会部分丢失。必须重启前先保存关键信息。
4. 生产操作必须备份配置
kubectl get deployment <name> -n <namespace> -o yaml > backup_<name>.yaml
快速定位五步法
| 步骤 | 命令 | 目的 |
|---|---|---|
| 1 | kubectl get pods -n <ns> |
确认 STATUS(CrashLoopBackOff / ImagePullBackOff / Pending / Terminating) |
| 2 | kubectl describe pod <name> -n <ns> |
查看 Events 和 Conditions,判断方向 |
| 3 | kubectl logs <name> -n <ns> --previous |
查看容器退出日志 |
| 4 | kubectl top pod / kubectl top node |
确认资源使用情况 |
| 5 | 根据 STATUS 走专项排障路径 | 见各专项页面 |
分层排查法
- 集群层:
kubectl get nodes,kubectl get events --all-namespaces - 网络层:
kubectl get svc,endpoints,kubectl get networkpolicy, Pod 内 ping/curl/nslookup - 存储层:
kubectl get pvc,pv,kubectl get storageclass - 应用层:
kubectl get pod -o yaml,kubectl logs,kubectl exec
常用调试技巧
# 实时观察
watch kubectl get pods -n <namespace>
# 查看 owner
kubectl get pod <name> -n <ns> -o jsonpath='{.metadata.ownerReferences}'
# 标签筛选
kubectl get pods -n <ns> -l 'app=myapp,tier=frontend'
# 回滚
kubectl rollout history deployment <name> -n <ns>
kubectl rollout undo deployment <name> -n <ns>
快速定位表
| 现象 | 第一步排查命令 | 常见原因 |
|---|---|---|
| CrashLoopBackOff | kubectl logs --previous |
应用配置错误、依赖不可达、OOM |
| ImagePullBackOff | kubectl describe pod 事件 |
镜像不存在、认证失败、网络不通 |
| Pending | kubectl describe pod 事件 |
资源不足、污点不匹配、PVC Pending |
| Terminating 卡死 | kubectl get pod -o yaml finalizers |
挂载卡死、Finalizers 引用缺失 |
| NotReady | kubectl describe node Conditions |
磁盘满、内存满、网络异常 |
| Endpoints 为空 | kubectl get svc -o jsonpath Selector |
标签不匹配、Pod 未运行 |
| DNS 解析失败 | kubectl logs -n kube-system coredns |
CoreDNS 异常、NetworkPolicy 阻断 |
| PVC Pending | kubectl describe pvc 事件 |
StorageClass 不存在、CSI 异常 |
服务访问不通排查优先级
专门针对「K8s 服务访问不通(502/504/超时)」场景的排查优先级分层。
第一优先级(5 分钟内定位)
- Pod 是否 Running、Ready、日志是否正常
- Service 的 Endpoints 是否有关联的 Pod IP
- 从 Pod 内直接访问 Service IP(绕过 Ingress 和 NodePort)
第二优先级(5-15 分钟)
- kube-proxy 的 iptables/ipvs 规则是否正确生成
- CNI 插件是否正常(flannel.1 / calico* 接口是否存在)
- Ingress Controller 是否 Running、日志是否有 502/503 错误
第三优先级(15 分钟以上)
- DNS 解析是否正常(CoreDNS 日志、ndots 配置)
- NetworkPolicy 是否阻止了合法流量
- 跨节点网络路由是否正确(VPC/物理网络层)
排查口诀
先 Pod 再 Svc,EP 不为空则网络通;
Ingress 有问题先看日志,DNS 不通查 CoreDNS。
关联页面
| 页面 | 关联点 |
|---|---|
| k8s-service-access-troubleshooting | 从 Pod→Service→Ingress 十步排查工作流 |
| service-troubleshooting | Service 与网络排障(含 kube-proxy/CNI) |
| pod-troubleshooting | Pod 排障全场景 |
| node-troubleshooting | Node 排障(NotReady 九步排查) |
| k8s-interview-100-questions | K8s 面试通关指南(100 道核心题全解析) |
| devops-interview-guide | DevOps 技术面试指南(容器/云原生/内核 59 题) |
| k8s-top10-troubleshooting-checklist | K8s 高频问题一站式排查清单(10 大故障场景快速参考) |
| k8s-coredns-custom-domain-resolution | CoreDNS 自定义域名解析(变更风险评估与回滚) |
关联页面
| 页面 | 关联点 |
|---|---|
| k8s-architecture-core-concepts | | K8s 架构与核心概念深度教程(组件原理/资源对象/工作负载) | |