Ubuntu 上 Kubernetes 故障排查方法
一 快速定位与通用检查
- 集群连通性:执行kubectl get nodes;若返回The connection to the server 127.0.0.1:6443 was refused,优先检查控制面端口与组件状态。
- 控制面与节点组件:确认kubelet已启动(如 systemctl status kubelet),以及容器运行时(containerd/docker)运行正常。
- 节点基础健康:确认swap 已关闭(swapoff -a,并在 /etc/fstab 移除 swap 挂载),否则 kubelet 可能拒绝工作;按需检查防火墙/安全组是否放行 6443/10250/30000-32767 等端口。
- 资源与系统:检查节点CPU/内存/磁盘压力与临时存储 ephemeral-storage是否不足,避免因资源紧张导致调度或运行异常。
二 Pod 异常排查
- 快速三板斧:
- 看状态与事件:kubectl get pods -o wide,随后**kubectl describe pod -n **定位 Events 中的失败原因。
- 看日志:kubectl logs -n ,如反复重启用**–previous**查看上次退出日志。
- 看配置:核对镜像、端口、环境变量、资源请求/限制等。
- 常见根因与对策:
- ImagePullBackOff/ErrImagePull:镜像不存在、仓库认证失败或网络不通;检查镜像名、仓库密钥(imagePullSecrets)、节点到仓库连通性(如 crictl pull)。
- CrashLoopBackOff:应用启动失败或健康检查反复失败;查日志、就绪/存活探针配置与应用自身错误。
- OOMKilled:容器内存超限;优化应用内存或调整 resources.limits.memory。
- Pending:调度失败;常见为资源不足、节点污点/亲和性不匹配、PVC 未绑定或临时存储不足;按事件提示扩容节点、调整亲和/容忍、修正 PVC 或 StorageClass 策略。
三 Service 与网络排查
- 五步法:
- 服务是否存在且端口正确:kubectl get svc -o wide;核对 port/targetPort/protocol。
- 是否有可用端点:kubectl get endpoints ;若为空,核对 Service selector 与后端 Pod labels 一致。
- DNS 是否正常:在集群 Pod 内执行nslookup ..svc.cluster.local;若失败,检查 CoreDNS 运行状态与 /etc/resolv.conf(nameserver 应为集群 DNS Service IP,search 含 svc.cluster.local)。
- 直连 Service IP:在节点或同命名空间 Pod 内 curl :;不通则继续下一步。
- 检查 kube-proxy 与转发规则:
- iptables 模式:iptables-save | grep
- IPVS 模式:ipvsadm -Ln | grep
同时确认 kube-proxy 在相关节点处于 Running。
- 典型现象与处理:
- Pod→Service IP 超时但宿主机→Service IP 正常:常见于网桥流量未进入 iptables(如 net.bridge.bridge-nf-call-iptables=0),导致 kube-proxy 规则不生效;应启用相关内核参数并重启网络组件。
- NodePort 访问不通:检查节点防火墙/云安全组是否放行 NodePort 范围(默认 30000-32767)、kube-proxy 是否正常运行、以及云厂商负载均衡/安全组配置。
四 节点与控制面问题排查
- 节点 NotReady:
- 查看节点详情:kubectl describe node ,关注Conditions(如 MemoryPressure/DiskPressure/NetworkUnavailable/PIDPressure)与Taints。
- 常见修复:释放/扩容资源、清理磁盘、恢复节点网络、处理污点(如手动污点需删除或为 Pod 增加容忍;系统污点需先恢复节点健康)。
- 节点无法加入或 kubelet 报错:
- 检查 kubelet 日志:journalctl -u kubelet -f;常见为与 API Server 连接被拒/超时、证书/权限问题、或 kubelet 参数不当。
- 基础环境:确认hostname/IP 配置正确、节点到控制面网络可达、必要的端口开放。
- 参数与资源:按需调整 kubelet 的 QPS/Burst、系统预留资源,避免因限流或 OOM 导致注册/心跳失败。
五 高频场景速查表
| 症状 |
快速命令 |
首要检查 |
常见修复 |
| kubectl 连接被拒 |
kubectl get nodes |
6443 端口、kubelet/容器运行时 |
启动 kubelet;排查防火墙/安全组;确认控制面就绪 |
| Pod 一直 Pending |
kubectl describe pod |
事件、资源、亲和/污点、PVC |
扩容节点、调整 requests/limits、修正亲和/容忍、绑定 PVC |
| ImagePullBackOff |
kubectl describe pod |
镜像名/仓库、Secret |
修正镜像地址;创建/修正 imagePullSecrets;节点可拉取镜像 |
| Service 访问超时 |
kubectl get endpoints ;nslookup |
Endpoints 是否为空、DNS、kube-proxy 规则 |
对齐 selector 与 labels;修复 CoreDNS;检查 iptables/IPVS |
| Pod→Service 不通但宿主机通 |
tcpdump 抓包;sysctl -p |
网桥到 iptables 路径 |
启用 bridge-nf-call-iptables=1 等内核参数并重启网络组件 |
| 节点 NotReady |
kubectl describe node |
条件与污点 |
释放资源、修复磁盘/网络、处理污点或增加容忍 |