在分配候选对象中支持 Traits¶
https://blueprints.launchpad.net/nova/+spec/add-trait-support-in-allocation-candidates
Placement API 已经支持过滤具有请求资源数量容量的资源提供者。除了请求的这些定量方面之外,Placement API 还需过滤掉不具备一组所需定性属性的资源提供者。
问题描述¶
GET /allocation_candidates 目前仅支持使用 resources 查询参数按定量方面进行查询。对于定性方面,我们需要一个额外的参数,required。
用例¶
这是一个 Nova 和 Placement 之间内部交互的 API 提案。最终用例是,最终用户希望在具有 AVX CPU 特性的计算节点上启动实例,即使它们具有容量,也不会返回不具备 AVX CPU 特性的计算节点。
提议的变更¶
建议向 GET /allocation_candidates API 添加 required 查询参数。它将接受一个 Traits 列表,API 将返回一组分配请求,这些分配请求中的资源提供者都具备参数 required 中的每个 Traits。
对于嵌套的资源提供者,定义在父 RP 上的 Traits 假定属于其所有子(后代)RP。但是,定义在子 RP 上的 Traits 不适用于父(祖先)RP。聚合内不存在 Traits 的隐式共享。
备选方案¶
还有一个关于 preferred_traits 参数的提案,这意味着拥有一系列 Traits 更好。但目前还没有明确的使用场景,因此它不包含在提案中。
数据模型影响¶
无
REST API 影响¶
建议向 GET /allocation_candidates 添加 required 参数。它接受用 , 分隔的 Traits 列表。例如
GET /allocation_candidates?resources=VCPU:8,MEMORY_MB:1024,DISK_GB:4096&required=HW_CPU_X86_AVX,STORAGE_DISK_SSD
在上述请求中,Traits HW_CPU_X86_AVX 和 STORAGE_DISK_SSD 是必需的。
对 required 的验证如下
required 是可选的,但 resources 是必需的参数。因此,应在指定 resources 的情况下指定 required。
required 参数中的任何无效 Traits 将导致 HTTPBadRequest 400。无效的 Traits 指的是 Traits 不在 os-traits 库中,也不是 Traits API 定义的自定义 Traits。
required 中的空值不可接受,也会导致 HTTPBadRequest 400。
API 将返回一组分配请求,每个分配请求是根资源提供者、嵌套资源提供者和共享资源提供者的组合。所需的 Traits 可能分布在这些资源提供者中。
例如,计算节点资源提供者可能具有 HW_CPU_X86_AVX Traits,但不具有 STORAGE_DISK_SSD Traits。该 Traits 可能与正在为请求提供 DISK_GB 资源的共享存储提供者相关联。对于上述请求,API 将返回一个包含两个资源提供者的分配请求,计算节点资源提供者提供具有 Traits HW_CPU_X86_AVX 的 VCPU 和 MEMORY_MB 资源,共享存储提供者正在共享具有 Traits STORAGE_DISK_GB 的 DISK_GB 资源。
资源提供者拥有的所有 Traits 都将包含在响应的提供者摘要中
{
"allocation_requests": [
{
"allocations": [
{
"resource_provider": {
"uuid": "88a5187d-e0a4-426d-bed4-54e7e89b2adb"
},
"resources": {
"VCPU": 8,
"MEMORY_MB": 1024,
}
},
{
"resource_provider": {
"uuid": "0d684632-eca3-40a9-ab6b-b7457227143c"
},
"resources": {
"DISK_GB": 4096
}
}
]
}
],
"provider_summaries": {
"88a5187d-e0a4-426d-bed4-54e7e89b2adb": {
"resources": {
"VCPU": {
"capacity": 128,
"used": 1
}
"MEMORY_MB": {
"capacity": 8096,
"used": 0
}
},
"traits": [
"HW_CPU_X86_SSE",
"HW_CPU_X86_SSE2",
"HW_CPU_X86_AVX",
"HW_CPU_X86_AVX2",
...
]
},
"0d684632-eca3-40a9-ab6b-b7457227143c": {
"resources": {
"DISK_GB": {
"capacity": 40960,
"used": 0
}
},
"traits": [
"STORAGE_DISK_SSD"
]
}
}
}
当资源提供者没有 Traits 时,traits 属性仍然存在于响应中,并且为空列表。
以上所有更改都在一个新的微版本中。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
在实现中,将使用单独的 SQL 查询具有所需 Traits 的资源提供者。然后在主 SQL 中过滤这些资源提供者。这将比单个 SQL 慢,但可以接受。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Alex Xu <hejie.xu@intel.com>
- 其他贡献者
Lei Zhang <lei.a.zhang@intel.com>
工作项¶
添加一个公共方法来查询具有所需 Traits 的资源提供者。
将公共查询方法集成到主查询中。
将 Traits 填充到 ProviderSummaries 对象中。
使用新的微版本在 GET /allocation_candidates API 中公开 required 参数。
依赖项¶
无
测试¶
需要 DB 和 API 功能测试。
文档影响¶
Placement API 参考应使用新参数进行更新。
参考资料¶
无
历史¶
发布名称 |
描述 |
|---|---|
Queens |
引入 |