OpenStack 实例创建失败的 7 类根因(含日志定位)
OpenStack 经典面试题"nova boot 失败怎么排查",但生产环境的失败往往更狡猾,因为可能是任何子系统的错。本文是我处理过的 7 类典型根因,按发生频率排序。
0. 万能起手式
openstack server show <uuid>
openstack server event list <uuid>
openstack server event show <uuid> <req-id>
event show 里的 traceback 是定位关键,一定先看这个再去翻日志。
如果 event 信息不够,按子系统翻:
# nova-compute(最常用)
tail -200 /var/log/nova/nova-compute.log | grep -i "ERROR\|TRACE"
# nova-scheduler(调度失败 NoValidHost)
tail -200 /var/log/nova/nova-scheduler.log
# neutron-server(网络绑定失败)
tail -200 /var/log/neutron/neutron-server.log
1. NoValidHost — 调度找不到节点
最常见。可能原因:
- 资源不够:
openstack hypervisor list --long看 CPU/RAM 剩余 - 超分被打满:
cpu_allocation_ratio/ram_allocation_ratio已经被吃满 - filter 把节点排除了:
AvailabilityZoneFilter/AggregateInstanceExtraSpecsFilter经常是元凶 - PCI 设备/SR-IOV 不匹配
排查:scheduler 日志开 DEBUG,看 Filter X returned 0 hosts。
2. PortBindingFailed — 端口绑定不到节点
nova-compute.log: PortBindingFailed: Binding failed for port xxx
90% 是 OVS agent / Linuxbridge agent 在目标节点上挂了,或者 bridge_mappings 没配对:
openstack network agent list
# 重点看 alive=True / state=UP
另一个坑:vnic_type=direct(SR-IOV)但目标节点没 sriov-agent。
3. 镜像问题
- 镜像格式不对:
qcow2但 backend 是 LVM,需要转换 - 镜像 size 没设:从 Glance 拉下来还要校验,size 不对会 hang
- HTTPS 自签证书:nova-compute 拉镜像时 SSL 校验失败
排查:glance image-show <uuid> 看 checksum 和 status=active。
4. Cinder 挂卷超时
带 volume boot 的 instance 经常这里出事:
Block Device Mapping is Invalid
- iSCSI/RBD 挂载失败:去
cinder-volume.log看 - 卷状态
error或creating卡住:openstack volume show看attachments - 多路径配置缺失:
/etc/multipath.conf没配
5. DHCP / metadata 拿不到
虚机起来了,但进系统后 IP 拿不到、SSH key 没注入:
- DHCP agent 死了:
neutron-dhcp-agent状态 - metadata-agent 路径不通:检查
neutron-ns-metadata-proxy进程 - config_drive 没启用:对老镜像或者 cloud-init 没装的,建议强制
config_drive=True
6. Libvirt / Hypervisor 层
罕见但很烦:
- KVM 模块没加载(
modprobe kvm_intel/kvm_amd) - CPU model 不兼容(迁移过来的虚机,目标节点 CPU flag 不够)
qemu-kvm版本和 libvirt 版本不匹配
定位看 /var/log/libvirt/qemu/<instance>.log,最直接。
7. quota 满了
QuotaError: Quota exceeded for cores
简单粗暴:
openstack quota show <project>
openstack quota set --cores 200 <project>
但注意 quota 是 per-project 的,admin 看的是自己 project 的 quota,不是用户的。
我自己的 checklist
新环境出问题,按这个顺序看,95% 五分钟内定位:
server event show抓 traceback- 看是不是调度问题(NoValidHost)→ scheduler 日志
- 看 hypervisor 资源水位 →
hypervisor list --long - 看 neutron agent 是不是都活着
- 看 nova-compute 日志最近 1 分钟的 ERROR
- 看 libvirt qemu 日志(最后兜底)
教训一句话:OpenStack 出问题 80% 在 neutron 和 scheduler,先排这两个能省 80% 的时间。