Ubuntu Kubernetes故障排查方法有哪些
导读:Ubuntu 上 Kubernetes 故障排查方法 一 基础状态与组件检查 查看节点与系统资源 执行:kubectl get nodes -o wide、kubectl describe node <node>,关注 Re...
Ubuntu 上 Kubernetes 故障排查方法
一 基础状态与组件检查
- 查看节点与系统资源
- 执行:
kubectl get nodes -o wide、kubectl describe node < 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 < API-Server-IP>、nc -zv < API-Server-IP> 6443验证 6443 端口连通性。
- 在节点上:
- 版本与兼容性
kubeadm version、kubelet --version、kubectl version确认组件版本匹配与兼容。
二 Pod 与容器故障定位
- 快速定位状态
kubectl get pods -A观察 Pending、ImagePullBackOff、CrashLoopBackOff、Init:N/M 等状态。
- 查看事件、日志与配置
kubectl describe pod < pod> -n < ns>聚焦 Events(调度失败、镜像拉取失败、健康检查失败等)。kubectl logs < pod> -c < container> -n < ns>,崩溃时用--previous查看上一次实例日志。- 必要时
kubectl exec -it < pod> -c < container> -n < ns> -- /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 < svc> -o yaml校验 ports.port/targetPort/nodePort 与 selector 是否匹配后端 Pod 标签。kubectl get endpoints < svc>若为空,说明选择器未匹配或后端未就绪。
- 访问路径分层验证
- 直接访问后端 Pod IP:确认应用监听正确端口并能返回预期响应。
- 访问 Service ClusterIP:在集群内
curl < svc-ip> :< port>验证 kube-proxy 规则是否生效。 - 访问 NodePort/LoadBalancer:从集群外
curl < NodeIP> :< nodePort>或检查云厂商 EXTERNAL-IP 分配。
- DNS 解析
- 临时 Pod:
kubectl run -it --rm --image=busybox:1.28.4 -- sh - 执行:
nslookup < svc> .< ns> .svc.cluster.local,必要时用完全限定名;若失败,检查 CoreDNS 是否 Running 及其日志。
- 临时 Pod:
- 网络与策略
- 检查 CNI 插件(如 Calico/Flannel)Pod 状态与日志:
kubectl get pods -n kube-system -l k8s-app=calico-node、kubectl logs < cni-pod> -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= 进入节点命名空间进行系统级诊断(需特权模式)。
五 高频场景速查表
| 症状 | 优先命令 | 重点检查 | 常见修复 |
|---|---|---|---|
| 节点 NotReady | kubectl describe node <
node>
|
kubelet、CNI、资源、磁盘 | 启动/修复 kubelet;恢复 CNI;释放资源;扩容节点 |
| Pod Pending | kubectl describe pod <
pod>
-n <
ns>
|
调度约束、资源不足 | 调整 requests/limits;修正亲和性/污点;扩容节点 |
| ImagePullBackOff | kubectl describe pod <
pod>
-n <
ns>
|
镜像名/标签、凭据、网络 | 修正镜像;配置 imagePullSecrets;打通仓库网络 |
| CrashLoopBackOff | kubectl logs <
pod>
-c <
c>
-n <
ns>
--previous |
应用错误、探针、OOM | 修复应用;调整 liveness/readiness;增加内存 limit |
| Service 访问失败 | kubectl get endpoints <
svc>
、nslookup |
selector、Endpoints、kube-proxy、CNI | 对齐标签;检查 kube-proxy 与 CNI;放通安全组/防火墙 |
| DNS 解析失败 | nslookup <
svc>
.<
ns>
.svc.cluster.local |
CoreDNS 状态与日志 | 重启 CoreDNS;检查配置与上游 DNS;校验 resolv.conf |
以上流程覆盖 节点、Pod、Service、网络、系统 五个层面,按“从外向里、由易到难”的顺序执行,通常可快速定位并恢复大多数故障。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Kubernetes故障排查方法有哪些
本文地址: https://pptw.com/jishu/748921.html
