K8s节点状态 NotReady排查

k8s节点由 Ready变成 NotReady

izbp12ghzy6koox6fqt0suz   NotReady   slave                97d   v1.23.3
izbp12ghzy6koox6fqt0svz   Ready      control-plane,master   98d   v1.23.3

节点进入 NotReady 状态可能是由于多种原因引起的,尤其是在资源过量分配(overcommitment)时,常见的原因包括节点资源(CPU、内存)不足、关键组件失败、磁盘压力等。

1. 检查节点资源使用情况

首先,检查节点的资源使用情况,以确定是否由于资源过度使用导致节点不可用。

kubectl describe node izbp12ghzy6koox6fqt0suz

查看输出中是否有以下几种资源压力:

  • MemoryPressure: 表示节点内存不足。
  • DiskPressure: 表示节点磁盘使用率过高。
  • PIDPressure: 表示节点上的进程数达到系统限制。
  • Ready: 表示节点是否就绪。

如果存在 MemoryPressureDiskPressure,则说明节点资源紧张,需要释放或增加资源。

在这里插入图片描述
可以看到节点内存、磁盘等信息状态都是未知的,初步怀疑节点状态已经dead

往下看到资源resource超出
在这里插入图片描述
初步怀疑在某一刻调度时,由于资源超出额度,导致节点状态异常

2. 排查 Kubelet 及系统服务

检查节点上 kubelet 服务和其他系统服务的状态。kubelet 是 Kubernetes 的关键组件,它负责报告节点状态和管理 Pod。

登录到问题节点 (izbp12ghzy6koox6fqt0suz) 并检查 kubelet 状态:

sudo systemctl status kubelet

在这里插入图片描述
如果 kubelet 没有运行,尝试重启:

sudo systemctl restart kubelet

在这里插入图片描述
重新查看节点状态,发现正常了

[root@iZbp12ghzy6koox6fqt0svZ ~]# kubectl get nodes
NAME                      STATUS   ROLES                  AGE   VERSION
izbp12ghzy6koox6fqt0suz   Ready    slave                 97d   v1.23.3
izbp12ghzy6koox6fqt0svz   Ready    control-plane,master   98d   v1.23.3

还可以查看 kubelet 日志,找出可能导致问题的具体错误信息:

sudo journalctl -u kubelet -f

3. 释放资源

如果节点资源不足,可以考虑以下几种方法来释放资源:

  • 驱逐低优先级的 Pod: 手动删除一些不太重要的 Pod,以释放资源
kubectl delete pod <pod_name> -n <namespace>
  • 调整资源限制: 通过降低 Pod 的资源限制(limits)来减少节点资源的占用。

4. 添加或扩展节点

如果你发现节点的资源实际已经无法满足工作负载,可以考虑:

  • 扩展集群: 添加更多的节点来分担工作负载。
  • 扩展节点资源: 例如在云环境中,增加节点的 CPU 或内存配置

5. 检查集群组件状态

确保控制平面的关键组件(如 API Server、Controller Manager、Scheduler)正常运行,因为这些组件的问题也可能导致节点状态异常。

kubectl get pods -n kube-system

在这里插入图片描述
检查是否有任何集群组件的 Pod 处于 CrashLoopBackOff 或其他异常状态。

6. 检查节点的磁盘空间

磁盘空间不足也可能导致节点不可用。你可以使用以下命令来检查节点的磁盘使用情况:

df -h

如果磁盘空间不足,删除不必要的文件或日志以释放空间。

7. 删除并重新加入节点

如果上述方法都未能解决问题,你可以考虑将节点从集群中移除并重新加入。注意,这个操作会中断该节点上的工作负载。

从集群中移除节点:

kubectl drain izbp12ghzy6koox6fqt0suz --ignore-daemonsets --delete-local-data
kubectl delete node izbp12ghzy6koox6fqt0suz

重新加入节点(在节点上运行):

sudo kubeadm reset
sudo kubeadm join <control-plane-ip>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

8. 检查网络和 DNS 配置

有时网络配置问题也可能导致节点 NotReady。检查节点的网络连接,确保它能正常访问控制平面和其他节点。也可以检查 DNS 设置,确保 Kubernetes 的网络插件(如 FlannelCalico)正常运行。

kubectl get pods -n kube-system

确保网络插件相关的 Pod 都处于 Running 状态。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当遇到k8snode节点notready问题时,可以按照以下步骤进行排查和解决: 1. 检查节点状态:使用命令 `kubectl get nodes` 检查节点状态,确保节点处于 `Ready` 状态。如果节点状态为 `NotReady`,则表示存在问题。 2. 检查节点事件:使用命令 `kubectl describe node <node-name>` 查看节点的事件,以了解是否有任何故障或异常情况。 3. 检查kubelet日志:使用命令 `journalctl -u kubelet -n 100` 查看kubelet的日志,以查找任何与节点notready相关的错误或警告信息。 4. 检查容器运行时日志:如果使用的是Docker作为容器运行时,可以使用命令 `journalctl -u docker -n 100` 查看Docker的日志。如果使用的是其他容器运行时,可以查找相应的日志文件。 5. 检查网络配置:确保节点能够与其他节点和控制平面正常通信。检查网络配置是否正确,并确保防火墙规则没有阻止必要的流量。 6. 检查资源使用情况:检查节点的资源使用情况,例如CPU、内存、存储等。确保节点上的资源充足以正常运行Pod。 7. 检查配置文件:检查节点的配置文件,例如kubelet配置文件、节点标签等。确保配置文件没有错误,并且节点的配置与集群的要求一致。 8. 重启kubelet服务:尝试重启kubelet服务,可以使用命令 `sudo systemctl restart kubelet`。重启后,观察节点状态是否变为Ready。 9. 联系硬件供应商:如果怀疑节点故障,例如硬件故障或操作系统崩溃,可以联系硬件供应商寻求支持。 10. 检查其他组件:如果以上步骤都没有解决问题,可以检查其他与节点相关的组件,例如网络插件、存储插件等。 在排查问题时,可以结合使用多个命令和工具,以获取更全面的信息和诊断结果。根据具体的情况,可能需要进一步查找相关文档或寻求社区的帮助来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值