温馨提示×

Ubuntu Kubernetes 故障排查有哪些方法

小樊
45
2026-01-07 03:32:23
栏目: 智能运维

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 与网络排查

  • 五步法:
    1. 服务是否存在且端口正确:kubectl get svc -o wide;核对 port/targetPort/protocol
    2. 是否有可用端点:kubectl get endpoints ;若为空,核对 Service selector 与后端 Pod labels 一致。
    3. DNS 是否正常:在集群 Pod 内执行nslookup ..svc.cluster.local;若失败,检查 CoreDNS 运行状态与 /etc/resolv.conf(nameserver 应为集群 DNS Service IP,search 含 svc.cluster.local)。
    4. 直连 Service IP:在节点或同命名空间 Pod 内 curl :;不通则继续下一步。
    5. 检查 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 条件与污点 释放资源、修复磁盘/网络、处理污点或增加容忍

0