添加 CellZero

https://blueprints.launchpad.net/nova/+spec/cells-cell0

为了在使用 cells 时维护 API 合约,我们需要存储足够的信息来满足实例 show 请求,即使实例无法调度到某个 cell。

问题描述

当发出 API 请求来构建实例时,我们需要遵守特定的响应合同。这意味着我们需要存储请求中的某些信息,例如镜像、flavor、名称、uuid 等… 在理想情况下,实例将被调度到 cell 中的某个主机,数据将位于该 cell 的数据库中。如果没有任何 cell/主机可以容纳该实例,则需要将这些数据存储在任何活动 cell 之外。

用例

  • 运营商希望将他们的部署划分为 Cell,以实现扩展、故障域和构建原因。在划分后,我们需要维护当前的 API 合约。

提议的变更

将添加一个 cell0,它由活动 cell 内实例所需的数据库表组成。实例及其必要的关系可以存储在此处,并包含在 API 响应中。此 cell 中实例的唯一可用操作将是删除它们,因为它们处于错误状态。存储在此处的实例将设置一个常规的 instance_mapping,以便可以沿着正常的代码路径处理对这些实例的请求。

实例的启动过程将被更新,以便在调度器未能为实例选择位置时,在 cell0 中创建实例。

备选方案

另一种方法是将实例记录和关系存储在 nova api 数据库中,采用序列化格式以便于 API 响应检索。这个方案被否决了,因为它在修改实例表模式或相关模式时需要多个升级路径。

另一种方法是在 nova api 数据库中维护一个实例表和相关表。这与目前提出的方案非常相似,但是拥有 cell0 结构可以避免对这里的实例查找/删除进行特殊处理。它们将拥有一个正常的 instance_mapping 设置,因此操作可以正常找到它们。

数据模型影响

所有必要的数据库表,用于存储实例和相关对象,例如 security_groups 或 instance_extra,都将被创建和管理用于这个新的 cell。目前最好为 cell0 部署一个正常的 cell 数据库,尽管它将包含不必要的表,例如 compute_nodes。后续工作可以根据需要对其进行精简。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

无法调度的实例将存在于这个特殊的 cell 中。部署者需要了解这一点,以便进行适当的调试。

开发人员影响

实现

负责人

主要负责人

doffm

其他贡献者

工作项

  • Devstack 更改以设置 cell0。

  • 添加逻辑,以便在无法调度实例时在 cell0 中创建实例。

  • 记录 cell0 的部署说明。

依赖项

测试

由于这被设计为 Nova 的内部重构,没有用户可见的更改,因此当前的 Tempest 或功能测试应该足够。在某个时候,我们希望研究如何测试多个 Cell 或潜在地在 API 中公开 Cell 的概念,然后我们将解决测试要求。

文档影响

将编写文档,描述实例构建的流程以及这如何影响它。

参考资料

历史

修订版

发布名称

描述

Mitaka

已引入但未合并任何更改。

Newton

重新提出。