各位运维工程师们大家在 K8s 故障时是不是有点束手无策接下来我通过这篇文章详细的罗列出 K8s 排查思路的整体原则方便大家在运维过程中的报错排查以下是相关顺序先看现象→定位层级→逐级排查→日志/资源/配置核验→修复验证可以按访问层 → Pod层 → 集群资源层 → 节点层 → 网络/存储/内核顺序排查一、确认故障现象划分故障范围先明确问题避免盲目排查业务无法访问超时、404、502、503故障码具体原因和排查思路可参考网页故障码全能手册Pod启动失败/反复重启/CrashLoopBackOff节点NotReady、宕机、资源打满调度异常PodPending、无法调度网络异常Pod 间不通、外网不通、DNS 解析失败存储异常PVC 无法绑定、挂载失败二、全局快速检查集群整体状态1. 查看节点状态kubectl get nodes kubectl describenode节点名异常NotReady→ 优先查节点kubelet、容器运行时、磁盘/内存/CPU压力查看节点资源水位kubectltopnodes2. 查看命名空间下所有资源快速扫异常# 全资源概览kubectl get all-n命名空间# 查看事件K8s 最重要排错入口报错、调度、挂载问题基本都在这里kubectl get events-n命名空间--sort-by.metadata.creationTimestamp三、Pod 核心故障排查最常见场景1. Pod 状态分类 对应排查1状态Pending调度失败没落到节点原因资源不足、污点/亲和性、PVC未就绪、节点标签不匹配# 详细原因kubectl describe podpod名-nns重点看Events里的报错Insufficient cpu/memory节点资源不足node(s) didnt match Pods node affinity/selector标签/亲和性不匹配persistentvolumeclaim xxx not foundPVC 未创建/未绑定node(s) had taints that the pod didnt tolerate节点污点未容忍2状态CrashLoopBackOff启动后反复崩溃Pod 能拉起但进程退出循环重启。排查三步查看容器日志首选kubectl logspod名-nns# 查看上一次崩溃日志关键当前日志为空时用kubectl logspod名-nns--previous进入容器交互式调试镜像带shell时kubectlexec-itpod名-nns-- /bin/sh查看Pod详细描述看启动探针/就绪探针、启动命令异常kubectl describe podpod名-nns常见原因启动脚本错误、配置文件缺失、端口冲突、权限不足、镜像损坏。3状态Running 但业务不可用Pod 正常运行但访问报错、无响应。检查就绪探针/存活探针是否失败Readiness probe failed进入容器自测端口监听、进程是否存在、本地调用接口检查容器内网络、配置、环境变量4状态ImagePullBackOff / ErrImagePull镜像拉取失败kubectl describe podpod名原因镜像地址错误、私有仓库无秘钥、节点无法连通镜像仓库、镜像标签不存在。四、控制器层面排查Deployment/StatefulSet/DaemonSetPod 由控制器管理Pod 异常先确认控制器配置# 查看控制器状态kubectl get deploy部署名-nns# 查看副本数、更新策略、事件kubectl describe deploy部署名-nns# 查看滚动更新历史判断是否升级引发故障kubectl rollouthistorydeploy部署名-nns# 如需回滚kubectl rollout undo deploy部署名-nns常见问题副本数为0、滚动更新策略异常、旧Pod无法销毁。五、网络故障排查访问不通、DNS异常1. 集群内部 Pod 不通检查网络插件状态Calico/Flannelkubectl get pods-nkube-system|grepcalico/flannel检查Pod IP、节点IP是否互通防火墙/安全组是否放行检查ServiceClusterIP、端口、标签选择器是否匹配kubectl get svc-nnskubectl describe svcsvc名2. DNS 解析失败域名无法解析测试 Pod 内 DNS# 进入业务Pod测试kubectlexec-itpod名-nns--nslookupkubernetes.default# 检查coredns状态kubectl get pods-nkube-system|grepcoredns3. 外网访问不通检查节点路由、网关、防火墙、宿主机iptables、云平台安全组。六、存储故障排查PVC/PV 挂载异常状态VolumeMount error、PVC 一直Pendingkubectl get pvc-nnskubectl describe pvcpvc名-nnskubectl getpv常见原因存储类(StorageClass)不存在/不可用存储后端EVS/CSI/NFS故障、权限不足PV 绑定策略、访问模式不匹配七、节点 集群组件故障集群整体异常所有Pod异常、节点大面积NotReady排查集群核心组件kube-system1. 核心组件状态kubectl get pods-nkube-system重点关注kube-apiserver、etcd、kube-controller-manager、kube-scheduler、kube-proxy、kubelet2. 登录故障节点排查宿主机查看 kubelet 日志节点核心服务# systemd 系统journalctl-ukubelet-f查看容器运行时containerd/docker状态systemctl status containerd检查节点资源磁盘满、inode耗尽、CPU/内存打满df-hdf-ifree-htop时间同步K8s 依赖时间时间偏差大会导致证书、鉴权失败date八、集群证书、权限、鉴权问题现象kubectl 执行命令报错x509 certificate expired、权限拒绝证书过期检查 k8s 证书有效期更新证书RBAC 权限ServiceAccount、Role、ClusterRole 授权不足kubectl describe sa账号名-nns九、极简排错流程总结该方法我们一线的运维工程师们可以直接套用kubectl get nodes→ 节点是否正常kubectl get all -n 命名空间→ 看Pod/Deployment/SVC状态kubectl get events -n 命名空间→ 优先看事件报错Pod异常kubectl describe podkubectl logs (--previous)网络/DNS异常检查coredns、网络插件、Service存储异常检查PVC/PV/StorageClass全集群异常登录节点查kubelet、容器运行时、磁盘资源十、常用排错命令速查# 实时查看Pod日志kubectl logs-fpod-nns# 进入Pod调试kubectlexec-itpod-nns--sh# 查看节点资源占用kubectltoppod-nns# 强制删除僵死Podkubectl delete podpod-nns--grace-period0--force