使用对象进行资源跟踪器

https://blueprints.launchpad.net/nova/+spec/make-resource-tracker-use-objects

此蓝图已获得 Juno 的批准,但错过了功能冻结期。

Nova 正在将用于通过 RPC 和数据库进行通信的数据结构转换为使用一种称为 Nova Objects 的对象封装。这支持实时升级和数据库模式独立性的多版本控制。该蓝图涵盖将资源跟踪器转换为使用 Nova Objects。

问题描述

转换为 Nova Objects 将用 Nova Object 版本替换当前通过 Conductor API 传递的字典数据结构。在必要时,Nova Objects 将扩展以涵盖尚未实现参数。

用例

作为一名操作员,我希望能够升级 Nova 而无需任何停机时间。

项目优先级

此蓝图符合实时升级的优先级。

提议的变更

将使用的 Nova Object 类包括

  • ComputeNode

  • Instance

  • 迁移

  • 风味

  • Service

ComputeNode 对象当前缺少 compute_nodes 表中存在的一些参数,这些参数被资源跟踪器使用。以下参数将被添加到 ComputeNode 中

  • pci_stats

此外,compute_nodes 表中存在以下字段,但当前资源跟踪器未使用。我们建议除非使用,否则不要向 ComputeNode 对象添加字段,因此这些字段将不会作为此蓝图的一部分添加。

  • extra_resources

完成时,资源跟踪器将不会直接调用 conductor。

备选方案

还有另一项工作是将调度器从 Nova 中分离出来。当分离完成时,资源跟踪器可能不再通过数据库与调度器交互。最初,scheduler-lib 蓝图(请参阅参考)将使所有计算节点与调度器的交互都通过一个新的调度器库进行,为分离做准备。

这表明至少不需要使用 ComputeNode 对象。但是,即使 ComputeNode 对象不用于在数据库中持久化数据,继续使用它也是合理的,因此我们将继续按照现有计划进行实施。

数据模型影响

对象将代码与数据库模式隔离。它们被编写为与现有数据模型版本一起工作。目前,调度器不使用 ComputeNode 对象,因此那里的代码需要容忍数据库模式或存储在字段中的数据格式的变化。

需要添加到 ComputeNode 对象中的字段如下

pci_stats

数据库字段类型:text

对象字段类型:fields.ObjectField(‘PciDeviceList’, nullable=True)

pci_stats 字段当前填充着序列化为对象原型的 PciDeviceList。这已经是对象字段的正确格式。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

无。

其他部署者影响

对象被写入以与 Juno 中使用的数据库模式兼容。此蓝图没有数据库迁移,数据库字段中存储的数据格式不会更改。这意味着 Juno 和 Kilo 版本的计算节点可以共存并与调度器交互。

开发人员影响

从事资源跟踪器的开发人员需要使用新的对象,而不是直接向 Conductor 进行数据库调用。

实现

负责人

主要负责人

pmurray

工作项

  • 在资源跟踪器中使用 flavor 对象

  • 在资源跟踪器中使用 Service 对象

  • 在资源跟踪器中使用 Instance 对象

  • 在资源跟踪器中使用 Migrations 对象

  • 在资源跟踪器中使用 ComputeNode 对象

其中一些工作项目前已准备好进行审查:https://review.openstack.org/#/q/topic:bp/make-resource-tracker-use-objects,n,z

依赖项

测试

这不会影响现有的 Tempest 测试。将为每个对象添加单元测试,并修改现有测试以处理新的数据结构。

文档影响

没有新功能或 API 更改,因此没有文档影响。

参考资料

https://blueprints.launchpad.net/nova/+spec/scheduler-lib