猫头虎分享云原生疑难杂Bug:NodeNotReady: Node is not ready 解决方案

🐯 猫头虎分享云原生疑难杂Bug:NodeNotReady: Node is not ready 解决方案

今天,猫头虎带来一个开发者常见的难题:在 Kubernetes 集群中遇到的 NodeNotReady 状态!
💡 问题背景:有粉丝提问——“猫哥,我的 K8s 节点老是显示 NodeNotReady,这到底是怎么回事?”
别急!今天这篇文章不仅帮你找出问题根源,还附上详细解决方案,让你的集群恢复正常工作!🚀


猫头虎是谁?

大家好,我是 猫头虎,猫头虎技术团队创始人,也被大家称为猫哥。我目前是COC北京城市开发者社区主理人COC西安城市开发者社区主理人,以及云原生开发者社区主理人,在多个技术领域如云原生、前端、后端、运维和AI都具备丰富经验。

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用方法、前沿科技资讯、产品评测、产品使用体验,以及产品优缺点分析、横向对比、技术沙龙参会体验等。我的分享聚焦于云服务产品评测、AI产品对比、开发板性能测试和技术报告

目前,我活跃在优快云、51CTO、腾讯云、阿里云开发者社区、知乎、微信公众号、视频号、抖音、B站、小红书等平台,全网粉丝已超过30万。我所有平台的IP名称统一为猫头虎猫头虎技术团队

我希望通过我的分享,帮助大家更好地掌握和使用各种技术产品,提升开发效率与体验。


作者名片 ✍️

  • 博主猫头虎
  • 全网搜索关键词猫头虎
  • 作者微信号Libin9iOak
  • 作者公众号猫头虎技术团队
  • 更新日期2024年10月10日
  • 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!

加入我们AI共创团队 🌐

加入猫头虎的共创圈,一起探索编程世界的无限可能! 🚀

部分专栏链接

🔗 精选专栏



猫头虎


🐾 问题摘要

NodeNotReady 是 Kubernetes 集群中节点状态异常的一种表现形式。这可能会导致部署的应用不可用,甚至影响整个集群的稳定性。
🕵️ 主要症状

  • 节点不可用:在 kubectl get nodes 的输出中,节点状态显示为 NotReady
  • Pod 调度失败:无法在该节点上调度新的 Pod。
  • 警报频发:集群监控工具(如 Prometheus 或 Grafana)会不断推送节点不可用警报。

🔍 问题分析

让我们一步步拆解这个问题,看看到底是什么原因引发了 NodeNotReady

1️⃣ 常见原因

  • 网络问题:节点无法与主控节点通信。
  • 资源耗尽:节点上的 CPU、内存或磁盘资源耗尽。
  • Kubelet 异常:Kubelet 服务停止或运行不正常。
  • 磁盘问题:磁盘满了或者 inode 用尽。
  • 容器运行时异常:如 Docker 或 containerd 崩溃。
  • 证书过期:节点与集群的认证证书失效。

2️⃣ 排查步骤

🔧 从以下几个方面入手

  1. 节点网络是否畅通
    ping <master-node-ip>
    curl -k https://<apiserver-ip>:6443/healthz
    
  2. 节点资源状况
    top
    df -h
    free -m
    
  3. 检查 Kubelet 日志
    journalctl -u kubelet -f
    
  4. 容器运行时状态
    systemctl status docker
    systemctl status containerd
    

🛠️ 解决方案

1️⃣ 网络问题解决

如果节点与主控节点通信中断:

  • 检查节点的网络配置和防火墙规则:
    iptables -L -n
    
  • 重启网络服务:
    systemctl restart network
    
  • 确保 kube-proxy 正常工作:
    kubectl get pods -n kube-system | grep kube-proxy
    

2️⃣ 资源耗尽

  • 释放磁盘空间:
    rm -rf /var/log/*.log
    docker system prune -f
    
  • 调整节点资源限制:
    vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    
    增加 CPU 和内存限制。

3️⃣ 重启异常服务

如果 Kubelet 或容器运行时崩溃:

  • 重启服务:
    systemctl restart kubelet
    systemctl restart docker
    
  • 检查服务状态:
    systemctl status kubelet
    systemctl status docker
    

4️⃣ 更新或修复证书

证书过期可能导致节点无法加入集群。更新证书:

kubeadm certs renew all
systemctl restart kubelet

🔑 代码示例

以下是自动修复脚本的示例,用于排查和修复常见问题:

#!/bin/bash
echo "开始自动修复 NodeNotReady 问题 🚀"
echo "检查网络连接..."
if ! ping -c 3 <master-node-ip>; then
  echo "网络故障,尝试修复..."
  systemctl restart network
fi

echo "清理磁盘空间..."
rm -rf /var/log/*.log
docker system prune -f

echo "重启服务..."
systemctl restart kubelet
systemctl restart docker

echo "更新证书..."
kubeadm certs renew all
systemctl restart kubelet

echo "检查完成 ✅"

常见问题 Q&A

Q1: 修复后节点依然是 NodeNotReady,怎么办?

答:检查是否遗漏了磁盘 inode 的问题,使用命令 df -i 查看 inode 使用情况。

Q2: 如何避免此类问题?

答:定期监控节点资源,使用 Prometheus 和 Grafana 设置警报。


📊 表格总结

问题原因检查命令解决方法
网络问题pingcurl重启网络、调整防火墙
资源耗尽topdf -hfree -m清理磁盘、优化资源配置
服务异常systemctl status重启 Kubelet 和 Docker
证书过期kubeadm certs check更新证书、重启服务

🔭 未来趋势与总结

随着云原生技术的普及,Kubernetes 的自动化运维能力将不断增强。未来,我们可能会看到更多智能化的节点健康监测与自动修复工具。
👥 更多最新 AI 云原生资讯,欢迎点击文末加入猫头虎 AI 共创社群

猫头虎


👉 更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击文末名片获取更多信息。我是猫头虎博主,期待与您的交流! 🦉💬
猫头虎


联系我与版权声明 📩

  • 联系方式
    • 微信: Libin9iOak
    • 公众号: 猫头虎技术团队
  • 版权声明
    本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问猫头虎的博客首页

点击✨⬇️下方名片⬇️✨,加入猫头虎AI共创社群矩阵。一起探索科技的未来,共同成长。🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值