您的位置:首页 > 产品设计 > UI/UE

OpenStack nova M Blueprints 分析

2016-05-13 14:07 851 查看

OpenStack nova M Blueprints 分析

OpenStack nova M Blueprints 分析
m1

m2

m1

https://blueprints.launchpad.net/nova/+spec/nova-cors

背景:Same Origin Policy是Web安全的核心,在OpenStack中,各个服务通常使用不同的端口,当访问时,需要经过Horizon维护的proxy进行转发。Horizon维护的这部分代码随着组件增多、应用的使用,维护工作量巨大。W3C提出了CORS,OpenStack的相关项目需要增加CORS的支持。

实现:修改/etc/nova/api-paste.ini增加cors中间件支持。

备注:引入参考OpenStack CrossProject Spec,Oslo_Middleware Docs,OpenStack Cloud Admin Guide

Medium

https://blueprints.launchpad.net/nova/+spec/print-table-archived-rows

背景:nova-manage db archive_deleted_rows命令返回nova数据库表中删除行的数目,依赖于–max_rows,但没有显示详细的信息,即每个表有多少删除的行数。

实现:

nova-manage db archive_deleted_rows只有sqlalchemy的api使用,修改archive_deleted_rows_for_table方法为私有方法;

增加命令选项–verbose的解析,如果使用此选项,则显示每张表的删除行数。

Medium

https://blueprints.launchpad.net/nova/+spec/vmware-expand-opaque-support

背景:在Liberty版本新增了插件openstack/vmware-nsx(NSXv3),此功能需要一个全局的integration桥,并确保此opaque网络连接到此桥。

实现:

判断满足的VC版本号5.5;

根据CONF.vmware.integration_bridge的值实现2个工作流程;

只适用于VIF_TYPE_OVS。

备注:在vSphere V5.5增加了opaque网络,此网络由vSphere外的控制面进行管理,host和虚拟机也连接到此网络上。

Medium

https://blueprints.launchpad.net/nova/+spec/deprecate-service-management-in-nova-manage

背景:novaclient已存在service-disable、service-enable、service-list和host-describe命令,nova-manage存在相同功能的命令,此bp标识相关命令为弃用,在N版本去除。

实现:在cmd/manage.py中定义标识弃用的装饰函数,当用户调用相关命令,提示用户此命令将要弃用。并将ServiceCommands类里的方法用弃用装饰函数装饰。

Low

https://blueprints.launchpad.net/nova/+spec/no-more-soft-delete

背景:“不在软删除任何东西”是在YVR峰会上得到广泛认同的观点,数据库中软删除带来很大的管理工作,同时对查询的性能也有很大的影响,因此从NovaBase的继承中去掉SoftDeleteMixin。

实现:

在NovaBase的继承中去掉SoftDeleteMixin;

原来从NovaBase类继承的子类中增加models.SoftDeleteMixin。

Low

https://blueprints.launchpad.net/nova/+spec/ploop-snapshot-support

背景:virt_type为parallels的情形下,libvirt的image后端还未支持ploop镜像的快照抽取特性。

实现:libvirt utils中的extract_snapshot/find_disk/get_disk_type方法增加对ploop镜像快照抽取的内容。

备注:

libvirt支持多个Hypervisor的并发,因此需要对镜像执行快照抽取的工作;

ploop在loop的基础上增加了动态调整、快照、被封的功能;

loop设备允许用户以一个普通磁盘文件虚拟一个块设备,以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。

Low

https://blueprints.launchpad.net/nova/+spec/vmware-rescue-image

背景:bp allow-image-to-be-specified-during-rescue允许用户在虚拟机救援时指定image,但vmware的救援流程还未进行相应的更改。

实现:修改vmware的救援流程,不从instance对象中获取image_ref,直接使用image_meta.id。另外增加获取image的流程。

Low

m2

https://blueprints.launchpad.net/nova/+spec/service-version-behavior

背景:在升级过程中,云operator会遇到nova代码的多个版本,比如新版本的api、conductor和老版本的compute共存,会存在消息不兼容问题。同样当老版本compute的计算节点因故障好久没上报自己的信息,后来又继续工作,也会面临版本不一致的问题。

实现:

数据库API增加get_minimum_version方法;

当CONF.upgrade_levels.compute设置为auto时,自动选择compute RPC版本;

如果服务在启动时发现版本号比最小版本号还小,则启动失败;

当收到SIGHUP信号时触发最小版本号的重新检查。

High

https://blueprints.launchpad.net/nova/+spec/request-spec-object-mitaka

背景:Scheduler中的select_destinations()方法使用request_spec参数,此参数是嵌套的字典,不易维护,在L版本已经用RequestSpec类的对象代替,此bp继续完成剩余的工作。

实现:

修改所有的filters使用RequestSpec对象代替request_spec嵌套字典;

修改Scheduler的RPC API接受RequestSpec对象;

修改Conductor直接合成RequestSpec对象;

增加developer文档指导。

备注:Scheduler从nova分离出去做的一些调整。

High

https://blueprints.launchpad.net/nova/+spec/add-os-win-library

背景:OpenStack中的多个组件(nova, neutron, cinder, ceilometer等等)均使用Hyper-V的功能,存在代码重复的问题,此bp对这部分代码进行重构,新建os-win库。

实现:

在requirements.txt中增加os-win;

将代码中的”nova.virt.hyperv.vmutils.HyperVException”替换为”os_win.HyperVException”;

将”nova.virt.hyperv.utilsfactory”的imports替换为”os_win.utilsfactory”;

删除utils模块及其单元测试;

在global-requirements.txt增加os-win.

备注:openstack/requirements为解决OpenStack各组件requirement不一致导致包重复安装或不兼容的的问题,这个问题多出现在一台机器安装多个组件的场景,此项目定义global-requirements.txt。

Medium

https://blueprints.launchpad.net/nova/+spec/persist-request-spec

背景:当虚拟机launch后,RequestSpec对象可能会用于后续的resize、migrate中,因此需要在数据库进行持久化存储。

实现:

在api、cell数据库中新增request_specs新表;

对RequestSpec对象增加get_by_instance_uuid(), create(), save()方法。

Medium

https://blueprints.launchpad.net/nova/+spec/soft-affinity-for-server-group

背景:如果使用亲和策略时,用户希望虚拟机尽可能的部署在相同的主机上,但当资源不够时,也希望尽量部署在尽可能少的主机上,而不是失败。

实现:

新增2个配置项soft亲和和互斥的权重;

新增2个weigher类:软亲和和互斥,使用权重进行计算,互斥为-1;

扩展server group的API支持软亲和和互斥,增加相应的微版本号;

更新FilterScheduler支持软亲和互斥。

备注:减小亲和和互斥的硬性限制,变得比较柔和,更人性化。

Low

https://blueprints.launchpad.net/nova/+spec/get-valid-server-state

背景:当nova-compute服务失败时,虚拟机的状态不会更新,但当用户获取虚拟机状态时不能看到真正的失败信息。此bp实现在获取虚拟机信息时增加host的状态。

实现:

定义host_status有4个值:DOWN/UP/UNKNOWN/MAINTENANCE;

修改server的GET /v2.1/{tenant_id}/servers/{server_id} and /v2.1/{tenant_id}/servers/detail的API,增加host_status的展示;

增加server object和service object的数据库关联。

备注:同步修改python-novaclient。

Low

https://blueprints.launchpad.net/nova/+spec/add-project-id-and-user-id

背景:管理员能够查看所有项目的server group,但显示结果中没有项目的信息,辨认困难,此bp增加项目ID和用户ID

实现:

新增API微版本号2.13,当调用高于2.13的API时才会显示project_id和user_id;

修改server group的GET和POST的API,增加高于2.13时显示project_id和user_id的逻辑;

修改相应接口文档;

单元测试和功能测试。

备注:同步修改python-novaclient。

Low

https://blueprints.launchpad.net/nova/+spec/cinder-backend-report-discard

背景:nova在attach卷时不知道Cinder后端是否支持discard/unmap/trim功能,此BP使能此功能。

实现:

libvirt的驱动检查从volume的连接信息中是否支持discard功能;

如果支持discard功能,则写入到configuration文件中;

virtio-blk不支持,增加LOG记录。

备注:相关cinder:Cinder BPCinder SpecCinder Patch

Low

https://blueprints.launchpad.net/nova/+spec/boot-from-uefi

背景:UEFI代替传统BIOS是个未来趋势,很多的OS厂商(如微软)支持UEFI启动,但OpenStack的libvirt驱动还未支持。

实现:

增加image的metadata”hw_firmware_type”的解析流程;

libvirt驱动的config和driver中增加对UEFI的支持代码;

备注:Open Virtual Machine Firmware(OVMF)是用于虚拟机上的UEFI固件,支持x86和ARM。此bp依赖:libvirt版本>=1.2.9, ovmf动态库

Low

https://blueprints.launchpad.net/nova/+spec/remove-shared-storage-flag-in-evacuate-api

背景:virt驱动能够检测虚拟机是否使用共享存储,因此在evacuate时指定onSharedStorage意义不大,为简化管理员的工作,此bp去掉此标志。

实现:

在evacuate API增加微版本号2.14,当高于此版本号时,不传入onSharedStorage标志;

高于2.14版本时,不返回adminPass。

备注:adminPass的使用分2种场景:如果使用共享存储,adminPass不变,如果不使用共享存储,则由nova产生新adminPass或由client传入。

Low

未完待续…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: