新的 nova API 调用以将 nova-compute 标记为宕机

https://blueprints.launchpad.net/nova/+spec/mark-host-down

需要一个新的 API 调用来立即更改 nova-compute 服务的状态为宕机。这允许在没有延迟的情况下使用 evacuate API。此外,由于外部系统调用该 API 将确保没有虚拟机仍在运行,因此不会出现破坏共享存储或再次使用相同 IP 的可能性。API 的使用主要适用于将单个主机映射到 nova-compute 的情况。像 Ironic 或 vSphere 这样的情况将超出范围。

问题描述

对于故障或无法访问的主机,nova-compute 状态更改缓慢,并且不能可靠地表明主机是否宕机。无法快速进行疏散,并且由于虚拟机可能仍在运行,可能会导致重用相同的 IP 以及在共享存储的情况下导致数据损坏。此外,由于能够将虚拟机调度到故障主机,可能会对云的稳定性产生影响。

用例

作为用户,我希望在 nova-compute 宕机时快速疏散虚拟机。

作为用户,我希望信任虚拟机将被调度到健康的计算节点。

作为用户,我希望信任在报告 nova-compute 宕机时,不会有虚拟机继续运行。如果外部系统可以在检测到故障时标记 nova-compute 宕机,就可以信任相应的虚拟机也确实已宕机。

作为部署者,我希望部署外部故障监控系统,该系统可以检测可以转换为主机故障的不同问题,并将其告知 OpenStack,并确保主机被隔离(关机)。监控系统可以监控接口、链路、服务、内存、CPU、HW、hypervisor、OpenStack 服务等,并据此采取行动。

项目优先级

Liberty 优先级尚未确定。

提议的变更

引入新的服务 API 扩展,用于设置 nova-compute 的电源状态为开启或关闭。

作为未来的工作,可能还会制作与此相关的其他 BP

  • 新的服务状态更改通知。

与主机上运行的实例相关,也可以制作 BP

  • 可以有一个 API 来为与单个主机相关的所有虚拟机设置“power_state: shutdown”。

  • 目前有一个 API 可以逐个重置虚拟机状态。可以有一个 API 对与单个主机相关的所有虚拟机执行相同的操作。

备选方案

没有有吸引力的替代方案来检测所有不同的主机故障,而不是拥有一个外部工具来检测不同的主机故障。为了使这种工具存在,Nova 需要一个新的 API 来报告故障。目前一定已经实现了一些变通方法,因为无法足够快地信任或获取 OpenStack 的状态。

数据模型影响

Nova DB 服务表将有一个新的布尔列 forced_down,默认值为 false。数据库 servicegroup 驱动程序的 is_up 方法需要更新为在值为 true 时使用它来确定服务状态为宕机。否则,预计将使用基于当前时间戳的使用方式。只有当 forced_down 标志被设置回 false 时,nova-compute 才会被允许启动并报告状态为开启。

REST API 影响

新的计算 API 以更改 nova-compute forced_down 标志的值为 true 或 false

请求

PUT /v2.1/{tenant_id}/os-services/force-down
{
    "binary": "nova-compute",
    "host": "host1",
    "forced_down": true
}

response

200 OK
{
    "service": {
        "host": "host1",
        "binary": "nova-compute",
        "forced_down": true
    }
}

请求

PUT /v2.1/{tenant_id}/os-services/force-down
{
    "binary": "nova-compute",
    "host": "host1",
    "forced_down": false
}

response

200 OK
{
    "service": {
        "host": "host1",
        "binary": "nova-compute",
        "forced_down": false
    }
}

服务模式将具有新的可选参数

forced_down: parameter_types.boolean

这将包含在对 forced_down 请求的响应消息中。

除了新的调用之外,服务列表的响应还将包含有关 forced_down 字段状态的信息。

安全影响

可配置的策略,默认情况下为 admin 角色。

通知影响

其他最终用户影响

性能影响

其他部署者影响

部署者可以使用任何外部系统来检测主机故障并将其报告给 OpenStack。

开发人员影响

实现

负责人

主要负责人:Tomi Juvonen 其他贡献者:Ryota Mibu, Roman Dobosz

工作项

依赖项

无。

测试

需要添加单元和功能测试用例。

文档影响

需要记录新的 API

参考资料