KVM¶
KVM 被配置为 Compute 的默认 hypervisor。
注意
本文档包含关于 hypervisor 选择的几个部分。如果您是线性阅读本文档,请不要在安装 nova-compute 之前加载 KVM 模块。 nova-compute 服务依赖于 qemu-kvm,它会安装 /lib/udev/rules.d/45-qemu-kvm.rules,该文件为 /dev/kvm 设备节点设置正确的权限。
KVM hypervisor 支持以下虚拟机镜像格式
Raw
QEMU Copy-on-write (QCOW2)
QED Qemu Enhanced Disk
VMware 虚拟机磁盘格式 (vmdk)
本节描述了如何在您的系统上启用 KVM。有关更多信息,请参阅以下特定于发行版的文档
配置¶
要显式启用 KVM,请将以下配置选项添加到 /etc/nova/nova.conf 文件中
[DEFAULT]
compute_driver = libvirt.LibvirtDriver
[libvirt]
virt_type = kvm
启用 KVM¶
以下部分概述了如何在不同的架构和平台上启用基于 KVM 的硬件虚拟化。要执行这些步骤,您必须以 root 用户身份登录。
对于基于 x86 的系统¶
要确定 CPU 是否存在
svm或vmxCPU 扩展,请运行此命令# grep -E 'svm|vmx' /proc/cpuinfo
如果 CPU 能够进行硬件虚拟化,此命令将生成输出。即使显示了输出,您仍然可能需要在系统 BIOS 中启用虚拟化才能获得完全支持。
如果未显示任何输出,请查阅您的系统文档,以确保您的 CPU 和主板支持硬件虚拟化。验证系统 BIOS 中是否启用了任何相关的硬件虚拟化选项。
每个制造商的 BIOS 都不相同。如果您必须在 BIOS 中启用虚拟化,请查找包含
virtualization、VT、VMX或SVM等字样的选项。要列出已加载的内核模块并验证是否已加载
kvm模块,请运行此命令# lsmod | grep kvm
如果输出包括
kvm_intel或kvm_amd,则已加载kvm硬件虚拟化模块,并且您的内核满足 OpenStack Compute 的模块要求。如果输出未显示已加载
kvm模块,请运行此命令以加载它# modprobe -a kvm
运行适用于您的 CPU 的命令。对于 Intel,运行此命令
# modprobe -a kvm-intel
对于 AMD,运行此命令
# modprobe -a kvm-amd
由于 KVM 安装可能会更改用户组 membership,您可能需要重新登录才能使更改生效。
如果内核模块未自动加载,请使用这些子部分中列出的过程。
如果检查表明所需的硬件虚拟化支持或内核模块已禁用或不可用,则必须在系统上启用此支持,或找到具有此支持的系统。
注意
某些系统要求您在系统 BIOS 中启用 VT 支持。如果您认为您的处理器支持硬件加速,但之前的命令未生成输出,请重新启动机器,进入系统 BIOS,并启用 VT 选项。
如果不支持 KVM 加速,请配置 Compute 以使用其他 hypervisor,例如 QEMU。
这些过程可帮助您加载 Intel 和 AMD 基于处理器的内核模块(如果它们在 KVM 安装期间未自动加载)。
基于 Intel 的处理器
如果您的 compute 主机是基于 Intel 的,请以 root 身份运行以下命令以加载内核模块
# modprobe kvm
# modprobe kvm-intel
将这些行添加到 /etc/modules 文件中,以便在重新启动时加载这些模块
kvm
kvm-intel
基于 AMD 的处理器
如果您的 compute 主机是基于 AMD 的,请以 root 身份运行以下命令以加载内核模块
# modprobe kvm
# modprobe kvm-amd
将这些行添加到 /etc/modules 文件中,以便在重新启动时加载这些模块
kvm
kvm-amd
对于基于 POWER 的系统¶
KVM 作为 hypervisor 在 POWER 系统 PowerNV 平台上受支持。
要确定您的 POWER 平台是否支持基于 KVM 的虚拟化,请运行以下命令
# cat /proc/cpuinfo | grep PowerNV
如果之前的命令生成以下输出,则 CPU 支持基于 KVM 的虚拟化。
platform: PowerNV如果未显示任何输出,则您的 POWER 平台不支持基于 KVM 的硬件虚拟化。
要列出已加载的内核模块并验证是否已加载
kvm模块,请运行以下命令# lsmod | grep kvm
如果输出包括
kvm_hv,则已加载kvm硬件虚拟化模块,并且您的内核满足 OpenStack Compute 的模块要求。如果输出未显示已加载
kvm模块,请运行以下命令以加载它# modprobe -a kvm
对于 PowerNV 平台,运行以下命令
# modprobe -a kvm-hv
由于 KVM 安装可能会更改用户组 membership,您可能需要重新登录才能使更改生效。
对于基于 AArch64 的系统¶
待办事项
填充此部分。
配置 Compute 后端存储¶
后端存储是用于提供扩展操作系统镜像和任何临时存储的存储。在虚拟机内部,这通常表示为两个虚拟硬盘(例如,/dev/vda 和 /dev/vdb 分别)。但是,在 OpenStack 内部,这可以从以下方法之一派生:lvm、qcow、rbd 或 flat,通过在 compute 节点上的 nova.conf 中的 libvirt.images_type 选项选择。
注意
选项 raw 是可接受的,但已被弃用,推荐使用 flat。Flat 后端使用原始或 QCOW2 存储。它从不使用后端存储,因此在使用 QCOW2 时会复制镜像而不是创建叠加。默认情况下,它创建原始文件,但在从 QCOW2 创建磁盘时,如果配置中未设置 force_raw_images,则会使用 QCOW2。
QCOW 是默认的后端存储。它使用写时复制理念来延迟存储分配,直到实际需要时。这意味着镜像后端所需的空间在实际磁盘上可能比虚拟机操作系统中可见的空间少得多。
Flat 创建没有任何文件格式的文件,有效地创建具有普通二进制文件的文件,这些文件通常会出现在实际磁盘上。这可以提高性能,但意味着虚拟磁盘的整个大小保留在物理磁盘上。
还可以使用本地 LVM 卷。将 libvirt.images_volume_group 配置选项设置为您创建的 LVM 组的名称。
直接从 Ceph 下载镜像¶
当 Glance 镜像服务设置为 Ceph 后端,并且 Nova 正在使用本地临时存储 ([libvirt]/images_type!=rbd) 时,可以配置 Nova 将镜像直接下载到本地 compute 镜像缓存中。
使用以下配置,镜像将使用 RBD 导出命令下载,而不是使用 Glance HTTP API。在某些情况下,特别是对于非常大的镜像,这可能会更快,并可以提高实例的启动时间。
在 Glance API 节点上的 glance-api.conf 中
[DEFAULT]
show_image_direct_url=true
在 Nova compute 节点上的 nova.conf 中
[glance]
enable_rbd_download=true
rbd_user=glance
rbd_pool=images
rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_connect_timeout=5
嵌套访客支持¶
您可以选择启用对嵌套访客的支持——也就是说,允许您的 Nova 实例本身运行使用 KVM 进行硬件加速的虚拟机。为此,需要在您的 KVM 内核模块上设置一个模块参数,以及相应的 nova.conf 设置。
主机配置¶
要启用嵌套 KVM 访客,您的 compute 节点必须使用 nested=1 加载 kvm_intel 或 kvm_amd 模块。您可以永久启用 nested 参数,方法是在名为 /etc/modprobe.d/kvm.conf 的文件中填充以下内容
options kvm_intel nested=1
options kvm_amd nested=1
可能需要重新启动才能使更改生效。
Nova 配置¶
要支持嵌套访客,您必须将 libvirt.cpu_mode 配置设置为以下选项之一
- 主机直通 (
host-passthrough) 在此模式下,一旦加载了带有嵌套支持的 KVM 内核模块,就会自动启用嵌套虚拟化。
[libvirt] cpu_mode = host-passthrough
但是,请考虑 host passthrough 模式对 compute 功能的其他影响。
- 主机模型 (
host-model) 在此模式下,一旦加载了带有嵌套支持的 KVM 内核模块,就会自动启用嵌套虚拟化,如果匹配的 CPU 模型默认向访客公开
vmx功能标志(您可以使用 compute 节点上的virsh capabilities进行验证)。如果您的 CPU 模型未传递vmx标志,可以使用libvirt.cpu_model_extra_flags强制它[libvirt] cpu_mode = host-model cpu_model_extra_flags = vmx
同样,请考虑适用于 host model 模式的其他影响。
- 自定义 (
custom) 在自定义模式下,适用与主机模型模式相同的考虑因素,但您可能还会希望确保 libvirt 将
vmx和pcid标志传递给其访客[libvirt] cpu_mode = custom cpu_models = IvyBridge cpu_model_extra_flags = vmx,pcid
有关 CPU 模型的信息,请参阅 CPU 模型。
限制¶
在启用嵌套访客时,您应该了解并告知您的用户,目前嵌套 KVM 虚拟化固有的一些限制。最重要的是,当正在运行嵌套访客时,访客将
无法完成实时迁移;
无法从挂起状态恢复。
有关这些限制的更多信息,请参阅 KVM 文档。
KVM 性能调整¶
内核模块 VHostNet 提高了网络性能。要加载内核模块,请以 root 身份运行以下命令
# modprobe vhost_net
故障排除¶
尝试启动新的虚拟机实例失败,状态为 ERROR,并且以下错误出现在 /var/log/nova/nova-compute.log 文件中
libvirtError: internal error no supported architecture for os type 'hvm'
此消息表明未加载 KVM 内核模块。
如果您在安装后没有重新启动就无法启动 VM,则权限可能未设置正确。如果先加载 KVM 模块再安装 nova-compute,则可能会发生这种情况。要检查组是否设置为 kvm,请运行
# ls -l /dev/kvm
如果未设置为 kvm,请运行
# udevadm trigger