讽刺:多计算主机支持

https://blueprints.launchpad.net/nova/+spec/ironic-multiple-compute-hosts

目前,Ironic virt 驱动程序仅支持单个 nova-compute 服务。这显然不适用于任何有意义规模的环境;没有 HA,计算服务宕机时一切都会失败。让我们修复它。

问题描述

计算机是非常糟糕的东西。它们有时会死掉。它们会随机崩溃进程。太阳耀斑可能会导致坏事发生。等等等等。

仅为整个 Ironic 环境运行一个 nova-compute 实例将会是一个糟糕的体验。Ironic virt 驱动程序当前假设一次只能运行一个 nova-compute 进程。它将 Ironic 安装的所有资源暴露给资源跟踪器,而无法将这些资源拆分到多个计算服务中。

用例

这允许操作员避免为 Ironic 部署使用单个 nova-compute 服务,以便即使计算服务宕机,部署也能继续运行。请注意,这假定每个 Nova 部署一个 Ironic 集群;在大多数情况下,这并非不合理,因为 Ironic 应该能够扩展到 10^5 个节点。

提议的变更

通常,运行 Ironic virt 驱动程序的 nova-compute 应该仅在 compute_nodes 表中注册为一行,而不是多行。

Nova 的调度器应该仅调度到 nova-compute 主机;该主机将从匹配请求的节点中选择一个 Ironic 节点(如下文详细说明)。一旦实例被放置在给定的 nova-compute 服务主机上,该主机将始终管理该实例的其他请求(删除等)。因此,实例计数调度器过滤器可以仅用于在此处均匀地在计算主机之间分配实例。如果计算主机发生故障,这将把故障域缩小到计算主机上现有实例的故障操作。

Ironic virt 驱动程序应该被修改为调用带有实例请求规范的 Ironic 端点。该端点将预留一个节点,并返回该节点。然后 virt 驱动程序会将实例部署到此节点。当实例被销毁时,预留也应该被销毁。

该端点将接收与请求规范相关的参数,并且正在 Ironic 侧进行处理[0]。这尚未确定,但至少将包含 flavor 对象中的所有字段。这可能看起来像

{
    "memory_mb": 1024,
    "vcpus": 8,
    "vcpu_weight": null,
    "root_gb": 20,
    "ephemeral_gb": 10,
    "swap": 2,
    "rxtx_factor": 1.0,
    "extra_specs": {
        "capabilities": "supports_uefi,has_gpu",
    },
    "image": {
        "id": "some-uuid",
        "properties": {...},
    },
}

我们将为每个计算主机向资源跟踪器报告(总 Ironic 容量)。这将导致 Nova 最终过度报告总可用容量,但是这是最不错误的选项。其他(更糟糕的)选项是

  • 从每个计算主机报告(总 Ironic 容量)/(计算主机数量)。这更“正确”,但有可能计算主机报告(使用量)>(最大容量),因此无法执行新的构建操作。

  • 报告一些任意不正确的总容量数字,并尝试让调度器忽略它。这报告的数字更不正确,并且还需要更多的代码,并且有更多的出错空间。

备选方案

像今天一样做,使用主动/被动故障转移。

很好地进行主动/被动故障转移不是一件容易的任务,并且不能解释所有可能的故障。这也不符合 Nova 规定的计算故障模型。此外,使用许多 Ironic 节点进行资源跟踪器初始化速度较慢,因此冷故障转移可能需要几分钟。

资源提供者[1]可能是另一种可行的替代方案,但我们不应该对其有硬依赖性。

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

这应该稍微提高性能。目前,资源跟踪器负责 Ironic 部署中的每个节点。这将使该组更小,并提高资源跟踪器循环的性能。

其他部署者影响

必须部署支持预留端点的 Ironic 版本,然后才能部署具有此更改的 Nova 版本。如果不是这种情况,则应使用以前的行为。我们需要通过配置选项正确地弃用旧行为,因为部署者需要配置与当前推荐的不同调度器过滤器和主机管理器才能使其正常工作。我们应该调查是否可以在不使用新的配置选项的情况下优雅地完成此操作,但是我不确定是否可行。

开发人员影响

无,但 Ironic 驱动程序开发人员应该意识到这种情况。

实现

负责人

主要负责人

jim-rollenhagen (jroll)

其他贡献者

devananda jaypipes

工作项

  • 将 Ironic 驱动程序更改为 1:1 的主机:节点映射。

  • 将 Ironic 驱动程序更改为从 Ironic 获取预留。

依赖项

这取决于 Ironic 中的一个新端点。[0]

测试

这应该被测试为默认配置。

文档影响

部署文档需要更新,以说明其工作方式,因为它与大多数驱动程序不同。

参考资料

[0] https://review.openstack.org/#/c/204641/

[1] https://review.openstack.org/#/c/225546/

历史

无。