首页主机资讯Ubuntu Kubernetes故障排查方法有哪些

Ubuntu Kubernetes故障排查方法有哪些

时间2025-11-17 14:09:03发布访客分类主机资讯浏览639
导读:Ubuntu 上 Kubernetes 故障排查方法 一 基础状态与组件检查 查看节点与系统资源 执行:kubectl get nodes -o wide、kubectl describe node <node>,关注 Re...

Ubuntu 上 Kubernetes 故障排查方法

一 基础状态与组件检查

  • 查看节点与系统资源
    • 执行:kubectl get nodes -o widekubectl 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/kubeletfree -mtop -p $(pgrep kubelet);磁盘建议保留至少 10% 空闲,避免 kubelet 因磁盘满异常。
  • 检查 kubelet 与容器运行时
    • systemctl status kubeletjournalctl -u kubelet -f(常见错误:证书过期、镜像拉取失败、容器运行时异常)。
    • systemctl status containerdcrictl ps -actr containers list 确认容器运行时与容器状态。
  • 集群连通性与 API Server
    • 在节点上:ping < API-Server-IP> nc -zv < API-Server-IP> 6443 验证 6443 端口连通性。
  • 版本与兼容性
    • kubeadm versionkubelet --versionkubectl 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/MInit:CrashLoopBackOff,分别查看未完成的 Init 容器日志与配置。
    • 存储卷:检查 PersistentVolume/PVC 状态、挂载路径与权限;应用侧确认卷是否可写。

三 Service 与网络连通性排查

  • 服务配置与后端关联
    • kubectl get svc < svc> -o yaml 校验 ports.port/targetPort/nodePortselector 是否匹配后端 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 及其日志。
  • 网络与策略
    • 检查 CNI 插件(如 Calico/Flannel)Pod 状态与日志:kubectl get pods -n kube-system -l k8s-app=calico-nodekubectl logs < cni-pod> -n kube-system
    • 检查 NetworkPolicy 是否阻断流量:kubectl get networkpolicies -A
    • 节点与云上安全组/防火墙:放行 6443、10250、30000-32767(NodePort) 等必要端口。

四 节点级与系统层问题

  • 证书与 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 containerdcrictl 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
如何升级Ubuntu Kubernetes版本 ubuntu上thinkphp如何实现用户认证

游客 回复需填写必要信息