上一篇 下一篇 分享链接 返回 返回顶部

K8s节点资源不足调度故障排查

发布人: 发布时间:1 天前 阅读量:4

一、问题现象

在Kubernetes集群中,Pod可能长时间处于Pending状态,或调度失败并提示节点资源不足(如Insufficient cpu、Insufficient memory)。部分节点即使拥有空闲资源,调度器仍无法将Pod分配到目标节点,影响业务部署效率。

二、常见原因

  • 节点真实资源已满:节点上运行Pod的总资源请求(Requests)超过节点容量。
  • 资源预留被占用:系统组件(kubelet、操作系统守护进程)预留资源未正确配置或超量分配。
  • 节点污点与容忍度不匹配:节点设置了污点(Taints),但Pod未设置对应容忍度(Tolerations)。
  • 调度策略限制:节点亲和性、Pod反亲和性或拓扑约束导致调度器跳过该节点。
  • 节点状态异常:节点处于NotReady、OutOfDisk等不可调度状态。

三、排查步骤

1. 检查节点状态与条件

使用命令kubectl get nodes查看节点是否Ready,再用kubectl describe node 查看Conditions部分,重点检查MemoryPressure、DiskPressure、PIDPressure、Ready状态是否正常。

2. 查看Pod事件与调度日志

执行kubectl describe pod ,在Events中寻找调度失败原因。常见提示包括“0/1 nodes are available: 1 Insufficient cpu”、“0/1 nodes have match node selector”等。

3. 分析节点资源分配情况

使用kubectl top node查看当前资源使用量,或通过kubectl describe node查看Allocated resources(Requests + Limits)与Capacity的对比。注意区分Requests和Limits:Pod的Requests保证资源下限,Limits是上限。

4. 检查节点污点与Pod容忍度

运行kubectl describe node | grep -A10 Taints查看节点污点,再确认目标Pod是否包含对应容忍度。若无容忍度,调度器将忽略该节点。

5. 验证调度策略配置

检查Pod的亲和性、反亲和性以及拓扑分散约束是否过于严格。可临时创建一个无特定调度策略的测试Pod,观察能否调度到目标节点以隔离问题。

四、常见解决方案

  • 扩容节点或清理冗余Pod:删除不必要的工作负载,或增加节点资源以降低资源压力。
  • 调整资源请求与限制:优化Pod的Requests值,避免过度预留;开启集群自动伸缩(Cluster Autoscaler)按需扩缩节点。
  • 管理污点与容忍度:为专用节点添加污点,并为关键Pod添加对应容忍度,确保调度优先级。
  • 修复节点状态:若节点因磁盘满、内存压力等原因异常,需清理宿主机资源或重启kubelet。
  • 检查调度器配置:确认调度器插件是否启用(如NodeResourcesFit、TaintToleration),并检查策略配置文件(如schedulerPolicy)是否正确。

通过系统性地排查上述方面,通常可以准确定位K8s节点资源不足引起的调度故障,并采取针对性措施恢复集群调度正常。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com