K8S部署在Debian上如何进行故障排查
导读:K8S在Debian上的故障排查路线图 一 快速定位路径 集群连通性:执行kubectl cluster-info与kubectl get nodes,确认控制面可达与节点状态是否为Ready。若节点NotReady,优先查看节点详情与系...
K8S在Debian上的故障排查路线图
一 快速定位路径
- 集群连通性:执行kubectl cluster-info与kubectl get nodes,确认控制面可达与节点状态是否为Ready。若节点NotReady,优先查看节点详情与系统组件日志。
- 组件运行状态:在节点上用sudo systemctl status kubelet与sudo journalctl -u kubelet -f查看kubelet实时日志;必要时检查kube-proxy等其他组件。
- 工作负载状态:用kubectl get pods -A定位异常命名空间与Pod,结合kubectl describe pod -n 查看事件与失败原因;资源压力用kubectl top pod/node核查。
- 事件与系统日志:用kubectl get events -A --sort-by=.metadata.creationTimestamp查看最近事件;节点层问题查看**/var/log/syslog与dmesg**。
- 外部访问验证:对Service类型为NodePort/LoadBalancer的,从集群外部按节点IP与NodePort访问验证;若为ClusterIP,需通过端口转发或Ingress测试。
二 节点与系统层检查
- 基础环境:确认CPU/内存/磁盘满足最低要求;磁盘满会导致Pod被驱逐(Evicted),及时清理或扩容。
- 交换分区:Kubernetes不支持启用Swap,执行sudo swapoff -a并在**/etc/fstab**中注释swap条目,防止重启后恢复。
- 防火墙与端口:如使用ufw,放行控制面与工作节点通信端口,例如6443、2379、2380、10250、10251、10252、10255等;云环境同步放通安全组。
- 内核与网络参数:加载br_netfilter模块,开启net.ipv4.ip_forward=1与桥接相关转发,确保iptables/nftables规则与容器运行时兼容。
- 容器运行时:自v1.24起弃用dockershim,生产建议使用containerd;确认运行时与K8s版本匹配并处于健康状态。
三 常见故障与修复要点
- Pod镜像拉取失败(ErrImagePull/ImagePullBackOff):核对镜像名与标签、仓库可达性与凭据;私有仓库在节点放置CA证书(如/etc/docker/certs.d/…)。必要时手动拉取并打标验证。
- 节点无法加入集群:检查token是否过期、CA证书哈希是否正确、网络与端口是否可达;在控制面重新生成加入命令后重试。
- 服务访问异常:排查Service端口映射与类型(外网访问应选NodePort/LoadBalancer而非ClusterIP);证书错误时更新证书或在测试环境临时使用**-k**跳过验证(不推荐生产)。
- 网络插件问题:部署Flannel/Calico等后若Pod不通或DNS异常,检查网络插件配置、Pod CIDR与节点路由/iptables规则,必要时清理残留并重装。
- 证书问题:访问API或组件间通信报证书错误时,更新证书或在客户端指定**–cacert**;临时排障可用**-k**(不安全)。
- 资源不足驱逐:节点磁盘/内存压力导致Evicted,清理无用镜像与日志、扩容节点或调整资源请求/限制。
四 日志与监控手段
- 组件日志:用journalctl -u kubelet -f、systemctl status kubelet定位节点上组件问题;必要时查看kube-proxy与容器运行时日志。
- 应用与集群事件:用kubectl logs -n [-c ]查看容器日志;用kubectl describe pod/node与kubectl get events -A获取事件线索。
- 可视化监控:部署Prometheus + Grafana监控节点与Pod指标(CPU/内存/网络/存储),配置告警规则;或使用Kubernetes Dashboard进行Web可视化观测。
- 集中式日志:搭建EFK(Elasticsearch + Fluentd + Kibana)或Loki + Grafana收集与分析容器与系统日志,便于追溯历史问题。
五 一键排查清单
| 检查项 | 关键命令或路径 | 期望结果/处理 |
|---|---|---|
| 节点与控制面连通 | kubectl cluster-info;kubectl get nodes | 显示API地址与节点列表;NotReady则查kubelet与网络 |
| 组件服务状态 | systemctl status kubelet;journalctl -u kubelet -f | kubelet active且日志无致命错误 |
| 工作负载状态 | kubectl get pods -A;kubectl describe pod -n ;kubectl get events -A | 定位异常Pod与事件原因 |
| 资源压力 | kubectl top pod -A;kubectl top node | 无持续高占用;磁盘满则清理/扩容 |
| 网络连通 | ping/curl;ss -lntp | 节点间与Pod网络互通;端口监听正确 |
| 服务暴露 | kubectl get svc;ss -lntp | 类型与端口映射正确;外网可访问对应NodePort/LB |
| 防火墙与安全组 | ufw status;云安全组规则 | 放行6443、2379、2380、10250、10251、10252、10255等 |
| 内核与模块 | lsmod | grep br_netfilter;sysctl -p |
| 容器运行时 | crictl ps;ctr images ls | 容器与镜像可正常管理 |
| 日志与监控 | tail -f /var/log/syslog;dmesg;Prometheus/Grafana | 无系统级异常;监控面板数据正常 |
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: K8S部署在Debian上如何进行故障排查
本文地址: https://pptw.com/jishu/751656.html
