【k8s医生】k8s集群故障排查 – 关于kubelet 的NotReady故障

本文介绍了k8s集群中kubelet出现NotReady状态的常见故障排查步骤,包括系统资源检查、服务状态确认,并提供了解决方案。在问题描述中,节点NotReady可能是由于服务异常或资源不足导致。通过systemctl命令可以启动并检查kubelet服务状态。在生产环境中,应对故障节点设置为不可调度,以避免问题扩大。同时,分析故障根源并启用kubelet开机自启以防止类似问题再次发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题场景:

提示:便于理解,本节只讲一例以kubelet服务停止导致NotReady故障

无论是模拟环境,还是生产环境;kubelet 的NotReady故障是最常见的问题之一,所以掌握其排查方法很重要,而且要学会灵活变通的应用。

若是遇到此类问题,主要从系统资源和服务两个方面排查,资源不足也会导致此类问题;服务异常停止等等。

还有,我遇到不是问题的问题。在新部署的k8s集群,出现NotReady,检查来检查去没有发现问题,什么原因?是虚机环境,集群之间通信慢,等它几分钟后,自动恢复了。尤其是新手,遇到问题学会冷静分析,不要找错方向,把原本好的配置,给改错,造成二次伤害


问题描述

提示:遇到问题,如果难以解决,我们先考虑,做点什么让问题不会扩大化,再寻求解决方案

巡检过程发现k8s-node02的节点为NotReady。
在这里插入图片描述


解决方案:

1、系统资源排查:free -h 返回信息,分析节点内存充足;df -h返回信息,分析节点硬盘空间充足。因此,排除系统资源不足,导致服务进程停止,引起与集群失联。

服务排查:根据systemctl status kubel

### 本地 k8s 集群故障排查解决方案 #### 1. kubelet NotReady 故障分析 在新部署的 Kubernetes (k8s) 集群中,如果节点状态显示为 `NotReady`,通常可能是由于网络延迟或其他临时性问题引起的。这种情况下,建议等待几分钟观察是否能够自动恢复[^1]。对于虚拟机环境中的集群,网络通信可能较慢,因此需要耐心等待。 然而,如果长时间未能恢复正常,则需进一步检查以下方面: - **Node 节点健康状况**: 使用命令 `kubectl get nodes` 查看节点的状态。 - **Pod 健康状况**: 执行 `kubectl get pods --all-namespaces` 检查是否有异常 Pod。 - **日志查看**: 运行 `journalctl -u kubelet -f` 或者 `docker logs <container-id>` 来获取更多关于 kubelet容器运行的日志信息。 #### 2. etcd 数据一致性问题 Kubernetes 集群依赖于 etcd 存储其核心数据结构。一旦 master 节点上的 etcd 数据发生损坏,可能导致整个集群不可访问。此时可以尝试以下方法解决问题[^4]: - 移除受损的 etcd 数据目录并重新启动服务,让 etcd 自动从其他正常节点同步最新数据。 - 如果多副本 etcd 集群可用,可以通过调整 quorum 参数强制恢复一致性。 #### 3. 容器初始化失败处理 当某些 Pods 处于 `Init:Error` 状态时,表明它们在初始化阶遇到了错误。这通常是由于 InitContainer 中的任务执行失败所致[^2]。具体解决办法如下: - 利用 `kubectl describe pod <pod-name>` 获取详细的事件记录和原因说明。 - 修改相应的资源配置文件以修正逻辑缺陷或者参数设置不当之处后再重新提交到集群当中。 #### 4. 综合考虑其他潜在因素 除了上述提到的情况外,还应该注意是否存在资源不足(如 CPU/Memory),存储挂载失败等问题影响到了系统的稳定性。针对这些问题可采取相应措施优化硬件分配策略或是改善持久卷(PV)绑定流程等等[^3]。 ```bash # 示例脚本用于诊断基本问题 #!/bin/bash echo "Checking node status..." kubectl get nodes echo "" echo "Checking all namespaces' pods statuses..." kubectl get pods --all-namespaces echo "" echo "Viewing detailed information of a specific pod" read -p "Enter the name of problematic pod:" POD_NAME kubectl describe pod $POD_NAME echo "" echo "Monitoring Kubelet service log output:" journalctl -u kubelet -f & ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术职场教练

您的是我坚持原创免费作品的不懈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值