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

Kubernetes排错(十五):节点NotReady故障排查处理

在Kubernetes生产集群中,节点突然变成NotReady状态是运维团队最常遇到的紧急故障之一。本文将分享一套经过实战检验的排查流程,并附上生产环境专用诊断命令。

一、快速诊断三板斧(5分钟定位问题)
1. 基础状态速查
# 查看所有节点状态(重点关注READY列)
kubectl get nodes -o wide# 获取节点详细事件(核心排查入口)
kubectl describe node <节点名> | grep -A 15 'Conditions'
2. 黄金三指标
  1. 网络连通性:API Server可达性
    # 从故障节点测试控制面连通性
    curl -k https://<API-Server-IP>:6443/healthz
    
  2. kubelet状态:进程是否存活
    # 检查kubelet服务状态(生产环境常见问题源)
    systemctl status kubelet -l | grep Active
    
  3. 容器运行时:CRI是否正常
    # Containerd运行时检查
    ctr containers list
    
二、深度排查七步走
步骤1:kubelet日志分析
# 实时追踪kubelet日志(重点关注ERROR级别)
journalctl -u kubelet -f | grep -E 'error|fail'

常见日志模式

  • PLEG is not healthy → 容器运行时异常
  • Failed to update node status → 证书过期或APIServer连接问题
步骤2:资源瓶颈检查
# 磁盘空间(/var/lib分区是关键)
df -h /var/lib/docker /var/lib/kubelet# 内存压力(可用<10%需警惕)
free -m | awk 'NR==2{printf "%.1f%%\n", $3*100/$2}'# 进程级资源监控
top -p $(pgrep kubelet) -p $(pgrep containerd)
步骤3:网络诊断
# 检查CNI插件状态(Calico示例)
calicoctl node status# 关键端口连通性测试
nc -zv <API-Server-IP> 6443  # 控制面通信
nc -zv <其他节点IP> 8472     # Flannel VXLAN
步骤4:证书有效性验证
# 检查kubelet客户端证书
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates

⚠️ 证书过期是生产环境常见陷阱

步骤5:内核日志审查
# 查看系统级错误(OOM、硬件故障等)
dmesg -T | grep -iE 'oom|error|fail'
步骤6:容器运行时检测
# Containerd健康检查
ctr version && ctr namespaces list# 容器进程树分析
pstree -ap | grep -E 'containerd|kubelet'
步骤7:节点自检工具
# 使用官方检查脚本
curl -sSL https://raw.githubusercontent.com/kubernetes-sigs/kubespray/master/contrib/validate/validate-cluster.sh | bash
三、高频故障场景处理指南
场景1:PLEG不健康(生产环境TOP1问题)

现象

PLEG is not healthy: pleg was last seen active 3m0s ago

解决方案

# 重启容器运行时(Containerd示例)
systemctl restart containerd
# 清理残留容器
ctr containers list | awk '{print $1}' | xargs -I{} ctr containers delete {}
场景2:证书过期

特征

  • kubelet日志出现x509: certificate has expired or is not yet valid
    修复流程
rm -f /var/lib/kubelet/pki/kubelet-client-*
systemctl restart kubelet
场景3:磁盘爆满

应急处理

# 快速定位大文件
du -h /var/lib/docker/overlay2 | sort -rh | head -20# 清理dead容器
docker system prune -af
四、生产环境防护体系
1. 预防性监控配置
# Prometheus告警规则示例
- alert: NodeNotReadyexpr: kube_node_status_condition{condition="Ready",status="true"} == 0for: 5mlabels:severity: critical
2. 节点健康检查机制
# kubelet配置示例(/etc/kubernetes/kubelet.conf)
healthzBindAddress: 0.0.0.0:10248
healthzPort: 10248
3. 自动化恢复方案
# 自动驱逐Pod脚本(谨慎使用)
kubectl get pods --all-namespaces -o wide | grep <故障节点> | awk '{print $1,$2}' | xargs -n2 kubectl delete pod -n
五、专家级调试技巧
  1. 动态日志级别调整

    # 临时开启kubelet调试日志
    curl -X PUT -d "4" http://localhost:10248/debug/flags/v
    
  2. 内核参数调优

    # 解决文件句柄耗尽问题
    sysctl -w fs.inotify.max_user_watches=1048576
    
  3. APIServer审计分析

    kubectl logs -n kube-system kube-apiserver-<pod> | grep <节点IP>
    
六、避坑指南
  1. 勿盲目重启节点:可能导致状态不一致
  2. 慎用force delete:可能引发数据卷残留
  3. 监控时区统一:确保所有节点时间同步
  4. 版本兼容性检查:kubelet与控制面版本差异不超过2个minor版本

通过系统化的排查流程和预防措施,运维团队可以将节点NotReady的平均恢复时间(MTTR)缩短70%以上。建议将核心检查步骤沉淀为自动化脚本,并建立多维监控体系,实现从"被动救火"到"主动防御"的转变。

http://www.xdnf.cn/news/386965.html

相关文章:

  • MySQL基础面试题集锦
  • 【第三十五周】Janus-pro 技术报告阅读笔记
  • 实战项目4(05)
  • 《用MATLAB玩转游戏开发》Flappy Bird:小鸟飞行大战MATLAB趣味实现
  • C++内存管理详解
  • 互联网大厂Java求职面试实战:Spring Boot到微服务的技术问答解析
  • 《Redis应用实例》学习笔记,第二章:缓存二进制数据
  • “多端多接口多向传导”空战数据链体系——从异构融合架构到抗毁弹性网络的系统性设计
  • [工具]B站缓存工具箱 (By 郭逍遥)
  • MyBatis源码解读5(3.1、缓存简介)
  • 常见的排序算法(Java版)简单易懂好上手!!
  • path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2
  • Java高频面试之并发编程-15
  • ES常识5:主分词器、子字段分词器
  • 嵌入式硬件篇---CAN
  • 【Mac 从 0 到 1 保姆级配置教程 12】- 安装配置万能的编辑器 VSCode 以及常用插件
  • Spring框架(2)---AOP
  • 鱼眼相机生成-BEV鸟瞰图-入门教程
  • Nginx yum 安装
  • 从数据处理到模型训练:深度解析 Python 中的数据结构与操作实践
  • Unity3D仿星露谷物语开发42之粒子系统
  • 使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
  • Problem C: 异常1
  • 在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务(优化版)
  • 基于Qt的app开发第七天
  • leetcode 454. 4Sum II
  • 【数据库知识】Mysql进阶-高可用MHA(Master High Availability)方案
  • Git标签
  • 多模态大语言模型arxiv论文略读(六十八)
  • 各类有关NBA数据统计数据集大合集