k8s的某个节点 NotReady解决方法

本文介绍了解决Kubernetes中Node节点状态显示为NotReady的方法。通过检查kubelet状态并确认其正常运行后,发现实际问题是由于时间不同步造成的。文中详细记录了通过安装和配置ntp服务来同步时间的具体步骤。

文章目录

故障现象:
k8s中的某个node节点状态查看显示为NotReady状态

解决方法:
首先查看kubelet的状态,发下运行是正常的,最后排查发下是时间同步的问题,对服务器进行时间同步,操作如下

yum install -y ntpd					#安装ntp服务
rpm -qa | grep ntp					#查看服务是否安装
systemctl start ntpdate.service		#启动服务
systemctl status ntpd				#查看是否运行成功
ntpdate -d 192.168.8.13				#同步需要指定的服务器节点
date "+%Y-%m-%d %H:%M:%S"			#两边同时输出时间查看是否同步成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<think>嗯,用户这次的问题很明确,就是要查找排查k8s node节点not ready问题的方法。从用户提供的多个站内引用来看,用户已经收集了一些资料,但需要系统化的排查方案。 用户可能是个运维工程师或者k8s管理员,正在处理生产环境的节点故障。这种情况下用户最需要的是清晰可操作的步骤,而不是理论说明。用户引用的资料里提到了命令操作和日志分析,说明用户需要的是实战指南。 让我梳理下引用中的关键点: - 引用1给出了最基础的kubectl命令,这是入门操作 - 引用2强调了节点状态对集群的重要性,点出了问题的严重性 - 引用3展示了具体的日志分析案例,这个很有参考价值 - 引用4提供了docker重装的完整方案,说明底层服务也是排查重点 结合这些资料和我自己的知识,应该构建一个分层排查体系: 第一层先确认节点状态和基础资源,这是最快速的检查 第二层聚焦kubelet服务,因为所有引用都提到它是关键 第三层深入网络和存储,这些是常见故障点 最后才考虑重装方案,毕竟引用4的操作影响较大 特别注意引用3提到的日志关键词"Kubelet stopped posting node status",这类特征信息对用户实际排障特别有用,要放入核心步骤里。引用4的docker配置方案虽然完整,但应该作为备选方案建议。 用户应该会喜欢带具体命令的代码块,比如kubectl describe这种,引用1和4都有示范。但要把命令整理得更易读,像引用4那样分步骤编号可能更好。 对了,补充方案里要强调文档记录的重要性,这是很多工程师会忽略的。引用2提到"影响整个应用的可用性",说明用户需要评估影响范围,这点在补充建议里要体现。 </think>以下是排查 Kubernetes Node 节点 `NotReady` 问题的系统化方法,结合引用内容与实际运维经验整理: --- ### **一、基础检查** 1. **查看节点状态** ```bash kubectl get nodes ``` 确认具体 `NotReady` 的节点名及状态持续时间。 2. **检查节点事件与详细信息** ```bash kubectl describe node <node_name> ``` - 重点关注 `Events` 部分(如 kubelet 停止上报状态、网络插件异常等)[^1][^3] - 检查 `Conditions` 中的错误信息(如 `MemoryPressure`/`DiskPressure`) --- ### **二、关键组件排查** #### **1. Kubelet 服务状态** - **检查 kubelet 是否运行** ```bash systemctl status kubelet # 查看服务状态 journalctl -u kubelet -n 100 # 查看最近100条日志 ``` - 典型日志线索:`Kubelet stopped posting node status`(kubelet 停止上报状态)[^3] - **验证证书是否过期** ```bash tail -f /var/log/messages | grep -i "certificate" ``` 证书过期会导致 kubelet 与 API Server 通信失败。 #### **2. 容器运行时(如 Docker)** - **检查运行时状态** ```bash systemctl status docker docker info | grep -i "errors" ``` - 若异常尝试重启: ```bash systemctl restart docker ``` - **调整 cgroup 驱动(与 kubelet 一致)** 编辑 `/etc/docker/daemon.json`: ```json { "exec-opts": ["native.cgroupdriver=systemd"], # 必须与 kubelet 一致 "registry-mirrors": ["https://registry.docker-cn.com"] } ``` 重启服务: ```bash systemctl daemon-reload && systemctl restart docker ``` > 注:驱动不一致会导致 kubelet 无法管理容器 [^4]。 --- ### **三、网络与存储排查** 1. **网络插件状态** ```bash kubectl get pods -n kube-system | grep -E 'flannel|calico|weave' ``` - 确保网络插件 Pod 运行正常。 - 检查节点防火墙是否开放端口(如 6443、10250)[^2]。 2. **存储空间与内存** ```bash df -h /var/lib/docker # 检查 Docker 存储目录 free -m # 内存是否耗尽 ``` `DiskPressure` 或 `MemoryPressure` 会触发节点 `NotReady`。 --- ### **四、高级诊断** 1. **检查 kubelet 配置** ```bash cat /var/lib/kubelet/config.yaml | grep -i "cgroup" ``` 确保 `cgroupDriver` 与 Docker 一致(通常为 `systemd`)。 2. **节点资源预留不足** 若节点运行过多 Pod,需调整 `kubelet` 资源预留: ```bash vim /etc/kubernetes/kubelet.conf ``` 添加参数(示例): ``` --system-reserved=cpu=500m,memory=1Gi ``` --- ### **五、补充方案** - **重装 Docker 或 containerd** 参考引用 [^4] 的安装步骤,注意版本兼容性。 - **重置节点并重新加入集群** ```bash kubeadm reset rm -rf /etc/kubernetes/ && rm -rf ~/.kube/ kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash> ``` --- ### **六、总结排查流程** ```mermaid graph TD A[节点状态 NotReady] --> B[kubectl describe node] B --> C{检查 Events 日志} C -->|kubelet 异常| D[检查 kubelet 服务] C -->|网络问题| E[排查网络插件] C -->|存储/内存压力| F[清理资源] D -->|服务停止| G[重启 kubelet] D -->|证书过期| H[更新证书] F -->|空间不足| I[扩展磁盘或清理镜像] ``` > 关键点: > - **80% 的问题** 可通过 `kubectl describe node` 和 `journalctl -u kubelet` 定位 [^1][^3] > - **驱动不一致** 是常见隐形错误(Docker vs kubelet 的 cgroup driver)[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

头发莫的了呀

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值