
Kubernetes 集群故障排查是运维和开发的核心技能。面对 Pod 不断 CrashLoopBackOff、节点 NotReady、网络不通等问题如何快速定位根因本文系统梳理 K8s 故障排查的分层方法论、常用命令和实用工具帮助你建立从集群到 Pod 的完整排查思路。一、排查方法论从外到内逐层缩小遵循“从集群到节点再到 Pod/容器”的逐层缩小原则集群层节点是否正常核心组件是否健康资源层Deployment、Service、Ingress 等资源配置是否正确Pod 层Pod 处于什么状态Events 有什么信息容器层容器日志输出什么能否进入容器调试二、集群层排查2.1 检查节点状态# 查看所有节点状态kubectl get nodes# 查看节点详细信息Events、Conditions、资源容量kubectl describenodenode-name# 查看节点资源使用需安装 Metrics Serverkubectltopnodes正常节点应处于 Ready 状态。若节点为 NotReady通常表示 kubelet 无法与 API Server 通信。kubectl describe node 会显示具体原因如 Kubelet stopped posting node status。2.2 查看集群事件# 查看所有事件按时间排序kubectl get events --sort-by.lastTimestamp# 查看特定命名空间的事件kubectl get events-nnamespace# 持续监控事件kubectl get events-w事件Events是排查问题的第一手线索包含调度失败、镜像拉取失败、探针错误等关键信息。2.3 检查核心组件# 查看 kube-system 命名空间下所有 Podkubectl get pods-nkube-system# 查看特定组件日志如 kube-apiserverkubectl logs-nkube-systempod-name三、资源层排查3.1 检查 Deployment / StatefulSet / Service# 查看 Deployment 状态kubectl get deployments kubectl describe deploymentname# 查看 ReplicaSet了解滚动更新进度kubectl get rs kubectl describe rsname# 查看 Service 和 Endpoints确认后端 Pod 是否正常kubectl get svc,ep3.2 检查资源配置YAML 语法错误kubectl apply 时会报错仔细查看错误信息。镜像拉取失败检查镜像名是否正确、是否有 imagePullSecret。资源不足kubectl describe pod 的 Events 会显示 Insufficient cpu/memory。四、Pod 层排查4.1 查看 Pod 状态# 查看所有命名空间的 Podkubectl get pods-A# 查看特定 Pod 的详细信息kubectl describe podpod-name# 查看 Pod 的 YAML 定义kubectl get podpod-name-oyamlkubectl describe pod 的 Events 字段是排查的核心入口会显示调度失败原因镜像拉取失败详情容器启动失败原因探针失败记录4.2 常见 Pod 状态及原因五、容器层排查5.1 查看日志# 查看 Pod 日志kubectl logspod-name# 多容器 Pod 指定容器kubectl logspod-name-ccontainer-name# 查看上一个崩溃容器的日志关键kubectl logspod-name--previous# 实时跟踪日志kubectl logs-fpod-name–previous 参数在排查 CrashLoopBackOff 时至关重要——崩溃容器的日志可能包含启动失败的具体错误。5.2 进入容器调试# 进入容器 Shellkubectlexec-itpod-name-- /bin/bash# 若容器无 bash使用 shkubectlexec-itpod-name-- /bin/sh# 多容器 Pod 指定容器kubectlexec-itpod-name-ccontainer-name-- /bin/bash5.3 临时容器Ephemeral Container调试kubectl debug 可以在不重启 Pod 的情况下向运行中的 Pod 注入一个临时调试容器共享目标容器的命名空间。# 在 Pod 中启动一个临时调试容器共享进程命名空间kubectl debug-itpod-name--imagebusybox--targetcontainer-name# 在节点上创建调试 Pod用于节点级排查kubectl debug node/node-name-it--imageubuntu临时容器可以安装调试工具如 htop、tcpdump、curl直接检查目标容器的网络、进程和文件系统。5.4 端口转发调试# 将本地端口转发到 Pod 端口kubectl port-forward pod/pod-name8080:80# 转发到 Servicekubectl port-forward service/svc-name8080:80六、网络问题排查6.1 测试 Pod 间通信# 创建一个临时调试 Podkubectl run debug--imagebusybox-it--rm--restartNever --sh# 在调试 Pod 中测试连通性pingtarget-pod-ipcurlhttp://service-name:portnslookupservice-name6.2 检查 Service 和 Endpoints# 查看 Service 的 Endpoints应有 Pod IPkubectl get endpointssvc-name# 若 Endpoints 为空检查 selector 是否匹配 Pod 标签kubectl describe svcsvc-name6.3 检查网络插件CNI# 查看 CNI 插件 Pod 状态kubectl get pods-nkube-system|grep-Ecalico|flannel|cilium|weave# 查看 CNI 插件日志kubectl logs-nkube-systemcni-pod-name七、节点级排查7.1 节点资源与状态# 查看节点资源使用kubectltopnodes# 查看节点详情Conditions、Taints、资源容量kubectl describenodenode-name# 封锁节点不再调度新 Podkubectl cordonnode-name# 排空节点驱逐所有 Pod用于维护kubectl drainnode-name--ignore-daemonsets --delete-emptydir-data7.2 节点上查看 kubelet 日志# systemd 系统journalctl-ukubelet-f# 或查看日志文件tail-f/var/log/kubelet.log八、常用排查命令速查# 集群状态 kubectl get nodes-owide kubectl cluster-info kubectl get events --sort-by.lastTimestamp# 资源状态 kubectl get all-nnamespace# 查看命名空间下所有资源kubectl get deploy,rs,po-lappmyapp# 按标签筛选kubectl describe deployname# Pod 调试 kubectl logspod--previouskubectlexec-itpod-- /bin/sh kubectl debug-itpod--imagebusybox# 网络调试 kubectl get svc,ep kubectl port-forward pod/pod8080:80 kubectl run debug--imagenicolaka/netshoot-it--rm--sh# 专业网络调试镜像[reference:52]# 资源清理 kubectl delete podpod--force--grace-period0# 强制删除卡住的 Podkubectl cordon / uncordon / drainnode# 节点维护九、常见故障场景及解决十、小结Kubernetes 故障排查需要系统化的方法从集群层 → 资源层 → Pod 层 → 容器层逐层缩小范围。核心三板斧是 kubectl describe查看 Events、kubectl logs --previous查看崩溃日志和 kubectl exec进入容器调试。对于复杂问题kubectl debug 临时容器和 netshoot 等专业镜像能提供强大支持。掌握这些命令和思路你就能从容应对大多数 K8s 集群故障。