添加 CellZero¶
https://blueprints.launchpad.net/nova/+spec/cells-cell0
为了在使用 Cell 时维护 API 合约,我们需要存储足够的信息来满足实例显示请求,即使实例无法调度到某个 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 中。部署者需要意识到这一点,以便进行适当的调试。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
alaski
- 其他贡献者
无
工作项¶
Devstack 更改以设置 cell0。
添加逻辑,以便在无法调度实例时在 cell0 中创建实例。
记录 cell0 的部署说明。
依赖项¶
规范,用于在启动过程的早期调用调度器 https://review.openstack.org/#/c/239995/
测试¶
由于这被设计为 Nova 的内部重构,没有用户可见的更改,因此当前的 Tempest 或功能测试应该足够。在某个时候,我们希望研究如何测试多个 Cell 或潜在地在 API 中公开 Cell 的概念,然后我们将解决测试要求。
文档影响¶
将编写文档,描述实例构建的流程以及这如何影响它。