k8s集群Ubuntu故障排查方法
导读:K8s 集群 Ubuntu 故障排查方法 一 快速定位路径 查看节点状态与基本信息:kubectl get nodes;对异常节点执行 kubectl describe node ,关注 Conditions、Capacity/Alloc...
K8s 集群 Ubuntu 故障排查方法
一 快速定位路径
- 查看节点状态与基本信息:kubectl get nodes;对异常节点执行 kubectl describe node ,关注 Conditions、Capacity/Allocatable、Taints、Events。
- 查看集群事件:kubectl get events --sort-by=.metadata.creationTimestamp,优先关注 Warning 与频繁出现的事件。
- 聚焦工作负载:kubectl get pods -A -o wide,定位异常 Pod 所在节点与命名空间,结合 kubectl describe pod 与 kubectl logs [-c ] 查看事件与容器日志。
- 检查系统资源:kubectl describe node | grep Allocated -A 5,确认是否因 CPU/内存/磁盘压力导致调度或运行异常。
- 检查容器运行时:若使用 containerd,执行 crictl ps -a;若使用 Docker,执行 docker ps -a;无法拉取镜像或容器频繁重启时,优先查看运行时日志。
- 检查 kubelet:systemctl status kubelet;必要时 journalctl -u kubelet -xe 查看启动失败原因与反复重启线索。
- 检查网络插件:kubectl get pods -n kube-system | grep -E ‘flannel|calico|cilium’,确认 DaemonSet 就绪数与重启次数。
- 节点间连通性:在节点上互相 ping/测试关键端口(如 6443/10250/8472 等,取决于网络插件与控制面端口),排除物理/安全组/VXLAN 等问题。
- 必要时隔离与恢复:kubectl drain --ignore-daemonsets,修复后 kubectl uncordon ;彻底重建前先备份关键清单与证书。
二 高频故障与修复要点
- 节点 NotReady 或 kubelet 反复重启
- 检查 kubelet 状态与日志:systemctl status kubelet;journalctl -u kubelet -xe。
- 确认容器运行时健康:crictl/ docker 是否正常,镜像与容器能否正常拉起。
- 检查网络插件是否就绪(如 Flannel/Calico 的 Pod Running 且 Restart 为 0)。
- 排查系统资源与内核参数:CPU/内存/磁盘是否紧张;/proc/sys/net/bridge/bridge-nf-call-iptables 是否存在,必要时 modprobe br_netfilter 并写入 sysctl 配置。
- 若节点曾异常关机/重启,确认 kubelet 已开机自启并重启服务。
- 重启后 apiserver 连接被拒绝
- 现象:kubectl 报 “The connection to the server 127.0.0.1:6443 was refused”。
- 处理:检查控制面服务是否就绪;确认 kubelet 已启动;排查防火墙/端口占用;确保 swap 已关闭(swapoff -a 并注释 /etc/fstab 中的 swap 行)。
- 节点加入集群失败(kubeadm join 报错)
- 常见报错:/etc/kubernetes/kubelet.conf 已存在、端口 10250 被占用、/etc/kubernetes/pki/ca.crt 已存在。
- 处理:在待加入节点执行 kubeadm reset -f 清理旧状态后重新 join;如端口占用,检查是否已有 kubelet/容器占用并释放。
- 镜像拉取或容器启动失败
- 现象:Pod ImagePullBackOff/ErrImagePull 或容器 CrashLoopBackOff。
- 处理:kubectl describe pod 与 kubectl logs 定位镜像名/仓库/拉取密钥;确认节点可访问镜像仓库;必要时配置镜像加速或私有仓库凭据。
- 节点间网络不通或 Pod 间通信异常
- 检查网络插件 Pod 状态与节点就绪;确认节点间 ICMP/目标端口 可达;排查安全组/iptables/路由/Overlay 网络(如 VXLAN/geneve)是否正常。
三 Ubuntu 系统层面的必查项
- 关闭 Swap:swapoff -a;sed -ri ‘/^[^#]*swap/s@^@#@’ /etc/fstab,确保重启后不再启用。
- 内核网络参数:确保加载 br_netfilter/bridge 模块(modprobe br_netfilter bridge),并设置 net.bridge.bridge-nf-call-iptables=1、net.bridge.bridge-nf-call-ip6tables=1、net.ipv4.ip_forward=1。
- 容器运行时与 kubelet 配置一致性:确认 containerd 或 Docker 正常运行;如使用 containerd,检查 /etc/containerd/config.toml 中 SystemdCgroup = true 与 kubelet 的 cgroup 驱动一致。
- 防火墙与端口:按需开放或临时关闭防火墙(如 ufw disable)进行验证;确保 6443/10250/10251/10252/8472 等关键端口未被占用且策略允许。
- 资源与 OOM:检查磁盘 Inode/空间(df -i、df -h)、内存与 OOM 记录(dmesg | grep -i oom);必要时扩容或调整 QoS/驱逐阈值。
- 服务自启:确认 kubelet、containerd/docker、网络插件等关键服务开机自启(systemctl enable --now kubelet)。
四 一键排查命令清单
- 集群概览:kubectl get nodes -o wide;kubectl get pods -A -o wide
- 事件与资源:kubectl get events --sort-by=.metadata.creationTimestamp;kubectl describe node | grep Allocated -A 5
- 日志与诊断:kubectl logs [-c ];kubectl describe pod ;journalctl -u kubelet -xe
- 运行时与网络:crictl ps -a 或 docker ps -a;kubectl get pods -n kube-system | grep -E ‘flannel|calico|cilium’
- 系统层面:free -m;df -h;df -i;top;ss -lntp | grep -E ‘6443|10250|8472’;ufw status;systemctl status kubelet;systemctl restart kubelet
五 排障流程建议
- 先全局后局部:先看节点状态与事件,再定位到命名空间/Pod/容器。
- 先易后难:确认服务运行与端口可达,再检查镜像、权限、网络策略。
- 变更可回滚:修改 kubelet/容器运行时/网络插件前备份配置;节点重建前先 kubeadm reset 并保留必要证书。
- 受控操作:对生产节点先 drain 再维护,完成修复后 uncordon;必要时分阶段滚动处理。
- 记录与复盘:保存关键命令输出与日志片段,形成故障复盘文档,沉淀告警阈值与应急预案。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: k8s集群Ubuntu故障排查方法
本文地址: https://pptw.com/jishu/762572.html
