当前位置: 首页 > news >正文

K8s节点NotReady别慌!从12个真实Case看如何快速定位(附排查命令清单)

K8s节点NotReady故障排查实战手册:12种典型场景与精准修复策略

当集群监控大屏突然亮起红色告警,某个节点状态赫然显示"NotReady"时,作为运维负责人的你,心跳是否漏了半拍?别担心,这份手册将带你像资深SRE一样,快速锁定问题根源并实施精准修复。不同于常规理论文档,我们直接从生产环境中最常见的12种故障模式切入,每个案例都配有可立即执行的诊断命令已验证的解决方案

1. 节点状态基础诊断框架

在深入具体案例前,我们需要建立系统化的排查路径。以下是每个NotReady节点都应该执行的基础检查流程:

第一步:快速状态确认

# 获取节点基础状态 kubectl get nodes -o wide # 查看详细事件记录 kubectl describe node <故障节点名称> | grep -A 20 "Conditions:"

第二步:核心组件健康检查

# 检查kubelet运行状态(节点上执行) systemctl status kubelet --no-pager -l # 查看最近50条kubelet日志 journalctl -u kubelet -n 50 --no-pager | grep -i error

第三步:资源瓶颈分析

# 内存与交换分区检查 free -h # 磁盘空间分析(重点关注/var分区) df -h | grep -v tmpfs # 进程资源占用排序 ps aux --sort=-%mem | head -10

提示:将上述命令保存为node_check.sh并赋予执行权限,可快速建立排查工具包

关键指标阈值参考表

指标类型正常范围危险阈值检查命令
内存可用量>总内存20%<500MBfree -h
根分区使用率<80%>90%df -h /
CPU负载(5分钟)<核心数×2>核心数×4uptime
节点时钟偏移<100ms>500msntpstat

2. 网络连接类故障排查

2.1 Case 1: "use of closed network connection"错误

典型现象

  • 节点日志持续输出write tcp 127.0.0.1:37742->127.0.0.1:60443: use of closed network connection
  • kubelet与API Server的通信时断时续

根本原因: 这是Kubernetes处理HTTP/2连接时的一个已知问题,当连接处于半关闭状态时,kubelet仍尝试发送数据会导致此错误。该问题在以下版本中已修复:

  • v1.22.15+
  • v1.23.12+
  • v1.24.6+

应急处理方案

# 重启kubelet服务 systemctl restart kubelet # 验证修复(观察5分钟) watch -n 5 'kubectl get nodes | grep <节点名>'

长期解决方案: 升级集群到已修复版本,或应用以下补丁配置:

# kubelet配置片段 apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration http2MaxStreamsPerConnection: 100 # 默认250,降低可减少连接竞争

2.2 Case 2: etcd请求超时

典型现象

  • 日志出现etcdserver: request timed out
  • 节点状态在Ready与NotReady间频繁波动

排查步骤

# 检查etcd集群健康状态 ETCDCTL_API=3 etcdctl --endpoints=https://<etcd-ip>:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key endpoint health # 查看etcd存储性能 ETCDCTL_API=3 etcdctl --write-out=table endpoint status

常见修复方案

  1. 存储空间优化
# 获取当前修订版本 rev=$(ETCDCTL_API=3 etcdctl --endpoints=... endpoint status | grep -oP 'revision:\s+\K\d+') # 执行压缩操作 ETCDCTL_API=3 etcdctl --endpoints=... compact $((rev-1000)) # 整理碎片 ETCDCTL_API=3 etcdctl --endpoints=... defrag
  1. 性能调优参数
# etcd启动参数建议 --quota-backend-bytes=8589934592 # 8GB空间限制 --auto-compaction-retention=24h # 24小时自动压缩 --enable-pprof=true # 开启性能分析

3. 运行时与资源类故障

3.1 Case 3: 容器运行时无响应

典型现象

  • 日志显示container runtime status check may not have completed yet
  • docker pscrictl ps命令卡死

问题定位

# 检查容器运行时进程状态 ps aux | grep -E 'dockerd|containerd' # 强制清理卡死的容器进程 for pid in $(ps -ef | grep -E 'docker-containerd-shim|containerd-shim' | awk '{print $2}'); do kill -9 $pid done

根治方案

# 重建容器运行时服务 systemctl stop kubelet systemctl stop docker rm -rf /var/lib/docker/containerd/* systemctl start docker systemctl start kubelet

3.2 Case 4: 镜像文件系统异常

典型现象

  • 事件日志出现Warning InvalidDiskCapacity invalid capacity 0 on image filesystem
  • 新Pod无法拉取镜像

快速修复

# 重启containerd服务 systemctl restart containerd # 验证修复 crictl images

深度处理

# 检查存储驱动配置 cat /etc/containerd/config.toml | grep -A 5 '^\[plugins\.\"io\.containerd\.grpc\.v1\.cri\"\.containerd\.runtimes\.runc\.options\]' # 典型配置示例 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true

4. 配置与系统类故障

4.1 Case 5: 节点时间不同步

典型现象

  • 日志中出现systemd: Time has been changed
  • 跨节点服务调用出现证书验证失败

诊断与修复

# 检查时间偏移量 chronyc tracking | grep -i skew # 强制立即同步 chronyc makestep # 检查NTP服务状态 systemctl status chronyd

配置建议

# /etc/chrony.conf 关键配置 pool 2.cn.pool.ntp.org iburst makestep 1.0 3 maxdistance 1.0

4.2 Case 6: cgroup驱动不一致

典型现象

  • 日志报错cgroup driver "cgroupfs" is different from docker
  • kubelet启动后立即崩溃

解决方案

# 修改kubelet启动参数 sed -i 's/--cgroup-driver=.*/--cgroup-driver=systemd/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf # 应用配置 systemctl daemon-reload systemctl restart kubelet

验证方法

docker info | grep -i cgroup kubelet --cgroup-driver | grep systemd

5. 高级诊断工具与技术

5.1 节点事件智能分析

使用kubectl结合jq进行高级事件过滤:

# 提取最近1小时的关键警告事件 kubectl get events --field-selector type=Warning \ -o json | jq -r '.items[] | select(.lastTimestamp > "'$(date -d '1 hour ago' -Ins --utc | sed 's/+0000/Z/')'") | .message'

5.2 Prometheus监控集成

关键监控指标示例:

# 节点就绪状态 kube_node_status_condition{condition="Ready",status="true"} # PLEG健康检查 rate(kubelet_pleg_relist_duration_seconds_sum[5m]) > 1 # 资源压力预测 predict_linear(node_memory_MemAvailable_bytes[1h], 3600) < 0

5.3 自动化修复脚本示例

#!/bin/bash NODE=$1 function check_kubelet() { ssh $NODE "systemctl is-active kubelet" | grep -q active || { echo "Restarting kubelet..." ssh $NODE "systemctl restart kubelet" } } function check_docker() { ssh $NODE "docker ps" >/dev/null 2>&1 || { echo "Restarting docker..." ssh $NODE "systemctl restart docker" } } check_kubelet check_docker

6. 最佳实践与经验总结

在管理过数十个生产集群后,我总结出以下节点稳定性保障原则:

  1. 预防性维护周期

    • 每周检查节点时钟同步状态
    • 每月验证etcd存储健康度
    • 每季度审计kubelet配置一致性
  2. 关键配置清单

    - [ ] 确保所有节点使用相同的容器运行时版本 - [ ] 统一cgroup驱动配置(推荐systemd) - [ ] 设置合理的kubelet--node-status-update-frequency(默认10s) - [ ] 配置适当的--eviction-hard内存阈值(建议memory.available<500Mi)
  3. 故障演练建议

    • 定期模拟网络分区场景
    • 测试磁盘压力下的Pod驱逐行为
    • 验证kubelet自动恢复能力

记住,节点NotReady状态就像发烧症状,关键是要快速找到真正的病因。掌握这12种典型案例的处理方法,配合系统化的排查流程,你就能在下次告警响起时从容应对。

http://www.zskr.cn/news/1418415.html

相关文章:

  • STM32F407ZGT6驱动AD9959射频信号源的完整Keil工程(含CubeMX配置与SPI控制代码)
  • 避坑指南:QGIS矢量绘图与影像裁剪时,新手最易忽略的5个细节(附Shapefile正确保存姿势)
  • hCaptcha 协议识别 API 集成指南
  • 对比官方价,Taotoken平台折扣活动带来的实际成本节省感受
  • 别再死磕YOLOv1论文了!用Python从零复现一个简化版(附完整代码)
  • 技术复盘|从物理引擎到软硬协同,拆解支持50人并发的无人机数字孪生实训平台
  • 018、困难样本挖掘策略:训练中自动发现易错样本,定向补充标注
  • 天池二手车估价实战资源包:LightGBM与XGBoost双模型完整实现,含清洗、特征工程、调参及提交生成
  • 用UE5 Lumen打造动态场景:详解自发光材质如何成为你的新光源
  • 告别Electron臃肿!用Tauri 2.0将你的网站URL秒变桌面软件(附完整配置流程)
  • 从BERT到BART:搞懂Transformer家族里的这个‘多面手’(附五种噪声任务详解)
  • FPGA实战避坑指南:序列检测用Mealy还是Moore?从时序、面积和代码风格帮你做选择
  • 别再只懂Apriori了!手把手教你用Python基础库实现亲和性分析(附完整代码与数据集)
  • Matlab树叶图像识别实践包:8类常见树叶自动分类(含测试图库、源码与完整实验文档)
  • 实测才敢推!2026年实测靠谱的专业降AI率软件
  • 《RAE算子与认知相变动力学》核心内容复盘与研究报告
  • 企业应用搭建平台怎么选?6个核心维度全面解析
  • 杰理之频偏修改设置接口函数【篇】
  • 告别GitHub龟速!手把手教你用Gitee镜像站搞定QGroundControl v4.2.6完整源码
  • 从高维数据预处理到时空深度学习模型实践——真实世界的数据理论、案例与全流程建模
  • HFSS新手避坑指南:从零开始设置你的第一个仿真项目(含界面详解)
  • 从调参到优化:手把手教你提升CarSim中MPC泊车路径跟踪的平顺性
  • 别再只用seasonal_decompose了!用statsmodels做时间序列分解,这3个参数调不好等于白干
  • 别再让电机乱转了!STM32 HAL库 + TB6612FNG驱动GB37-520电机保姆级避坑指南
  • Windows服务管理翻车实录:用nssm解决那些sc和手动注册搞不定的坑
  • 金相显微镜和光学显微镜有什么区别?
  • 2026年4月国内知名的永磁减速步进电机企业有哪些,PM36 永磁直线步进电机,永磁减速步进电机源头厂家找哪家 - 品牌推荐师
  • 为什么有些小工厂上了MES反而更乱
  • 金指云 MES 赋能新材料企业数字化转型实战指南
  • 别再只会用LDO了!手把手教你用SIMC 0.18um工艺从零仿真一个完整LDO电路