虚拟机创建失败,提示“No valid host was found”如何系统性排查?
2026-08-11 09:19:15 # 云服务

No valid host was found 是 OpenStack 中最经典的创建实例失败报错之一。它来自 Nova Scheduler——调度器遍历所有计算节点后,发现没有任何一个节点能同时满足虚拟机的资源与约束需求,于是直接拒绝创建。

为什么会出现

调度器的工作是:通过 Placement 服务收集各计算节点的资源,依次用一系列 Filter(过滤器)Weigher(权重) 筛选打分,最后挑出最优节点。只要被任一 Filter 拒绝、且没有节点能通过全部 Filter,就会报 No valid host

系统性排查(三层)

1. 计算层:确认资源与节点状态

1
2
openstack compute service list          # 看 nova-compute 是否 up
nova service-list # 等价老命令

重点关注:计算节点 State 是否为 upStatus 是否为 enabled;节点的 vCPUsRAMDisk 剩余是否足够(注意超配比 overcommit);节点是否被误设为 disabled

2. 网络层:Neutron 代理健康

1
openstack network agent list

若某计算节点的 neutron-openvswitch-agent 或 L2 代理 down,调度会因”该节点无法提供网络”而被过滤掉。

3. 存储层:Cinder 后端可用

若实例需要挂载 Cinder 卷或从卷启动,而 Cinder 后端异常,同样会无可用宿主。

进阶:看调度日志

真正的”定罪证据”在 nova-scheduler 日志

1
tail -f /var/log/nova/nova-scheduler.log

日志会逐条打印每个节点被哪个 Filter 拒绝(如 ComputeFilterAggregateInstanceExtraSpecsFilterDiskFilter 等),直接告诉你卡在哪条规则。

配额(Quota)

别忘了项目配额:

1
openstack quota show <project>

instances / cores / ram 已用尽,新实例也会被拒。

小结

No valid host 是”调度器找不到合格节点”的统称。按 计算 → 网络 → 存储 → 配额 → 调度日志 的顺序系统性排查,通常几分钟内就能定位。