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 BP、Cinder Spec 、Cinder 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
未完待续…
相关文章推荐
- UVa540 Team Queue (queue)
- darwin streaming server 媒体服务器发送本地自己的文件,使用quicktime pro标记-流
- request.sendRedirect(重定向)和request.getRequestDispatcher(请求转发)
- (转)EasyUI-datagrid-自动合并单元格
- longest consecutive sequence
- express 413 Request Entity Too Large解决办法
- leetcode 304. Range Sum Query 2D - Immutable
- IOS:FMDB使用databaseQueue实现数据库操作线程安全
- vim E437: terminal capability "cm" required
- Logging only once for UICollectionViewFlowLayout cache mismatched frame
- NSURLRequest各种缓存方式讲解
- iOS之UIScrollView实现无限滚动,思路与代码
- Qt中Ui名字空间以及setupUi函数的原理和实现
- android常用UI控件总结
- MySQL提示:The server quit without updating PID file问题的解决办法
- Java并发编程之2——同步工具类的使用(CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore)
- Android工作杂项总结(APN,3G,i2c,SystemUI等)
- LeetCode---Implement Queue Using Stacks、Implement Stack Using Queues解题分析
- UITableView-01初见
- Sequelize 事务大并发下造成的死锁问题。