Kubernetes 在 Linux 上的故障排除技巧
一 快速定位路径
- 从集群到节点再到应用逐层缩小范围:先看集群整体,再查异常节点,最后定位到具体 Pod/容器。
- 常用命令清单:
- 集群与节点:kubectl get nodes -o wide、kubectl describe node
- 系统组件:kubectl get pods -n kube-system
- 资源与事件:kubectl top nodes、kubectl top pods;kubectl get events --sort-by=.metadata.creationTimestamp
- 日志与诊断:kubectl logs -c 、kubectl describe pod ;kubectl exec -it -c – /bin/sh;kubectl debug -it --image=busybox --target=
- 节点系统服务:systemctl status kubelet、journalctl -u kubelet -f
- 容器运行时:systemctl status containerd;ctr containers list
- 网络连通:ping ;nc -zv 6443;必要时用 traceroute/mtr 与 tcpdump 做路径与抓包分析。
二 节点与系统层排查
- 节点状态与系统资源
- 节点 NotReady:优先看 kubelet 是否存活、证书是否有效、容器运行时是否正常、资源是否紧张。
- 资源检查:df -h /var/lib/kubelet(磁盘)、free -m(内存)、top -p $(pgrep kubelet)(kubelet 占用)。
- 容器运行时与 kubelet
- 运行时:systemctl status containerd;ctr containers list(确认节点上容器列表与状态)。
- kubelet:systemctl status kubelet、journalctl -u kubelet -f(关注证书过期、镜像拉取、容器运行时异常等日志)。
- 内核与系统日志
- dmesg -T | grep -i “oom|error”(排查 OOM、硬件/驱动异常)。
三 网络与 DNS 排查
- 到 API Server 的连通性
- ping ;nc -zv 6443(确认 6443 端口开放与可达)。
- CNI 插件与策略
- kubectl get pods -n kube-system -l k8s-app=calico-node(以 Calico 为例);kubectl logs -n kube-system
- kubectl get networkpolicies(是否存在策略阻断通信)。
- DNS 解析
- cat /etc/resolv.conf(确认 DNS 配置);检查 kube-dns/CoreDNS 是否就绪:kubectl get pods -n kube-system | grep dns
- 进阶路径与抓包
- 节点间连通与延迟:traceroute/mtr
- 问题链路抓包:tcpdump/wireshark(在源/目的/中间节点抓包定位丢包与异常)。
四 Pod 与应用层排查
- 快速三步
- 看状态与事件:kubectl describe pod (关注 Events 中的调度失败、镜像拉取失败、挂载失败等关键信息)。
- 看日志:kubectl logs -c ;多容器需指定 -c。
- 进入或临时调试:kubectl exec -it -c – /bin/sh;或 kubectl debug 创建调试容器。
- 常见根因与对策
- 镜像问题:名称拼写错误、镜像不存在、私有仓库无凭证、网络不通 → 校对镜像名、配置 imagePullSecrets、验证网络访问。
- 资源不足:节点 CPU/内存/磁盘 紧张 → 调整 requests/limits、清理磁盘、扩容节点或集群。
- 端口冲突:容器内端口与宿主机/其他服务冲突 → 调整应用或 Service 端口。
- 启动脚本/命令错误:command/args 不当 → 修正启动命令与参数。
- 权限问题:文件/目录权限或运行用户不当 → 设置正确的 securityContext 与权限。
- 环境变量错误:变量缺失或值错误 → 校对 env 配置。
- 依赖服务不可用:数据库/缓存/注册中心未就绪 → 先恢复依赖服务。
- 规格/策略不符:亲和性、污点容忍、节点选择器不匹配 → 调整 affinity/tolerations/nodeSelector。
五 证书 组件日志 与 常用工具
- 证书有效期
- openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates(检查 kubelet 客户端证书是否过期)。
- 组件日志定位
- 控制面组件(如 kube-apiserver)与 kube-proxy 等可用 journalctl -u 查看;节点问题优先看 kubelet 日志。
- 节点问题检测
- Node Problem Detector(NPD):检测内核异常、文件系统损坏等节点级问题,便于提前告警与定位。
- 集群验证与配置
- kubeadm check 做配置与一致性校验;kubeadm reset/join 用于恢复或重新加入节点。
- 配置与版本
- kubectl config view(核对 kubeconfig 的 API Server 地址与证书路径);核对组件版本兼容矩阵,避免不兼容导致异常。