OpenStack I/J/K版本更新内容




nova项目Icehouse版本更新内容

官方ReleaseNotes:https://wiki.openstack.org/wiki/ReleaseNotes/Icehouse

版本关键特性

  • 有限在线升级支持,可以先升级控制节点,然后再一个一个的升级计算节点,不至于导致全平台停服

Compute driver(Libvirt)变动

  • Libvirt(KVM) driver支持更多设备:内核参数设置、virtio-scsi支持、virtio-rng支持、支持配置显卡驱动(vga、cirrus、vmvga、xen、qxl)和显存大小设置、虚拟机watchdog设备支持、增强CPU特性感知能力(虚拟机可以使用更多的物理cpu特性)
  • Libvirt(KVM)driver中禁用HPET(High Precision Event Timer),该定时器会导致windows虚拟机在高负载情况下时钟漂移(时间不准)
  • Libvirt(KVM)driver在虚拟机创建过程中,可以等待neutron发送事件通知,以便确认网络准备完毕,防止竞争问题出现(依赖新版本的neutron实现事件发送功能)

API变动

  • OS-DCF:diskConfig在V3版本API中不再被支持
  • XML格式将不被支持,后续API只支持JSON格式的请求和响应
  • 增加删除服务接口(ExtendedServicesDelete)
  • admin_actions扩展移植到V3 API
  • nova调用neutron API时改用tenant_id来认证(之前用的是tenant name),改动原因是keystone V3版本API支持tenant name重名
  • nova hypervisor-show命令增加支持获取计算节点IP地址功能(API也支持)

Scheduler变动

  • 调度器缓存功能支持,加快调度速度
  • 新增调度器AggregateImagePropertiesIsolation,用来匹配镜像属性和计算节点的aggregate属性
  • 权重计算结果归一化,最大权重节点为1.0,最小为0.0
  • 调度器增加对虚拟机组的支持,有两种类型,亲和性调度和非亲和性调度,也即聚集或分散调度虚拟机组中的各个虚拟机
  • 负载感知调度功能支持,可以基于监控数据来根据计算节点负载选择调度节点(用来计算权重)

其他变动

  • 创建、删除keypairs时发送notification
  • 计算节点enable、disable、上电、下电、重启、进入或退出维护模式时发送notification
  • 计算服务(nova-compute)退出时,可以优雅关闭服务(先停止接收新请求,然后处理完所有处理中的请求,最后关闭进程)
  • 野虚拟机审计时(定时查询计算节点上是否有已经被删除的但还在运行的虚拟机),支持关机操作(之前有noop不操作、log打日志、reap清理三种)
  • 默认关闭文件注入功能,后续版本将会彻底删除
  • nova.conf文件分组,H版本只有一个[default]分组,新增了很多分组如[libvirt]等

已知问题

nova服务与其他OpenStack服务交互时经过测试建议使用的版本号如下:

  • keystone V2
  • cinder V1
  • glance V1

升级注意事项

  • 使用Cell调度器时权重计算结果归一化问题
  • docker、PowerVM driver从nova中移除
  • 各种配置项变动(名称变化或者被移除)
  • keystone_authtoken配置项组相关变更
  • I版本引入了libguestfs依赖,会导致从H版本升级到I之后,文件注入流程出现异常,建议是先在H版本关掉文件注入功能后,再升级到I
  • H版本之前私有flavor创建后不会自动被tenant看到(与文档描述不一致),之后的版本则会(与文档描述一致)
  • nova.conf.sample文件默认不会放到nova包里,需要执行命令生成
  • nova服务升级时,如果打开了等待neutron发送网卡绑定完成事件功能,则依赖新版本neutron(否则可能导致网卡挂载到虚拟机失败,或者网卡挂载成功但不可用),建议步骤:nova升级时通过配置项禁用该功能,然后升级neutron(启用事件通知功能),然后修改nova配置项打开该功能
  • 升级到I版本时,如果要使用半停服升级功能,需要修改配置项:[upgrade_levels]/compute=icehouse-compat
  • 注意有一大波配置项改名或者将被废弃

Juno版本更新内容

官方ReleaseNotes:https://wiki.openstack.org/wiki/ReleaseNotes/Juno/zh-hans

虚拟机管理功能

  • 在实例拯救中(rescue),允许用户使用一个特定的镜像,而并非原始镜像
  • 允许镜像指定config drive
  • 用户和管理员可以通过Flavor控制虚拟机CPU的拓扑(核数和vCPU个数配置)
  • 在实例拯救中(Rescue)挂载所有的本地盘

网络变动

  • 改善nova-network代码,允许每一个网络单独配置
  • 允许开发人员增加钩子(hooks),如果一旦实例的网络发生改变,立即得到通知
  • 允许Nova实例使用Neutron SR-IOV端口启动
  • 允许实例添加同一个网络内的多块网卡

Scheduler变动

  • 可扩展的资源跟踪。Nova中资源跟踪的代码是hard code,这个更新使这个功能可扩展,允许增加新的插件支持在调度中跟踪新的类型的资源
  • 支持整个host(虚拟机)的撤离(evacuated),但是需要经过scheduler为实例重新选择目标主机

其他变动

  • scheduler过滤器中支持host集合
  • Nova中支持i18n,在Oslo i18n中开启lazy翻译支持,更新Nova适配这个限制并添加可翻译的字段
  • 允许配置使用slave数据库作为定时任务的sql查询来降低负载
  • 只有在Host状态变化时才更新数据中的状态,替换之前的每60秒一次
  • 在虚拟化的列表API中返回状态信息
  • 允许API调用者在过滤服务状态时,同时传入大于一种以上的状态
  • 配额中增加用户可以创建服务器组的限制

Compute driver(Libvirt)变动

  • 在新的libivrt上,优化获取实例列表的性能
  • 允许为基于网络的磁盘做快照
  • 为Ceilometer开启qemu balloon统计
  • 支持退还未使用的磁盘块到底层存储系统
  • 实例的Meta-data信息现在存储在libvirt的domain xml中。这有利于系统管理员排查问题
  • 支持LXC容器的命名空间
  • 支持RBD的磁盘Copy-on-write复制
  • 开放交互式串口
  • 允许控制在关闭物理机时同时关闭虚拟机
  • 提供智能NUMA节点配置

已知问题

升级注意事项

  • 不推荐使用的或者被删除的Nova选项列表,可以在这里看到: http://docs.openstack.org/trunk/config-reference/content/nova-conf-changes-master.html
  • Nova-manage flavor子命令在Juno版本被废弃了,在2015.1(K)版本中会被删除掉。https://review.openstack.org/#/c/86122/ https://review.openstack.org/#/c/102212/
  • Libvirt最低版本现在是0.9.11: https://review.openstack.org/#/c/58494/
  • Nova现在支持使用Cinder V2 API. 在Juno版本中Cinder V1 API被废弃,在L版本中,Nova将默认切换到Cinder V2版本
  • python-novaclient的日志输出的小变化来提高可读性。keystone token的sha1哈希被输出,取代之前输出token自身 – 这样减少了输出内容,但是仍然可以判断token不匹配的场景。另外,额外的’\n’字符被删除掉。再次检查任何log解析器!
  • libvirt.volume_drivers配置现在已经被nova.conf废弃,将在Lxxxx版本中删除掉。通常来讲,这只会影响一小部分在此驱动的开发者。如果恰好这里包含你,一个建议的解决方案是继续在nova代码库中继续你的工作

Kilo版本更新内容

官方ReleaseNotes:https://wiki.openstack.org/wiki/ReleaseNotes/Kilo/zh-hans

版本关键特性

API v2.1
  • 我们有了下一代Nova API的第一个更新版本v2.1。v2.1版本的目的是向回兼容v2.0版本,并且拥有增强的API校验。API所有更新是通过发布微版本(microversion)发现的。更多信息请参阅:http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/api-microversions.html
  • kilo版本中,我们仍然使用v2.0 API的代码提供v2.0 API的请求。我们希望v2.1将能够同时为v2.0和v2.1请求提供服务。
  • liberty v2.0现在被冻结了,所有功能被添加在v2.1 API中使用微版本(microversions)机制实现。kilo版本中微版本(microversion)更新包括:
    • 扩展keypair API支持x509证书,能够和Windows WinRM使用,这个功能是v2.1 API中第一个被以微版本(microversions)添加的功能。
    • 在os-extended-server-attributes暴露扩展属性
  • python-novaclient现在还不支持v2.1 API
  • Nova v2.1 API的策略执行得到优化:
    • 只在API入口执行策略
    • 对于单一的API,去掉了重复性规则
    • 所有的v2.1 API的策略规则使用’os_compute_api’作为前缀,以区别于v2 API。
    • 之前,由于在db层面权限检查的硬编码(hard-code),部分Nova API并不支持策略的配置。总是需要admin用户权限。部分在Nova v2.1 API中硬编码(hard-code)权限检查被移除,使得API策略可配置。其余的硬编码(hard-code)将在Liberty版本被移除掉。
升级支持
  • 我们减少了使用DB迁移脚本执行数据迁移,现在这部分使用一种”懒(lazy)”方式在DB的对象代码中完成。在nova-manage命令中可以帮助强制进行数据迁移。更多的信息请见:http://specs.openstack.org/openstack/nova-specs/specs/kilo/approved/flavor-from-sysmeta-to-blob.html
  • https://review.openstack.org/#/c/97946/ 增加了编号为267的数据库迁移脚本,这个脚本主要扫描instances.uuid为空(null)的记录并且一旦发现就会导致失败,因为迁移中需要保证instances.uuid非空并且在那个字段加入了UniqueConstraint限制。为了避免数据库迁移失败,提供了一个帮助脚本用来搜索空(null)的instances.uuid的记录。运行’nova-manage db sync’之前,运行帮助脚本‘nova-manage db null_instance_uuid_scan’,默认情况下,该脚本只会检索记录,并将结果输出,不会改变任何内容。如果在参数中加入- -delete,就会自动删除所有instances.uuid为空的记录

Scheduler变动

  • 一系列的性能优化
  • 我们在优化scheudler的代码结构,这将帮助我们能够演进和优化调度过程。这一点对于终端用户不可见。

Compute driver(Libvirt)变动

  • 以NUMA为基础的调度 : http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/input-output-based-numa-scheduling.html
  • 虚拟机使用固定的物理CPU: http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/virt-driver-cpu-pinning.html
  • 超大页(Large Page)支持: http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/virt-driver-large-pages.html
  • vhostuser VIF驱动: http://specs.openstack.org/openstack/nova– specs/specs/kilo/implemented/libvirt_vif_vhostuser.html
  • 使用QEMU agent静默(Quiesce)文件系统(例如:做快照之前): http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/quiesced-image-snapshots-with-qemu-guest-agent.html
  • Quobyte卷支持: http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/quobyte-nova-driver.html
  • 支持QEMU iSCSI initiator: http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/qemu-built-in-iscsi-initiator.html

已知问题

  • Evacuate恢复部分代码存在损坏数据的潜在危险。在nova-compute启动过程中,虚拟化端会汇报instance的状态,用于检查物理机发生故障过程中,虚拟机是否被移走了(i.e. 被evacuated)。如果此时发现的确发生迁移了,那么本地的数据就会被彻底删除。这样就存在潜在的可能出现选择错误,虚拟机被错误的销毁。在libvirt节点上,这样的情况可能会由于改变系统的主机名引发。在vmware节点中,这个可能会由于尝试从两个不同的主机(不同的主机名)管理同一个vcenter引发。这个Bug可能会在Liberty中得到修复,但是在当前部署中,关闭这种行为的建议是设置destroy_after_evacuate=False。 注意:这个并不是回归(regression)并且在evacuate的设计中已经提到这个瑕疵。这个并不容易修复,所以使用这种方式绕过去(workaround)解决这个潜在的数据损坏。在liberty的修复记录:https://review.openstack.org/#/c/161444/。
  • 生成的配置文件样例可能会缺少某些oslo相关的配置

升级注意事项

下面是你在升级中需要了解的内容。在可能的情况下,git提交的hash编码会提供你找到更多更详细的信息:

  • 如果你的Neutron端口(ports)是在Nova之外建立的,在你的服务器删除后并不会删除这些端口:1153a46738fc3ffff98a1df9d94b5a55fdd58777
  • EC2 API支持现在被废弃了,可能要在kilo删除掉:f098398a836e3671c49bb884b4a1a1988053f4b2
  • Websocket代理需要被和API节点一起升级,由于旧的API节点在鉴权控制台权限时不会发送access_url,新的代理服务(这个提交和以后的)处理类似请求时会鉴权失败9621ccaf05900009d67cdadeb1aac27368114a61
  • 在全部升级到kilo后(例如,所有节点都运行kilo代码),你需要在后台运行一个flavor信息更新的迁移,把旧名字改为新名字。Kilo的conductor节点会根据需要进行处理,但是其余的空闲数据需要在后台完成迁移。这个要在Liberty更新后全部完成,到时候旧的位置会被废弃。使用”nova-manage migrate-flavor-data”完成迁移。
  • 由于Nova v2.1 API强制策略的优化。在v2.1 API策略上有一系列改变发生。因为v2.1 API之前一直没有更新,所以这些改变无法向前兼容。所以最好使用策略的样例配置取代之前的版本。
  • force_config_drive = always被废弃了,需要使用force_config_drive = True替换:c12a78b35dc910fa97df888960ef2b9a64557254
  • 改变multi_instance_display_name_template的默认值:609b2df339785bff9e30a9d67d5c853562ae3344
  • 使用”nova-manage db null_instance_uuid_scan”确保DB迁移之前数据是干净的,c0ea53ce353684b48303fc59393930c3fa5ade58

cinder I/J/K版本功能调研

I版本新增功能
  • Ability to change the type of an existing volume (更改卷的volume type)
  • Add volume metadata support to the Cinder Backup Object (卷backup支持 metadata)
  • Implement Multiple API workers (多api worker)
  • Enable multi-process for API service ( 多api 进程)
  • Add ability to delete Quota ( 添加删除配额接口)
  • Add ability to import/export backups in to Cinder (导入导出卷备份,方便云环境和非云环境的数据迁移)
  • Ceilometer notifications on attach/detach (增加attach、detach的notification)
  • Add support for x-openstack-request-id (api请求的request-id跨服务支持)
  • Deprecate chance and simple schedulers (废弃了H版本的chance和simple调度策略 )
  • Port to oslo.messaging (使用oslo.messaging)
  • record-reason-for-disabling-service (记录服务disable原因)
  • 新增 了EMC,HP, IMB等的相关后端存储驱动
已知问题及注意事项
  • Reconnect on failure for multiple servers always connects to first server (Bug: #1261631)
  • Storwize/SVC driver crashes when check volume copy status (Bug: #1304115)
  • Glance API v2 not supported (Bug: #1308594) (glance v2版本不支持)
  • It is recommended you leave Cinder v1 enabled as Nova does not know how to talk to v2. (最好还是用v1版本的cinder来配合nova)
  • Force detach API 改成只能由管理员调用,用户自己无法调用了。
  • Simple/Chance scheduler 被移除,需配置 scheduler_driver=cinder.scheduler.filter_scheduler.FilterScheduler 。
  • hp3par_domain 配置项被移除。
J版本新增功能
  • Support for Volume Replication. (卷多副本支持)
  • Support for Consistency Groups and Snapshots of Consistency Groups. (一致性组,将一组卷划为一个组,来集中进行快照等管理操作)
  • Pool-aware Scheduler Support (支持后端存储池调度)
  • Completion of i18n-enablement Honor Glance protected properties in Image Upload (从卷创建镜像时保留保护属性)
  • Limit Bandwidth of Volume Copy ( 卷拷贝Qos限制,从镜像创建卷,备份,删除卷时的清理)
  • Add Volume Num Weighter Scheduling (卷数量权重调度)
  • Improve taskflow logging & usage 增加 了华为,富士通,oracle等等公司的若干后端驱动
已知问题及注意事项
  • 引入 了后端存储池概念来提升卷后端调度 配置项改动 nova 开始支持cinder v2 api,v1 api逐渐被遗弃,将在L版本完成切换。
  • 除了 在keystone 中药配置cinder v2的endpoint信息,nova中还需要配置配置项cinder_catalog_info 为 ‘volumev2:cinder:internalURL’
K版本 新增功能
  • cinder objects (cinder对象化)
  • Add DB table for driver private data (新增一个数据库表,来存放后端driver的私有数据)
  • Backup Support for Encrypted Volumes Cinder Pagination Sorting Enhancements (cinder分页排序支持)
  • Private Volume Types (支持私有volume type)
  • filtering-weighing-with-driver-supplied-functions (支持后端提供filter 权重算法来进行调度)
  • Limit Volume Copy Bandwidth Per Backend (针对每个存储后端来限制卷拷贝带宽)
  • iscsi-multipath-enhancement (iscsi多路径优化)
  • nfs- backup(driver to backup to NFS repository) Support over subscription in thin provisioning (支持精简配置的超额认购)

参考

https://blueprints.launchpad.net/cinder/icehouse https://blueprints.launchpad.net/cinder/juno https://blueprints.launchpad.net/cinder/kilo https://wiki.openstack.org/wiki/ReleaseNotes/Juno#OpenStack_Block_Storage_.28Cinder.29 https://wiki.openstack.org/wiki/ReleaseNotes/Icehouse#OpenStack_Block_Storage_.28Cinder.29

 

neutron

I 版本:

无新功能,增加一些第三方plugin。

J 版本:

DB migration refactor and new timeline
Distributed Virtual Router Support (DVR)
High Availability for the L3 Agent

主要数据库升级方式重构,是DVR以及L3重构。额外有对IPv6的支持,安全组的一些改进。

K 版本:

无新功能,增加一些第三方plugin。
基本没有对我们特别有用的功能,比较多代码重构。数据库升级重构和L3高可用我们已经有了。