当前位置: 首页 > article >正文

k8s 排查集群中故障节点

在 Kubernetes 集群中,故障节点可能导致 Pod 无法正常运行或资源分配异常。以下是排查集群中故障节点的常用方法:

1. 使用 kubectl get nodes 查看节点状态

首先检查所有节点的健康状态,kubectl get nodes 命令会显示集群中所有节点的状态。

kubectl get nodes

输出示例:

NAME          STATUS     ROLES    AGE     VERSION
node1         Ready      <role>   10d     v1.24.0
node2         NotReady   <role>   10d     v1.24.0
  • STATUS 列:节点状态,包括 ReadyNotReadyUnknown 等。如果节点处于 NotReadyUnknown 状态,可能存在网络、资源或节点本身的问题。

2. 查看节点详细信息和事件

kubectl describe node <node-name> 命令可用于查看故障节点的详细信息和事件日志。

kubectl describe node <node-name>

在输出中查找 ConditionsEvents 部分,观察是否存在以下常见问题:

  • OutOfDisk:磁盘空间不足。
  • MemoryPressure:内存压力过大,节点内存不足。
  • DiskPressure:磁盘 I/O 压力过高。
  • PIDPressure:进程数过多,节点已超出系统允许的最大 PID。
  • NetworkUnavailable:节点网络不可用,可能是网络插件或连接问题。

3. 检查节点上的关键服务状态

Kubernetes 节点需要关键服务保持正常运行。使用 SSH 登录到节点,检查以下关键服务的状态:

# 检查 kubelet 服务
systemctl status kubelet

# 检查容器运行时(如 Docker 或 containerd)
systemctl status docker  # 若使用 Docker
systemctl status containerd  # 若使用 containerd

确保 kubelet 和容器运行时服务都在运行。如果服务出现故障,可以尝试重启:

sudo systemctl restart kubelet
sudo systemctl restart docker  # 或 containerd

4. 查看节点的资源使用情况

使用 kubectl top nodes 查看每个节点的 CPU 和内存使用情况,以检查资源是否耗尽。

kubectl top nodes

如果某些节点的资源使用率极高(接近 100%),则可能会导致 Pod 调度失败或节点变为 NotReady 状态。

5. 查看网络插件日志

如果 kubectl describe node 显示 NetworkUnavailable 或节点连接中断,可能与网络插件有关(如 Calico、Flannel 等)。检查网络插件的 Pod 日志:

kubectl -n kube-system get pods | grep calico  # 查找网络插件 Pod
kubectl -n kube-system logs <network-plugin-pod-name>  # 查看网络插件日志

6. 检查节点上的 kubelet 日志

kubelet 是节点管理服务,其日志可以帮助定位问题。在节点上使用以下命令查看 kubelet 的日志:

journalctl -u kubelet -f

日志中查看是否有错误或告警信息,例如认证失败、资源不可用或节点连接问题。

7. 检查网络连接

网络连接问题可能会导致节点状态异常。可以在节点上使用 pingcurl 命令检查节点与主节点(如 apiserver)的网络连通性。

ping <master-node-ip>
curl -k https://<master-node-ip>:6443/healthz  # 检查 apiserver 健康状态

8. 检查节点的容器日志

如果某些节点上的 Pod 异常,可以查看其容器日志,定位 Pod 运行异常的原因:

kubectl logs <pod-name> -n <namespace> -c <container-name>

9. 重新标记节点(若节点恢复正常)

如果节点恢复正常,但仍显示 NotReady,可以先将节点标记为不可调度(cordon)再恢复:

kubectl cordon <node-name>    # 暂时标记节点为不可调度
kubectl uncordon <node-name>  # 恢复节点为可调度

总结

通过上述方法可以排查出节点故障原因,比如资源耗尽、服务故障、网络中断等。根据具体问题采取相应的措施,如重启服务、增加资源、调整网络配置等,从而恢复节点正常状态。


http://www.kler.cn/a/376193.html

相关文章:

  • git pull遇到一个问题
  • C++设计模式结构型模式———桥接模式
  • 二分法:高效查找的数学利器
  • 【golang/navmesh】使用recast navigation进行寻路
  • 【分布式技术】分布式事务深入理解
  • 「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
  • Jenkins面试整理-如何在 Jenkins 中使用插件?
  • 2000字搞懂Java中Lambda+方法引用简化代码(开发代码量秒缩十倍)
  • 鸿蒙ArkTS中的image组件
  • 代码随想录算法训练营第四十一天 | 01背包问题(二维),01背包问题(一维),416.分割等和子集
  • 分布式和微服务系统区别
  • SpringBoot助力大型商场应急预案自动化
  • C语言日记 2024年11月2日
  • 利士策分享,锚定未来:稳健规划人生
  • git reset 删除错误提交
  • 【Python爬虫实战】网络爬虫完整指南:HTTP/HTTPS协议与爬虫安全实践
  • 博物馆3D数字化的优势有哪些?
  • ArcGIS Pro SDK (二十)流图层
  • 【Android】初始路由框架及ARouter原理
  • 基于Matlab GUI的说话人识别测试平台
  • 一般无人机和FPV无人机的区别
  • 使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二) ubuntu的下载安装
  • 【算法】奇数在偶数后、反转字符串中的单词
  • 仿真工具Modelsim和QuestaSim有什么区别?
  • 摄像机实时接入分析平台LiteAIServer视频智能分析软件诊断噪声检测
  • 利用Claude制作web小游戏(一):俄罗斯方块