OpenStack nova M Blueprints 分析
Posted Eric_Xiett
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenStack nova M Blueprints 分析相关的知识,希望对你有一定的参考价值。
OpenStack nova M Blueprints 分析
mitaka-1
- 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
mitaka-2
- 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
mitaka-3
- https://blueprints.launchpad.net/nova/+spec/resource-classes
- 背景:resources中不同资源的展示不统一,如numa使用json,metrics使用字典等,需要统一结构,便于后续扩展和Scheduler分离出去。
- 实现:大部分的工作在bp resource-provider实现,此bp仅实现了ResourceClass类。
- High
- https://blueprints.launchpad.net/nova/+spec/complete-todo-in-api-concept-doc
- 背景:API文档在bp(https://review.openstack.org/#/c/226253/)中重构了,遗留很多未做的工作,此bp完成这些TODOS
- High
- https://blueprints.launchpad.net/nova/+spec/block-live-migrate-with-attached-volumes
- 背景:libvirt 1.2.17新增接口实现在热迁移过程中指定哪些块设备迁移(拷贝)到目的host,这样就避免了挂载volume的虚拟机将数据重新写入自己的场景。
- 实现:
- 当libvirt版本号>=1.2.17时,热迁移接口中增加’migrate_disks’: device_names;
- 使用本地存储实现iso9660格式的config
drive时,增加libvirt版本号>=1.2.17时执行热迁移可能成功
- High
- https://blueprints.launchpad.net/nova/+spec/pause-vm-during-live-migration
- 背景:当虚拟机有工作负载时,即存在写入内存数据等情形时,虚拟机在热迁移时会特别慢;另外计算节点快出现故障时需要热迁移执行迅速。上述两种场景热迁移完成比虚拟机down时长更重要,此bp实现对热迁移过程中的虚拟机进行暂停。
- 实现:
- 新增DB API,根据migration id和instance uuid获取migration信息;
- policy中增加migration:force_complete
- 新增虚拟机热迁移强制完成的API,具体包括版本号、Controller类、API字段类型便于检验等;
- 新增RPC API,包括消息的发送和接受、消息版本号等;
- libvirt驱动中实现force complete的流程代码,具体就是调用pause接口暂停虚拟机。
- High
- https://blueprints.launchpad.net/nova/+spec/compute-node-inventory
- 背景:云内的资源包括计算节点上的资源包括CPU、内存、本地硬盘和PCI设备等,另外的资源是由外部提供的,比如Ceph或NFS共享等,但都统计到计算节点的资源,统一保存在计算节点对应的数据库记录中,这样在跟踪使用情况时不方便,很容易造成误用。
- 实现:
- 新增DB表:resource_providers、inventories和allocations;
- 新增对象:ResourceProvider、InventoryItem和AllocationItem
- compute nodes中新增字段uuid。
- High
- https://blueprints.launchpad.net/nova/+spec/abort-live-migration
- 背景:热迁移耗时长或者误操作,允许云操作员执行中止热迁移流程。包括热迁移失败、迁移时虚拟机性能变差和耗时较长等场景。
- 实现:
- 新增API微版本号2.24,当调用高于2.24的API时才支持中止已进行中的热迁移;
- 新增中止热迁移的API( DELETE /servers//migrations/),增加高于2.24时才支持中止操作的逻辑;
- 修改相应接口文档;
- 单元测试和功能测试;
- policy.json中增加权限信息;
- virt driver增加中止的流程,增加虚接口,增加libvirt接口。
- Medium
- https://blueprints.launchpad.net/nova/+spec/service-status-notification
- 背景:nova服务状态可通过disable或force_down API进行改变,但外部感知不到,难以形成合适的云提供者和终端用户之间的服务等级。
- 实现:当nova服务状态改变时,nova会发送service.update通知,此通知包括versioned负荷。
- Medium
- https://blueprints.launchpad.net/nova/+spec/oslo-for-mitaka
- 背景:在oslo messaging 2.9.0,RPC和通知模块解耦,使用不同的传输机制,nova代码需要进行相应的修改。
- 实现:新增NOTIFICATION_TRANSPORT记录通知的transport。
- Medium
- https://blueprints.launchpad.net/nova/+spec/centralize-config-options
- 背景:nova拥有大概800个配置项,目前没有很好的帮助文档来表明配置项的影响、使用及关联的nova服务。
- 实现:此bp提供一个集中管理的方案。
- 创建nova/conf文件夹,按nova.conf中section定义模块;
- 将nova代码中配置项的使用都挪到1中对应的模块中,包括配置项说明、注册和列表展示;
- 丰富配置项的帮助内容描述,包括简短描述、详细描述、哪个nova服务使用、配置的值范围和相关的配置项等
- Medium
- https://blueprints.launchpad.net/nova/+spec/check-destination-on-migrations
- 背景:live-migrate和evacuate命令中指定host时,conductor直接调用host的RPC接口,不调用Scheduler进行检查,这种做法会破坏调度的规则,比如用户统计的计算资源和Scheduler维护的计算资源之间的差异、亲和属性的限制等等。
- 实现:
- 在conductor的方法(live-migrate/evacuate/unshelve)调用select_destinations()之前先读取RequestSpec;
- 把RequestSpec追加到requested_destination;
- 修改live-migrate和evacuate的方法,如果走调度,则调用scheduler_client.select_destinations();
- 修改FilterScheduler._schedule(),使之能够解析requested_destination中的RequestSpec;
- 修改API中对force选项的支持;
- 如果具有FORCED_REBUILD或FORCED_MIGRATE的flag,则走调度。
- Medium
- https://blueprints.launchpad.net/nova/+spec/objectify-live-migrate-data
- 背景:热迁移过程中使用的数据是没有版本控制,且无组织的,此bp实现对象化。
- 实现:
- 新增文件nova/objects/migrate_date.py, 新增对象LiveMigrateData/XenapiLiveMigrateData;
- 在nova/compute/manager.py,对于dest_check_data, migrate_data, and pre_live_migration_result执行从object转换为dict,对老版本的兼容;
- libvirt驱动增加对LiveMigrateData的支持;
- 修改xenapi支持XenapiLiveMigrateData对象;
- 增加RPC的版本号,支持发送和接受migrate_data对象
- Medium
- https://blueprints.launchpad.net/nova/+spec/service-catalog-tng
- 背景:不同云服务提供商对服务目录中的很多内容不统一,给用户和开发者的理解造成很大的困惑。另外在配置文件中使用URL来定位服务,应该使用服务目录自发现,提供用户体验。
- 实现:nova的API中将必选的project id修改为可选。
- 备注:此bp依赖在温哥华峰会的提议https://review.openstack.org/#/c/181393/,且部分实现。
- Medium
- https://blueprints.launchpad.net/nova/+spec/making-live-migration-api-friendly
- 背景:用户在进行虚拟机热迁移时需要知晓虚拟机迁移的source和dest主机是否使用相同的共享存储,当配置host为None和block_migration为True时,调度到使用共享存储的dest主机上,热迁移失败。另外disk_over_commit会要求用户知道Hypervisor的一些细节,用户体验很差。
- 实现:
- libvirt和xenapi驱动中支持block_migration的自动检测,通过分析是否使用共享存储判断;
- 如果disk_over_commit设置为None,不做检查;
- API中把block_migration、host变成可选,去掉disk_over_commit
- Medium
- https://blueprints.launchpad.net/nova/+spec/disk-allocation-ratio-to-rt
- 背景:allocation-ratio从scheduler服务挪到compute服务,从全局变成局部有效。CPU和内存在L版本已经修改完成,此bp实现disk-allocation-ratios的修改。
- 实现:
- resources_tracker.py文件中增加disk_allocation_ratio配置项的解析;
- compute_nodes表中增加disk_allocation_ratio字段;
- DiskFilter修改为使用compute_nodes提供的disk_allocation_ratio;
- 更新compute_nodes时使用disk_allocation_ratio对硬盘使用情况进行修改
- Medium
- https://blueprints.launchpad.net/nova/+spec/split-network-plane-for-live-migration
- 背景:当使用QEMU/KVM驱动,对虚拟机进行热迁移时.热迁移使用的网络和RPC的是同一个,会对网络产生很大的影响,占用带宽。
- 实现:
- default组新增配置项live_migration_inbound_addr;
- 修改代码中pre_migration_data使用此配置项代替libvirt.live_migration_uri。
- Medium
- https://blueprints.launchpad.net/nova/+spec/versioned-notification-api
- 背景:nova对通知API中的格式使用比较混乱,包括priority、event_type、publisher_id和payload,priority有info和error,但仅当monkey_patch_modules设置时(默认为None)有效,event_type和publisher_id多种格式,且有些字段两者还重复,payload更是格式多样。
- 实现:
- 创建必要的基础设施,包括基类、示例、基本测试和文档;
- 创建service.update的versioned通知;
- 新增配置项notification_format,可能的值为versioned、unversioned、both
- Medium
- https://blueprints.launchpad.net/nova/+spec/live-migration-progress-report
- 背景:虚拟机如果承载很多的业务,迁移耗时很长。在这段时间,操作人员并不清楚迁移的详细信息,如有多少数据已被传输,还有多少遗留数据等,这样的话,操作人员很难决定下步该执行哪些动作。
- 实现:
- 数据表migrations增加进度详细信息,包括memory_total,memory_processed, memory_remaining,disk_total,disk_processed,disk_remaining;
- 扩展/servers/id/migrations/id接口,返回进度详细信息;
- libvirt的_live_migration_monitor()中更新进度详细信息到数据库;
- client新增两个命令server-migration-list和server-migration-show。
- Medium
- https://blueprints.launchpad.net/nova/+spec/return-request-id-to-caller
- 背景:REST API 都返回 X-Openstack-Request-Id,但此属性并没有返给python client的调用者。
- 实现:
- 新建RequestIdMixin类,增加从header中读取X-Openstack-Request-Id到缓存中;
- 修改相应的resource类,比如server、agent、flavors等,原来没有返回值的接口增加返回值。
- 备注:bp(http://specs.openstack.org/openstack/openstack-specs/specs/return-request-id.html)影响到nova,需要同步修改。
- Medium
- https://blueprints.launchpad.net/nova/+spec/ironic-networks-support
- 背景:当前ironic使用flat网络共享控制面和租户网络,多租户环境、控制面安全和使用高级网络配置如bonding等多因素的考虑,需要隔离开网络。
- 实现:
- 新增VNIC类型baremetal;
- virt驱动新增方法,当使用flat网络时按原来实现,使用分离网络时,把binding:host_id设置为NULL。
- 备注:部分内容未完成:ironic驱动中处理port groups的部分,在Newton版本实现。
- Low
- https://blueprints.launchpad.net/nova/+spec/add-cinder-disco-connector-for-libvirt
- 背景:libvirt支持 cinder DISCO驱动。
- 实现:
- 新增libvirt下volume的disco驱动文件,实现类的get_config()/connect_volume()/disconnect_volume()方法;
- libvirt_volume_drivers中增加disco的支持。
- Low
- https://blueprints.launchpad.net/nova/+spec/functional-tests-for-nova
- 背景:棘手bug的修复需要功能测试。
- 实现:
- 原来的测试用例挪到unit/;
- 固定RPC设置,定义类RPCFixture(),目前只有少数的测试用例会用到,多数使用mock;
- 新增RealPolicyFixture(),使用真实的policy文件;
- 修改flavor的测试用例,非admin用户操作flavor失败。
- Low
- https://blueprints.launchpad.net/nova/+spec/neutron-ovs-bridge-name
- 背景:OVS桥的名字只能从nova.conf中获取,此bp实现名字指定的方式。
- 实现:如果bridge名未指定,则使用nova.conf中配置的。
- 备注:支持neutron的vlan-aware-vms的spec,每个port归属不同的桥。
- Low
- https://blueprints.launchpad.net/nova/+spec/volume-ops-when-shelved
- 背景:目前虚拟机暂停和停机的情况支持volume的attach和detach操作,但shelve状态的不支持,用户感觉很奇怪。
- 实现:
- 在volume挂载和解挂的API支持shelved和shelved_offload的状态的虚拟机;
- shelved_offload状态下的volume挂载和解挂仅处理nova和cinder的数据库一致,因为这种状态下的虚拟机资源都释放了。
- Low
- https://blueprints.launchpad.net/nova/+spec/user-settable-server-description
- 背景:目前创建、重建虚拟机时,description硬编码为虚拟机的display名字,用户不能设置。
- 实现:REST API中增加description及其参数检查流程,对应微版本号v2.19。
- Low
- https://blueprints.launchpad.net/nova/+spec/nova-python3-mitaka
- 背景:nova支持python3.4
- Low
- https://blueprints.launchpad.net/nova/+spec/libvirt-vif-vhostuser-ovs-lb-fp
- 背景:为支持Fast path技术,扩展libvirt的vhost-user的支持力度,使之支持ovs-fp和lb-fp驱动的plug和unplug。
- 实现:
- 新增fp的创建和删除接口;
- 实现libvirt的vhost-user对ovs和fp的plug、unplug接口。
- 备注:在网络设备里面区分不同的路径是一个很自然的选择,因为网络设备的首要任务是转发网络包,不同的网络包,在设备里面的处理路径不同。fast path就是那些可以依据已有状态转发的路径,在这些路径上,网关,二层地址等都已经准备好了,不需要缓存数据包,而是可以直接转发。slow path是那些需要额外信息的包,比如查找路由,解析MAC地址等。Fast path可加速IP路由、ovs桥接等功能。
- Low
- https://blueprints.launchpad.net/nova/+spec/mitaka-objects
- 背景:L版本bp(Image API中获取的数据以字典形式存放,转化为ImageMeta对象)的后续工作。
- 实现:
- ironic驱动中去掉stats Json格式的解析,使用object;
- libvirt、HyperV、ironic、vmware、xen、驱动中去掉supported_instances Json格式的解析,使用object;
- Instance对象新增image_meta的只读属性,修改nova compute manager/virt等使用image_meta;
- security_group_rule中去掉NovaObjectDictCompat父类;
- 新增Console和ConsolePool对象,代替原来的字典。待workflow。
- 备注:不止Image相关信息。
- Low
- https://blueprints.launchpad.net/nova/+spec/neutron-hostname-dns
- 背景:用户希望通过虚拟机的名字在DNS系统中查询自己的虚拟机。
- 实现:修改port的dns_name为虚拟机的hostname。
- Low
- https://blueprints.launchpad.net/nova/+spec/libvirt-hardware-policy-from-libosinfo
- 背景:Guest OS因操作系统的不同需要的硬件信息也不同,比如Linux使用virtio获取硬盘和网络的最佳性能,而对于windows也无效。还有clock的区别,linux使用UTS,而windows使用localtime。目前使用glance的image meta来指定,但用户可能需要记忆很长的硬件信息,这些硬件信息比较底层,用户易用性很差。
- 实现:
- 新增osinfo模块,实现从libosinfo数据库中获取os信息,对外暴漏disk和net模型;
- 新增fake libosinfo模块,修改相应测试用例;
- 修改libvirt的vif和disk模块,从libosinfo中获取相关硬件信息
- Low
- https://blueprints.launchpad.net/nova/+spec/libvirt-real-time
- 背景:虚拟机可以绑定CPU,但host的许多内核任务仍然会抢占这些CPU,影响性能。
- 实现:
- 增强libvirt配置文件的cputune配置以支持调度优先级;
- 解析flavor的特殊设定hw:cpu_realtime,如果使能,则在libvirt配置文件的配置项中增加调度策略相关信息(策略、优先级);
- CPU的拓扑中根据flavor的hw:cpu_realtime_mask和image的hw_cpu_realtime_mask设置拓扑,即哪些CPU不使用realtime。
- 备注:QEMU使用全局互斥变量导致较长的延时。此BP改善最差延时时长,平均值还是比较大。调度策略有SCHED_OTHER/SCHED_FIFO/SCHED_RR.
- Low
- https://blueprints.launchpad.net/nova/+spec/libvirt-aio-mode
- 背景:image有raw, qcow2等格式,block device有ceph, iSCSI, fibre channel等后端,为提升I/O性能,需要用户对AIO的模式可进行配置,目前默认使用thread模式。
- 实现:
- 修改预分配的raw、qcow2和LVM not sparse镜像的I/O模式为native;
- 修改后端为iSCSI、Fibre Channel和NFS的volume的I/O模式为native。
- ps: 代码中直接写死,不知后续是否改为可配置。
- 备注:AIO(Asynchronous IO)的thread模式是Glibc实现的,用户态,用多线程同步来模拟异步IO,native模式是内核的异步通知,内核态。
- Low
- https://blueprints.launchpad.net/nova/+spec/os-instance-actions-read-deleted-instances
- 背景:os-instance-actions API需读取删除的虚拟机的信息,用作审计。
- 实现:新增微版本号v2.21,os-instance-actions API读取删除虚拟机的信息,设置read_deleted为yes。
- Low
- https://blueprints.launchpad.net/nova/+spec/nova-support-image-signing
- 背景:目前镜像使用MD5进行hash,防止镜像被恶意修改。但没有响应的认证机制,抵抗恶意的镜像等攻击。安全风险主要来自中间人攻击和不可信的Glance。
- 实现:
- 新增签名utils模块,支持PSS/ECC/DSA;
- nova/image/glance.py中增加验签的流程,根据签名key的类型选择合适的验签方法。
- 在image_meta对象新增版本号,支持验签的属性img_signature、img_signature_hash_method、img_signature_certificate_uuid、img_signature_key_type
- Low
- https://blueprints.launchpad.net/nova/+spec/sriov-physical-function-passthrough
- 背景:NFV的一些应用需要完全控制归属于它们的物理端口,需要分配PCI设备的PF给它们,目前nova仅支持分配VF。
- 实现:
- pci_devices表中新增列parent_addr,指明PF和VF的关系;
- 新增数据库接口,根据parent_addr获取pci设备;
- PciDevice对象中增加parent_addr,处理和老代码中extra_info[‘phys_function’]的兼容;
- 修改resources中不再对PF类型的设备进行过滤掉;
- 增加PF/VF声明和分配的逻辑:当其中一个VF不可用时,PF无法分配,当PF分配后,所有的VF都不可用;
- 修改pci的stats(缓存在内存中),当PF分配时,相关VF信息去除,当其中一个VF分配,PF信息去除。
- 备注:部分完成。
- Low
- https://blueprints.launchpad.net/nova/+spec/rbd-instance-snapshots
- 背景:rbd可作为glance镜像存储的后端或者nova的临时盘,当做快照时,需要从rbd下载,然后上传给glance,再由glance推到rbd,比较耗时,用户体验差。
- 实现:imagebackend中新增直接创建快照的接口,直接在本地的pool中创建快照,将url更新到glance,如果出错则使用原来的方式进行快照。
- Low
- https://blueprints.launchpad.net/nova/+spec/remove-mox
- 背景:python3不支持mox
- 实现:测试框架中使用mox的代码去掉。
- Low
- https://blueprints.launchpad.net/nova/+spec/instance-crash-dump
- 背景:处于调试用户需要虚拟机的crash dump,目前还不支持。X86平台使用NMI,libvirt/ipmitool/Hyper-V均有命令支持注入到虚拟机中。
- 实现:
- 完善libvirt驱动已有的注入接口,增加单元测试和错误处理;
- 新增REST API和compute API支持注入crash dump到虚拟机中。
- Low
- https://blueprints.launchpad.net/nova/+spec/scheduler-driver-use-stevedore
- 背景:Scheduler使用classloader加载驱动和hostmanager类,必须指定全路径,此bp使用Stevedore避免指定全路径。
- 实现:
- 修改配置项不再指定全路径;
- 修改Scheduler的driver和manager使用stevedore导入类。
- Low
- https://blueprints.launchpad.net/nova/+spec/new-oslodb-enginefacade
- 实现:使用新的oslo_db enginefacade.
- Low
- https://blueprints.launchpad.net/nova/+spec/vmware-limits-mitaka
- 背景:提升vmware驱动的QoS,已实现CPU、内存、磁盘的限制。
- 实现:增加对网络流量的限制。
- Low
- https://blueprints.launchpad.net/nova/+spec/vmware-better-display-names
- 背景:虚拟机相关文件放置在以UUID为名字的文件夹下,对于VC的管理员来说比较困惑。
- 实现:新建文件夹/OpenStack/project-id/instances/,下级目录以虚拟机的display_name命名。
- Low
- https://blueprints.launchpad.net/nova/+spec/virt-driver-cpu-thread-pinning
- 背景:nova已实现了pCPU的亲和和绑定,但对于超线程来说,还需要考虑线程亲和和绑定。
- 实现:修改Scheduler支持CPU绑定时考虑线程策略;新增flavor特殊设定hw:cpu_thread_policy;修改NUMA拓扑等支持线程策略。
- Low
- https://blueprints.launchpad.net/nova/+spec/rm-object-dict-compat
- 背景:使用nova对象的方式,去掉原来字典的方式。
- Low
mitaka-rc1
- https://blueprints.launchpad.net/nova/+spec/cells-db-connection-switching
- 背景:在cells v2,nova-api不再使用nova-cells代理而是直接和cell的数据库和消息队列进行通信,因此在DB层的API需要知道目标cell数据库的连接信息,而这些信息保存在API层CellMapping中。当DB层获取目标cell数据库的连接信息时,如有虚拟机的信息更新时,可同步进行更新。
- 实现:
- 在RequestContext增加数据库连接信息;
- 在nova.context中增加context manager,后者能够从CellMapping中获取数据库连接信息,并写入到context中;
- 更新nova.db.sqlalchemy.api中的get_session和get_engine,使之能够解析数据库信息。
- Medium
以上是关于OpenStack nova M Blueprints 分析的主要内容,如果未能解决你的问题,请参考以下文章
openstack M版安装 compute(nova)服务篇