`
lantian_123
  • 浏览: 1368182 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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随即分配。

1
2
分享到:
评论

相关推荐

    Openstack Nova实现与Hypervisor对接.docx

    1. **Libvirt客户端**:用于接收来自OpenStack的请求,并将这些请求转化为Libvirt API调用。 2. **Libvirtd(Libvirt守护进程)**:接收来自客户端的请求,处理并执行相应的操作。对于那些可以直接完成的任务,...

    openstack-nova计算节点一键安装脚本_openstack-nova_openstack_

    总的来说,OpenStack-Nova计算节点的一键安装脚本为部署提供了便利,但理解其背后的工作原理和组件配置仍然是运维OpenStack云平台的关键。在实际使用中,应结合文档学习,不断优化和调整,以提高云平台的稳定性和...

    openstack-nova源代码

    "openstack-nova-folsom-2-348-g9468508.zip"这个压缩包文件很可能是Nova在Folsom版本的一个特定分支或修订版,9468508可能是Git仓库中的一个提交哈希值,用于追踪源代码的具体版本。 Nova项目采用Python语言编写,...

    openstack nova 部分原理

    总的来说,Nova作为OpenStack的计算服务,它的设计旨在通过一系列标准化的操作简化虚拟机的管理流程,使得在大规模部署和管理中,计算资源能够被有效地调度和利用,同时它也为云服务提供商提供了一个可扩展、可靠的...

    OpenStack云计算平台管理(nova-compute/network)三

    Nova-compute通过libvirt或其他 hypervisor接口与硬件交互,为虚拟机实例分配计算资源。而Neutron则通过插件机制连接到不同的物理网络设备,如交换机和路由器,提供网络服务。Neutron的API使得Nova和其他OpenStack...

    Libvirt 介绍

    在 OpenStack 环境中,Libvirt 是一个至关重要的组件,它为各种虚拟化技术(如 KVM、Xen、QEMU 和 LXC)提供了统一的接口,使得 OpenStack 能够与底层虚拟化技术进行交互。下面将详细讨论 Libvirt 在 Openstack 中的...

    OpenStack-train版安装手册

    OpenStack-train版安装手册,包含环境介绍、环境安装、安装Spice控制台、实例热迁移的libvirt、实例调整实例大小、负载均衡即服、务网络QoS等

    openstack安装包(一)

    声明:因为软件超过50M,所以分成了两部分,请搜索openstack安装包(二) 安装包二里面会有一键安装一键卸载的说明,敬请留意 openstack-rpm包信息: augeas-libs-1.0.0-5.el6_5.1.x86_64.rpm boost-program-options...

    基于python的openstack资源监控系统设计与实现.docx

    OpenStack 的主要组件包括 Nova(计算)、Swift(对象存储)、Cinder(块存储)、Neutron(网络)和 Keystone(身份认证)等。 二、OpenStack 监控模块的不足 OpenStack 监控模块是 OpenStack 中的一个重要组件,...

    nova, OpenStack计算机( Nova ).zip

    nova, OpenStack计算机( Nova ) 团队和知识库标签 NovaOpenStack Nova提供云计算 fabric 控制器,支持多种计算技术,包括: libvirt ( KVM,Xen,LXC等),Hyper-V,VMware,XenServer,OpenStack

    OpenStack.pdf

    OpenStack 配置方法:OpenStack 适配版本已经测试过的 OpenStack 版本为 K 版到 S 版,这里以 P 版为例,其他的版本按照对应的补丁适配。 首先,需要登录计算节点,将 Hygon_OpenStack_Pike.patch 文件拷贝到/usr/...

    centos7部署OpenStack云平台

    OpenStack Compute,也称为Nova,是OpenStack的核心组件,负责处理计算资源的生命周期,如启动、停止和管理虚拟机实例。以下是部署OpenStack云平台的关键知识点: 1. **OpenStack Compute (Nova)**: Nova是...

    OpenStack Kilo—CentOS安装指南 中文版

    ### OpenStack Kilo—CentOS安装指南中文版 #### 概述 《OpenStack Kilo—CentOS安装指南中文版》是一份详细介绍了如何在基于Red Hat Enterprise Linux 7、CentOS 7以及Fedora 20等操作系统上安装与配置OpenStack ...

    nova.tar.gz

    《OpenStack Nova 计算服务深度解析》 OpenStack Nova 是OpenStack云平台的核心组件之一,主要负责管理和调度计算资源,提供虚拟机实例的生命周期管理。"nova.tar.gz" 文件是一个压缩包,其中包含了OpenStack Nova...

    OpenStack开源云王者归来:云计算、虚拟化、Nova、Swift、Quantum与Hadoop[2014.8].zip

    第4篇介绍了如何利用OpenStack进行扩展开发,包括如何在OpenStack平台上搭建Hadoop,对Nova进行扩展,以及如何开发独立的OpenStack组件。 本书内容全面,实例众多,实践性强,讲解清晰,适合想要从事开源云OpenStack...

    Openstack部署手册

    需要配置计算驱动(如libvirt或KVM)、网络模型(FlatDHCP或VLAN)、Nova与数据库和消息队列(如RabbitMQ)的连接,以及与Keystone的集成。 七、dashboard配置 Horizon是OpenStack的Web界面,即dashboard。安装...

    open stack nova 源码

    OpenStack Nova是OpenStack云平台的核心组件之一,主要负责计算资源的管理,包括虚拟机的创建、调度、生命周期管理和扩展等。源码分析是深入理解OpenStack Nova工作原理的重要途径。下面将对OpenStack Nova的源码...

    OPENSTACK开源云王者归来:云计算、虚拟化、NOVA、SWIFT、QUANTUM与HADOOP

    《OpenStack开源云王者归来:云计算虚拟化Nova、Swift、Quantum与Hadoop》按照入门、剖析、扩展的讲授方式,由浅入深地介绍了开源云计算平台OpenStack(Grizzly版本)的整体框架、安装部署、源码剖析及扩展开发。...

Global site tag (gtag.js) - Google Analytics