阅读量:0
Ubuntu 上 Kubernetes 故障排查方法
一 基础状态与组件检查
- 查看节点与系统资源
- 执行:
kubectl get nodes -o wide、kubectl describe node,关注 Ready、DiskPressure、MemoryPressure 等条件。 - 执行:
kubectl get pods -n kube-system检查 kube-apiserver、etcd、kube-controller-manager、kube-scheduler、coredns、kube-proxy 是否 Running。 - 节点资源:
df -h /var/lib/kubelet、free -m、top -p $(pgrep kubelet);磁盘建议保留至少 10% 空闲,避免 kubelet 因磁盘满异常。
- 执行:
- 检查 kubelet 与容器运行时
systemctl status kubelet、journalctl -u kubelet -f(常见错误:证书过期、镜像拉取失败、容器运行时异常)。systemctl status containerd、crictl ps -a或ctr containers list确认容器运行时与容器状态。
- 集群连通性与 API Server
- 在节点上:
ping、nc -zv验证 6443 端口连通性。6443
- 在节点上:
- 版本与兼容性
kubeadm version、kubelet --version、kubectl version确认组件版本匹配与兼容。
二 Pod 与容器故障定位
- 快速定位状态
kubectl get pods -A观察 Pending、ImagePullBackOff、CrashLoopBackOff、Init:N/M 等状态。
- 查看事件、日志与配置
kubectl describe pod聚焦 Events(调度失败、镜像拉取失败、健康检查失败等)。-n kubectl logs,崩溃时用-c -n --previous查看上一次实例日志。- 必要时
kubectl exec -it进入容器;或用-c -n -- /bin/sh kubectl debug创建调试容器。
- 常见根因与对策
- 调度失败:节点 NotReady、资源不足(CPU/内存)、亲和性/污点/容忍不匹配;用
kubectl describe node与资源指标定位。 - 镜像问题:ImagePullBackOff/ErrImagePull,检查镜像名与标签、镜像仓库凭据(imagePullSecrets)、节点到仓库网络。
- 启动崩溃:CrashLoopBackOff,结合日志与
readiness/liveness探针配置排查应用错误与资源限制。 - 初始化容器:Init:N/M 或 Init:CrashLoopBackOff,分别查看未完成的 Init 容器日志与配置。
- 存储卷:检查 PersistentVolume/PVC 状态、挂载路径与权限;应用侧确认卷是否可写。
- 调度失败:节点 NotReady、资源不足(CPU/内存)、亲和性/污点/容忍不匹配;用
三 Service 与网络连通性排查
- 服务配置与后端关联
kubectl get svc校验 ports.port/targetPort/nodePort 与 selector 是否匹配后端 Pod 标签。-o yaml kubectl get endpoints若为空,说明选择器未匹配或后端未就绪。
- 访问路径分层验证
- 直接访问后端 Pod IP:确认应用监听正确端口并能返回预期响应。
- 访问 Service ClusterIP:在集群内
curl验证 kube-proxy 规则是否生效。: - 访问 NodePort/LoadBalancer:从集群外
curl或检查云厂商 EXTERNAL-IP 分配。:
- DNS 解析
- 临时 Pod:
kubectl run -it --rm --image=busybox:1.28.4 -- sh - 执行:
nslookup,必要时用完全限定名;若失败,检查 CoreDNS 是否 Running 及其日志。. .svc.cluster.local
- 临时 Pod:
- 网络与策略
- 检查 CNI 插件(如 Calico/Flannel)Pod 状态与日志:
kubectl get pods -n kube-system -l k8s-app=calico-node、kubectl logs。-n kube-system - 检查 NetworkPolicy 是否阻断流量:
kubectl get networkpolicies -A。 - 节点与云上安全组/防火墙:放行 6443、10250、30000-32767(NodePort) 等必要端口。
- 检查 CNI 插件(如 Calico/Flannel)Pod 状态与日志:
四 节点级与系统层问题
- 证书与 kubeconfig
- 证书有效期:
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates;过期需续期或重新签发。 - 确认 kubeconfig 上下文与用户权限是否正确。
- 证书有效期:
- 系统资源与内核日志
dmesg -T | grep -i "oom\|error",排查 OOM、硬件/驱动异常。- 清理磁盘与日志,避免 /var/lib/kubelet 或根分区满导致 Pod 无法创建/调度。
- 容器运行时与镜像
systemctl status containerd、crictl images检查运行时健康与本地镜像缓存;必要时手动crictl pull验证仓库连通性。
- 节点调试
- 使用 kubectl debug node/
--image=busybox:1.28.4 --target= 进入节点命名空间进行系统级诊断(需特权模式)。
- 使用 kubectl debug node/
五 高频场景速查表
| 症状 | 优先命令 | 重点检查 | 常见修复 |
|---|---|---|---|
| 节点 NotReady | kubectl describe node |
kubelet、CNI、资源、磁盘 | 启动/修复 kubelet;恢复 CNI;释放资源;扩容节点 |
| Pod Pending | kubectl describe pod |
调度约束、资源不足 | 调整 requests/limits;修正亲和性/污点;扩容节点 |
| ImagePullBackOff | kubectl describe pod |
镜像名/标签、凭据、网络 | 修正镜像;配置 imagePullSecrets;打通仓库网络 |
| CrashLoopBackOff | kubectl logs |
应用错误、探针、OOM | 修复应用;调整 liveness/readiness;增加内存 limit |
| Service 访问失败 | kubectl get endpoints 、nslookup |
selector、Endpoints、kube-proxy、CNI | 对齐标签;检查 kube-proxy 与 CNI;放通安全组/防火墙 |
| DNS 解析失败 | nslookup |
CoreDNS 状态与日志 | 重启 CoreDNS;检查配置与上游 DNS;校验 resolv.conf |
以上流程覆盖 节点、Pod、Service、网络、系统 五个层面,按“从外向里、由易到难”的顺序执行,通常可快速定位并恢复大多数故障。
以上就是关于“Ubuntu Kubernetes故障排查方法有哪些”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm