OpenStack Rocky适配Neoverse-N1架构硬件的集成可行性及问题排查咨询
首先可以明确告诉你:在Ubuntu 18.04.6 + OpenStack Rocky集群上集成Neoverse-N1(aarch64)硬件是完全可行的,只不过因为你的硬件规格较新,而Rocky版本搭配的QEMU(2.11.1)、libvirt(4.0.0)版本偏老,默认配置没适配这类新架构的细节,所以需要针对性调整配置来覆盖默认行为。下面针对你遇到的具体问题逐一给出解决方案:
一、解决libvirtError: XML error: memballoon unsupported with address type 'none'错误
这个问题是因为OpenStack默认生成的libvirt XML中,memballoon设备的地址类型与你指定的virt机器类型不兼容,你可以二选一来解决:
- 方案1:指定memballoon为virtio类型
在nova.conf的[libvirt]段添加以下配置:
这会让OpenStack生成适配virt机器的virtio类型memballoon设备,匹配你QEMU支持的memballoon_model = virtiovirtio-balloon-pci设备。 - 方案2:禁用memballoon(如果不需要内存动态调整功能)
如果你的业务不需要虚拟机内存动态伸缩,也可以直接禁用memballoon:enable_memballoon = false
二、解决qemu-system-aarch64: Unsupported NIC model: virtio-net/lan9118错误
从你提供的QEMU设备列表能看到,你的QEMU支持virtio-net-pci(带PCI总线的virtio网卡),但不支持纯设备类型的virtio-net;而lan9118是老版本aarch64默认网卡模型,你的硬件/QEMU组合也不兼容。解决方法是强制OpenStack使用virtio-net-pci作为默认网卡模型:
在nova.conf的[libvirt]段添加:
virtio_net_model = virtio-net-pci
配置生效后,OpenStack生成的虚拟机XML会使用virtio-net-pci网卡,匹配你QEMU支持的设备类型。
三、现有nova.conf配置的补充优化
你当前的nova.conf配置方向是对的:
[libvirt] virt_type = kvm cpu_mode = host-passthrough hw_machine_type = virt,accel=kvm,gic-version=3
再补充上面提到的memballoon和网卡模型配置后,基本就能适配Neoverse-N1硬件了。另外建议你确认计算节点的内核模块状态:
执行命令检查KVM模块是否加载:
lsmod | grep kvm
确保kvm_arm64模块已正常加载,这是KVM虚拟化生效的前提。
四、验证思路
你已经能通过QEMU命令行正常创建虚拟机,说明底层硬件、QEMU本身是支持Neoverse-N1虚拟化的,问题核心就是OpenStack默认生成的libvirt XML不符合老版本QEMU的aarch64要求,通过上述配置修改覆盖默认XML生成逻辑后,应该就能解决所有验证错误。
备注:内容来源于stack exchange,提问作者jimbob

