首页主机资讯Kubernetes在CentOS上的故障排查方法有哪些

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

时间2025-12-18 18:02:05发布访客分类主机资讯浏览1307
导读:Kubernetes 在 CentOS 上的故障排查方法 一 快速定位路径 查看节点与系统资源 执行:kubectl get nodes、kubectl get pods -A、kubectl top nodes、kubectl top...

Kubernetes 在 CentOS 上的故障排查方法

一 快速定位路径

  • 查看节点与系统资源
    • 执行:kubectl get nodeskubectl get pods -Akubectl top nodeskubectl top pods -A,确认节点 Ready、Pod Running/Completed 与资源是否紧张。
  • 查看事件与日志
    • 执行:kubectl describe pod -n 获取事件与失败原因;kubectl logs -c -n 查看容器日志;必要时用 kubectl debug 进入调试容器。
  • 查看控制面与节点组件日志
    • 执行:journalctl -u kubelet -fjournalctl -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-dnskubectl get svc kube-dns -n kube-system 检查 CoreDNS;查看 CNI(如 Calico/Flannel)Pod 状态与节点间 UDP/TCP 连通性。
  • 检查系统层面
    • 执行:dmesg -Ttail -f /var/log/messages,排查内核与系统日志异常。

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

  • 节点 NotReady 或 kubelet 异常
    • 可能原因:Swap 未关闭、Cgroup 驱动不一致、容器运行时异常、kubelet 配置错误。
    • 处理要点:执行 swapoff -a 并注释 /etc/fstab 中 swap 条目;确认 Docker/containerdkubelet 使用一致的 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 8472Calico 相关端口;在节点间做 ping/traceroute/nc 连通性测试;排查 kube-proxy 模式与规则是否生效。
  • CoreDNS 解析失败
    • 可能原因:CoreDNS Pod CrashLoopBackOffService/Endpoint 异常、上游 DNS 配置错误。
    • 处理要点:查看 CoreDNS Pod 日志与 Endpoints;确认 kube-dns ServiceClusterIP 可达;必要时检查 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 的场景,注意 iptablesnftables 的兼容与规则一致性,避免因规则链不一致导致 kube-proxy 配置失败。
  • 容器运行时与 kubelet
    • 确认 Docker/containerd 正常运行;kubelet 启用并开机自启;必要时检查 cgroup 驱动kubeconfig 配置。

四 高效诊断命令与工具

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

五 恢复与回滚建议

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Kubernetes在CentOS上的故障排查方法有哪些
本文地址: https://pptw.com/jishu/775310.html
CentOS上如何进行Kubernetes的性能测试 CentOS上如何监控Kubernetes集群状态

游客 回复需填写必要信息