添加 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 的部署说明。
依赖项¶
Spec,用于在启动过程的更早阶段调用调度器 https://review.openstack.org/#/c/239995/
测试¶
由于这被设计为 Nova 的内部重构,没有用户可见的更改,因此当前的 Tempest 或功能测试应该足够。在某个时候,我们希望研究如何测试多个 Cell 或潜在地在 API 中公开 Cell 的概念,然后我们将解决测试要求。
文档影响¶
将编写文档,描述实例构建的流程以及这如何影响它。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Mitaka |
已引入但未合并任何更改。 |
Newton |
重新提出。 |