Kubernetes在CentOS上的故障排查方法有哪些
导读:Kubernetes 在 CentOS 上的故障排查方法 一 快速定位路径 查看节点与系统资源 执行:kubectl get nodes、kubectl get pods -A、kubectl top nodes、kubectl top...
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 的不兼容),优先升级到稳定版本并回归验证。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes在CentOS上的故障排查方法有哪些
本文地址: https://pptw.com/jishu/775310.html
