Kubernetes在CentOS中的故障排查方法有哪些

作者:袖梨 2026-07-17

Kubernetes 在 CentOS 上的故障排查方法

Kubernetes在CentOS上的故障排查方法有哪些

一 快速定位路径

  • 查看节点与系统资源
    • 执行:kubectl get nodes、kubectl get pods -A、kubectl top nodes、kubectl top pods -A,确认节点 Ready、Pod Running/Completed 与资源是否紧张。
  • 查看事件与日志
    • 执行:kubectl describe pod -n 获取事件与失败原因;kubectl logs -c -n 查看容器日志;必要时用 kubectl debug 进入调试容器。
  • 查看控制面与节点组件日志
    • 执行:journalctl -u kubelet -f、journalctl -u kube-proxy -f;控制面组件(如 kube-apiserver/controller-manager/scheduler)在 /etc/kubernetes/manifests/ 静态 Pod 场景下,可通过 journalctl -u kubelet 查看其日志。
  • 检查网络与 CNI
    • 执行:kubectl get pods -n kube-system -l k8s-app=kube-dns 与 kubectl get svc kube-dns -n kube-system 检查 CoreDNS;查看 CNI(如 Calico/Flannel)Pod 状态与节点间 UDP/TCP 连通性。
  • 检查系统层面
    • 执行:dmesg -T、tail -f /var/log/messages,排查内核与系统日志异常。

二 常见故障场景与处理要点

  • 节点 NotReady 或 kubelet 异常
    • 可能原因:Swap 未关闭、Cgroup 驱动不一致、容器运行时异常、kubelet 配置错误。
    • 处理要点:执行 swapoff -a 并注释 /etc/fstab 中 swap 条目;确认 Docker/containerd 与 kubelet 使用一致的 cgroup 驱动(systemd);重启 kubelet 并查看 journalctl -u kubelet -f。
  • Pod 无法拉取镜像(ErrImagePull/ImagePullBackOff)
    • 可能原因:镜像不存在、仓库认证失败、国内网络不通。
    • 处理要点:核对镜像名与仓库;在节点上手动 docker pull 验证;必要时使用 imagePullSecrets 或镜像仓库镜像加速。
  • 服务访问异常(Connection refused/超时)
    • 可能原因:Service type=ClusterIP 未对外暴露、端口映射错误、应用未监听 0.0.0.0、就绪探针失败。
    • 处理要点:对外访问改为 NodePort/LoadBalancer;检查 kubectl describe svc 与 Endpoints;修正容器端口与协议;核查 readiness/liveness 探针配置。
  • Pod 初始化卡住(Init 容器)
    • 可能原因:Init 容器依赖的 Service/DNS 未就绪。
    • 处理要点:先创建依赖 Service;确认 CoreDNS 正常;在 Init 容器中增加日志输出以定位阻塞点。
  • 跨节点 Pod 不通或 Service VIP 不通
    • 可能原因:CNI 未就绪、节点防火墙/安全组阻断、跨节点 UDP/TCP 不通、kube-proxy/ipvs/iptables 异常。
    • 处理要点:检查 CNI Pod 与节点网络命名空间;放行 Flannel VXLAN/UDP 8472 或 Calico 相关端口;在节点间做 ping/traceroute/nc 连通性测试;排查 kube-proxy 模式与规则是否生效。
  • CoreDNS 解析失败
    • 可能原因:CoreDNS Pod CrashLoopBackOff、Service/Endpoint 异常、上游 DNS 配置错误。
    • 处理要点:查看 CoreDNS Pod 日志与 Endpoints;确认 kube-dns Service 的 ClusterIP 可达;必要时检查 resolv.conf 与上游 DNS 连通性。

三 CentOS 系统与环境检查清单

  • 基础环境
    • 确认 CentOS 7/8 版本满足要求;禁用 Swap(重启后仍保持关闭);设置唯一 主机名 与 /etc/hosts 解析;时间同步(如 chrony)。
  • 防火墙与安全组
    • 放行控制面与节点通信端口(示例):6443/tcp(API)、10250/tcp(kubelet)、10251/tcp(scheduler)、10252/tcp(controller-manager)、以及 Flannel UDP 8472;如使用 firewalld,可加入 trusted 区域或显式放行端口。
  • 内核与网络参数
    • 启用转发与桥接过滤:
      • echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
      • echo 1 > /proc/sys/net/ipv4/ip_forward
    • 在 CentOS 8 默认使用 nftables 的场景,注意 iptables 与 nftables 的兼容与规则一致性,避免因规则链不一致导致 kube-proxy 配置失败。
  • 容器运行时与 kubelet
    • 确认 Docker/containerd 正常运行;kubelet 启用并开机自启;必要时检查 cgroup 驱动 与 kubeconfig 配置。

四 高效诊断命令与工具

目标命令示例
集群与资源kubectl get nodes -o wide;kubectl get pods -A;kubectl top nodes;kubectl top pods -A
事件与详情kubectl describe pod -n ;kubectl get events --sort-by=.metadata.creationTimestamp
容器与调试kubectl logs -c -n ;kubectl exec -it -c -n – sh;kubectl debug
组件日志journalctl -u kubelet -f;journalctl -u kube-proxy -f;控制面静态 Pod 通过 journalctl -u kubelet 查看
系统日志dmesg -T;tail -f /var/log/messages
DNS 与网络kubectl get pods -n kube-system -l k8s-app=kube-dns;kubectl get svc kube-dns -n kube-system;kubectl get endpoints kube-dns -n kube-system;**netstat -tulnp
抓包与内核网络tcpdump -nn -i any port 8472 or port 6443;ipvsadm -ln(排查 ipvs 状态)

五 恢复与回滚建议

  • 非破坏恢复
    • 重启异常组件:systemctl restart kubelet;必要时滚动重启相关 DaemonSet(如 kube-proxy、CNI)。
  • 配置修正
    • 修正 kubelet 启动参数、CNI 配置或 Service/Ingress 定义后,优先通过 kubectl apply -f 使变更生效。
  • 重置与重建
    • 无法恢复时,先备份重要清单与密钥,再执行 kubeadm reset 清理节点,随后按初始化流程重建;对 etcd 数据谨慎操作,避免误删导致集群不可恢复。
  • 版本与兼容性
    • 遇到历史版本缺陷(如早期 kube-proxy + CentOS 8 nftables 的不兼容),优先升级到稳定版本并回归验证。

相关文章

精彩推荐