libvirt为OpenStack Nova Folsom版带来的变化

 

libvirt为OpenStack Nova Folsom版带来的变化 

此文译自Daniel P. Berrangé,作者是libvirt核心开发者,小弟不才,并未完全理解其全文,如有错误之处望指正,方便你我他。

XML 配置

第一个变化就是Nova生成libvirt XML配置文件方式的改变。之前的Nova版本使用Cheetah模板引擎生成XML配置文件。这样做的问题是需要很多的信息作为参数传递给模板,Nova在内部为libvirt来宾(guest)采用一种特殊配置格式,进而用模板翻译成合适的来宾配置,但是所生成的结果代码却很难维护且不易理解,原因是XML的逻辑结构被分散在模板文件和libvirt驱动代码中,缺乏一致性结构。因此NOva的第一个大改变就是libvirt驱动(driver)在Folsom中引入一套形式化的Python配置对象集合表示libvirt XML的配置。libvirt驱动代码现在可以用必要的参数直接填充这些配置对象,然后简单地序列化对象到XML中,这样Cheetah就完全可以被淘汰掉,因而代码结构也变得明晰起来,这里有一个更详细的wiki页面。

CPU模型配置

移除Cheetah 模板最主要的负面影响就是管理员部署Nova不能方便地改变libvirt来宾的XML,个人认为这是件好事,因为这种随意的改变意味着Nova的功能的推进将受到阻碍。但是很多人并不同意这个观点,显然他们就是用libvirt XML配置指定来宾 CPU 模型。如果在来宾配置中没有明确要求指定CPU模型,KVM 将用一个通用的、最普通标准模型,可以适用于任何地方的通用模型。可以预见的是,这种通用CPU模型没法为来宾提供最佳性能。例如:如果你的主机一个新的CPU内嵌有AES加密指令,但是这种模型并不能充分利用此特性,因此这就是第二个改变,在Nova 的libvirt驱动中引入了显示支持CPU模型的配置。这里涉及到两个新的Nova配置参数,libvirt_cpu_mode 可以在”host-model“ 和”host-passthrough“以及”custom“之间选择。如果模型设置为“custom",那么可选参数libvirt_cpu_model就可以用于指定自定义的CPU的名字,详细介绍在这里

选择CPU模型的功能被合并进来后,同样默认配置也会发生改变,所以如果Nova选用KVM作为hypervisor的话,那么它默认将使用”host-model" CPU 模型。这将导致来宾CPU模型几乎是主机CPU模型的一个精确副本,为来宾系统提供最大性能。然后这种内嵌的KVM会给选择带来一点点不爽,理由在libvirt和KVM的结合问题上,因为内嵌KVM,使用“host-model”会失败。因此使用内嵌kvm都需要设置libvirt_cpu_model="none"作为应对措施。如果你在裸金属设备上使用KVM,任何事情看起来都很美好,这当然是在正常情况下生产部署。

时钟协调策略

同样回到性能的主题,libvirt Nova 驱动为KVM来宾更新设置时间协调策略。在x86平台上虚拟机有多种可用时钟,包括PIT、RTC、PM-Timer、HPET。全虚拟化平台中可靠的时钟是有待解决的最大困难之一,KVM也不例外,问题都归结于当hypervisor在正确的时间里不能注入时钟中断时该干什么?因为不同来宾正在运行。不过有一些策略是可用的,尽可能快的插入错失的标记,合并所有错失标记为1然后尽可能快地交付。临时性的注入缺失标记比平常更高的速度去追赶,或者简单地彻底取消错失标记。证明windows7 对时钟特别敏感,对于错失标记默认的KVM策略常常导致死机。 老式Linux来宾机会有严重的时间漂移。oVirt 项目组的研究验证发现了一组最佳的策略,使得绝大多数来宾处在比较满意的状态。libvirt Nova驱动进行了更新,当使用的是KVM时,该驱动用PIT和RTC为时钟协调制定了明确的策略。这将使得一切和时间相关的任务更可靠。

Libvirt 认证

libvirtd进程可以用不同的认证scheme配置。直接使用PolicyKit认证客户端,因此在Fedora/RHEL/EPE中Nova包(package)包括一个polickit配置文件,该文件授予Nova连接libvirt。管理员可能决定使用不同的配置scheme,例如SASL,如果选择的scheme需要用户名和密码,那就没有办法为Nova的libvirt驱动提供这些认证信任。幸运的是,libvirt客户端可以在本地文件中查找信任关系。不幸的是Nova连接libvirt的方法不能工作。因此Nova libvirt 驱动使用修复的openAuth()允许默认的信任查寻逻辑。现在在Nova和libvirt之间获取认证成为可能:
# augtool -s set /files/etc/libvirt/libvirtd.conf/auth_unix_rw sasl
Saved 1 file(s)
# saslpasswd -a libvirt nova
Password: XYZ
Again (for verification): XYZ
# su – nova -s /bin/sh
$ mkdir -p $HOME/.config/libvirt
$ cat > $HOME/.config/libvirt/auth.conf <<EOF
[credentials-nova]
authname=nova
password=XYZ
[auth-libvirt-localhost]
credentials=nova
EOF

其他变化

显然我不是一个人在为Folsom中的libvirt工作,其他很多的贡献者做了同样贡献了不少,Leander Beernaert 用libvirt驱动提供了一种“nova诊断”(nova diagnostics)命令的实现,用来显示虚拟机cpu,内存,磁盘和网络接口使用统计。Pádraig Brady 改善了虚拟机迁移的性能,通过在主机之间发送qcow2镜像替代原来直接转换成raw文件格式,然后再发送,之后再转换回qcow2的方法,.取代需要传输10G raw 数据。现在发送数据实际上使用不到100M。在他的测试用例中,迁移时间从7分钟到减少到30秒,我相信这是每个人都愿意听到的,Pádraig  同样优化文件代码注入,以至于只要挂载客户端镜像一次性注入所有数据,取代分开注入。Boris Filippov 贡献了支持用LVM 卷(volume作为VM磁盘,来替换qcow2文件。然后
Ben Swartzlander 贡献了支持NFS文件作为虚拟设备卷的后端存储。Vish 为磁盘 更新了libvirt生成xml配置文件。包括为每个磁盘设置“serial"属性,基于nova 卷ID。这样允许客户系统管理依赖标识磁盘在客户机中。使用  /dev/disk/by-id/virtio-<volume-id>路径,因为/dev/vdXX设备号码被kernel随即分配。

你可能感兴趣的:(openstack)