🐯 猫头虎分享云原生疑难杂Bug:NodeNotReady: Node is not ready 解决方案
今天,猫头虎带来一个开发者常见的难题:在 Kubernetes 集群中遇到的 NodeNotReady
状态!
💡 问题背景:有粉丝提问——“猫哥,我的 K8s 节点老是显示 NodeNotReady
,这到底是怎么回事?”
别急!今天这篇文章不仅帮你找出问题根源,还附上详细解决方案,让你的集群恢复正常工作!🚀
猫头虎是谁?
大家好,我是 猫头虎,猫头虎技术团队创始人,也被大家称为猫哥。我目前是COC北京城市开发者社区主理人、COC西安城市开发者社区主理人,以及云原生开发者社区主理人,在多个技术领域如云原生、前端、后端、运维和AI都具备丰富经验。
我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用方法、前沿科技资讯、产品评测、产品使用体验,以及产品优缺点分析、横向对比、技术沙龙参会体验等。我的分享聚焦于云服务产品评测、AI产品对比、开发板性能测试和技术报告。
目前,我活跃在优快云、51CTO、腾讯云、阿里云开发者社区、知乎、微信公众号、视频号、抖音、B站、小红书等平台,全网粉丝已超过30万。我所有平台的IP名称统一为猫头虎或猫头虎技术团队。
我希望通过我的分享,帮助大家更好地掌握和使用各种技术产品,提升开发效率与体验。
作者名片 ✍️
- 博主:猫头虎
- 全网搜索关键词:猫头虎
- 作者微信号:Libin9iOak
- 作者公众号:猫头虎技术团队
- 更新日期:2024年10月10日
- 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!
加入我们AI共创团队 🌐
- 猫头虎AI共创社群矩阵列表:
加入猫头虎的共创圈,一起探索编程世界的无限可能! 🚀
部分专栏链接
:
🔗 精选专栏:
- 《面试题大全》 — 面试准备的宝典!
- 《IDEA开发秘籍》 — 提升你的IDEA技能!
- 《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!
- 《100天精通Golang(基础入门篇)》 — 踏入Go语言世界的第一步!
- 《100天精通Go语言(精品VIP版)》 — 踏入Go语言世界的第二步!

🐾 问题摘要
NodeNotReady
是 Kubernetes 集群中节点状态异常的一种表现形式。这可能会导致部署的应用不可用,甚至影响整个集群的稳定性。
🕵️ 主要症状:
- 节点不可用:在
kubectl get nodes
的输出中,节点状态显示为NotReady
。 - Pod 调度失败:无法在该节点上调度新的 Pod。
- 警报频发:集群监控工具(如 Prometheus 或 Grafana)会不断推送节点不可用警报。
🔍 问题分析
让我们一步步拆解这个问题,看看到底是什么原因引发了 NodeNotReady
。
1️⃣ 常见原因
- 网络问题:节点无法与主控节点通信。
- 资源耗尽:节点上的 CPU、内存或磁盘资源耗尽。
- Kubelet 异常:Kubelet 服务停止或运行不正常。
- 磁盘问题:磁盘满了或者 inode 用尽。
- 容器运行时异常:如 Docker 或 containerd 崩溃。
- 证书过期:节点与集群的认证证书失效。
2️⃣ 排查步骤
🔧 从以下几个方面入手:
- 节点网络是否畅通:
ping <master-node-ip> curl -k https://<apiserver-ip>:6443/healthz
- 节点资源状况:
top df -h free -m
- 检查 Kubelet 日志:
journalctl -u kubelet -f
- 容器运行时状态:
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
- 调整节点资源限制:
增加 CPU 和内存限制。vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
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 设置警报。
📊 表格总结
问题原因 | 检查命令 | 解决方法 |
---|---|---|
网络问题 | ping 、curl | 重启网络、调整防火墙 |
资源耗尽 | top 、df -h 、free -m | 清理磁盘、优化资源配置 |
服务异常 | systemctl status | 重启 Kubelet 和 Docker |
证书过期 | kubeadm certs check | 更新证书、重启服务 |
🔭 未来趋势与总结
随着云原生技术的普及,Kubernetes 的自动化运维能力将不断增强。未来,我们可能会看到更多智能化的节点健康监测与自动修复工具。
👥 更多最新 AI 云原生资讯,欢迎点击文末加入猫头虎 AI 共创社群!
👉 更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击文末名片获取更多信息。我是猫头虎博主,期待与您的交流! 🦉💬
联系我与版权声明 📩
- 联系方式:
- 微信: Libin9iOak
- 公众号: 猫头虎技术团队
- 版权声明:
本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问猫头虎的博客首页。
点击✨⬇️下方名片
⬇️✨,加入猫头虎AI共创社群矩阵。一起探索科技的未来,共同成长。🚀