在服务器详情中显示调度器提示

https://blueprints.launchpad.net/nova/+spec/show-scheduler-hints-in-server-details

目前 Nova 缺乏一种直接的方式来暴露与服务器关联的 scheduler hints(调度器提示)。本提案建议扩展 Nova 现有的 API,以便用户在可用时检索此信息。

问题描述

调度器提示可以在服务器创建时指定,并且可以根据用户提供的配置影响放置决策。这些提示存储在 Nova 的数据库中,并在服务器迁移期间可以被调度器稍后考虑。如果没有事先获得此信息,API 用户可能会选择无效的目标主机进行迁移请求,并且难以理解故障的真正原因。

用例

  • 作为运维人员,我希望检索有关服务器创建请求的更多详细信息,其中包括关联的 scheduler_hints

  • 作为云管理员,我希望检查与所有正在运行的服务器相关联的更多信息,包括它们的调度器提示,以便从主机制定迁移计划。

  • 像 Watcher [1] 这样的优化服务将受益于额外的放置约束,例如来自主机所有实例的调度器提示,以便构建更具体的行动计划来优化集群中的工作负载平衡。如果没有此信息,Watcher 可能会提出包含许多违反某些约束的服务器迁移操作的解决方案。例如:Watcher 不会考虑主机是为使用 different_host 调度器提示创建的服务器的无效目标。

提议的变更

代码变更

扩展 GET /servers/{server_id}GET /servers/detail 的 API 响应,以包含有关调度器提示的信息。

在 API 响应中添加一个新条目,其键为 scheduler_hints,其中包含与相应服务器关联的所有持久化的调度器提示。值格式将遵循服务器创建请求中定义的相同 json 模式 [2]。如果服务器没有关于调度器提示的信息,则该值将设置为 {}

openstack 客户端和 openstack sdk 将更新以支持新的 API 并显示添加的新字段。

备选方案

用户驱动的实例元数据

用户还可以将调度器提示信息存储在实例元数据中。这将允许他们在需要时稍后查询此信息。缺点是它在 nova 数据库中复制了此信息,并且还需要用户手动执行额外的步骤。

数据模型影响

无。

REST API 影响

以下更改将在新的 API 微版本中引入

  • GET /servers/{server_id}

    显示服务器详情

    返回代码:400、401、403(无更改)

    建议的 JSON 响应添加

    {
        "server": {
            ...
            "scheduler_hints": {
                "group": "af16eb84-88fe-4cc4-b558-1752cbe8cb15",
                "same_host": "6605bff6-86b9-4824-b35b-a6b3c4c0e717"
            },
            ...
        }
    }
    
  • GET /servers/detail

    列出服务器详情

    返回代码:400、401、403(无更改)

    建议的 JSON 响应添加

    {
        "servers": [
            {
                ...
                "scheduler_hints":{
                  "group":"dc0ca1ef-7e0b-4cb5-89aa-b2069f8b8a8a",
                  "different_host":"6dffb036-d020-4630-b467-334400a050ca"
                },
                ...
            }
        ]
    }
    

新字段的默认策略将是 project_reader_or_admin,以匹配现有的 /servers/detail 策略。

安全影响

无。

通知影响

无。

其他最终用户影响

将在 openstack 客户端和 openstack sdk 中的 Show Server DetailsList Servers Detailed 命令的输出中添加一个包含调度器提示信息的新字段。

性能影响

无。

其他部署者影响

无。

开发人员影响

无。

升级影响

实现

负责人

主要负责人

dviroel

功能联络人

无。

工作项

  • 在一个新的微版本中,将服务器详情响应中添加一个新字段,并用持久化的调度器提示填充它。

  • 扩展现有的单元和功能测试,包括 API 示例测试。

  • 扩展现有的 scheduler_hints 和 show server details tempest 测试,以验证新的微版本是否包含 scheduler_hints 信息。

  • 更新 API 文档,包括 API 参考中的 API 示例。

  • 更新 openstack 客户端和 openstack sdk 以支持新的微版本并显示新字段。

依赖项

无。

测试

可以扩展现有的单元、功能、API 示例和 tempest 测试,以验证新的微版本是否包含 scheduler_hints 信息。如果需要,可以添加新的测试以正确覆盖其他场景。

文档影响

  • API 参考

  • REST API 版本历史

  • openstack 客户端和 openstack sdk 文档

参考资料

历史

修订

发布名称

描述

2025.1 Epoxy

引入