实例预留的额外规格

https://blueprints.launchpad.net/blazar/+spec/flavors-extra-specs

支持在实例预留中添加额外规格。

注意

在这个规格中,有两个不同的术语,额外规格资源属性。这两个术语指的是同一件事,即定义为 ComputeHostExtraCapability。为了保留 BP 中使用的原始术语,本文档的标题和问题描述使用 额外规格

问题描述

用户可以请求 vcpu、内存、磁盘、数量和亲和性作为实例预留的参数。Blazar 会根据用户的请求检查请求的实例是否可以预留。

预留实例的需求不仅包括其风味的尺寸和数量,还包括特定的硬件规格或功能。例如,有些用户希望预留 GPU 实例。但是,实例预留插件不支持将额外规格作为参数。

用例

对于 NFV 领域,某些类型的实例需要在特定的 hypervisor 上运行,例如 DPDK、SR-IOV 等。如果实例预留不支持额外规格,即使用户希望实例在 DPDK hypervisor 上调度,预留的实例也可能被调度到非 DPDK hypervisor 上。

对于 HPC 领域,GPGPU 在该领域很常见。因此,当用户预留实例时,他们可能希望请求 GPU 实例。

提议的变更

实例预留插件支持请求体中的 resource_properties 键。有关请求体更改,请参阅 REST API 影响部分。此规格仅关注支持 resource_properties 与 ComputeHostExtraCapability 的匹配。

当用户使用 resource_properties 预留实例时,Blazar 会选择能够容纳请求的风味和 resource_properties 的 hypervisor。

当管理员更新 ComputeHostExtraCapability 时,Blazar 会重新分配与更新的 ExtraCapability 相关的预留。重新分配策略与 update_reservation API 和资源监控功能使用的策略相同。

备选方案

用户可以直接在请求体中指定具有特定功能的 hypervisor 列表。用户在创建实例预留之前会检查哪些 hypervisor 具有这些功能,然后决定他们想要使用哪些 hypervisor。

与提议的更改相比,这种方法可能更容易实现,因为 Blazar 需要做的只是从列表中选择 hypervisor。但是,管理员可以随时更改 ComputeHostExtraCapability。当用户想要使用的特定功能发生更改时,用户必须再次发送新的 hypervisor 列表。此外,云可以配置为禁止用户查找主机及其额外功能。

数据模型影响

resource_properties 列已添加到 InstanceReservations 表中。此列存储用户发送的 resource_properties 的原始字符串。

InstanceReservations 表的更改如下

ALTER TABLE instance_reservations ADD
    resource_properties MEDIUMTEXT AFTER affinity;

从 Pike 升级到更高版本时,该列分配 NULL。

REST API 影响

  • URL: POST /v1/leases

    • 在 virtual:instance 资源类型中引入 resource_properties 键

请求示例

{
  "name": "instance-reservation-1",
  "reservations": [
    {
      "resource_type": "virtual:instance",
      "vcpus": 4,
      "memory_mb": 4096,
      "disk_gb": 10,
      "amount": 5,
      "affinity": False,
      "resource_properties": {
          "property_key1": "value1",
          "property_key2": "value2"
      }
    }
   ],
  "start": "2020-05-17 09:00"
  "end": "2020-05-17 10:00",
  "events": []
}

响应示例

{
  "leases": {
    "reservations": [
      {
        "id": "reservation-id",
        "status": "pending",
        "lease_id": "lease-id-1",
        "resource_id": "resource_id",
        "resource_type": "virtual:instance",
        "vcpus": 4,
        "memory_mb": 4096,
        "disk_gb": 10,
        "amount": 5,
        "affinity": False,
        "resource_properties": {
           "property_key1": "value1",
           "property_key2": "value2"
        }
        "created_at": "2017-05-01 10:00:00",
        "updated_at": "2017-05-01 11:00:00",
      }],
   ..snippet..
  }
}
  • URL: GET /v1/leases

  • URL: GET /v1/leases/{lease-id}

  • URL: PUT /v1/leases/{lease-id}

  • URL: DELETE /v1/leases/{lease-id}

    • 更改与 POST /v1/leases 相同

安全影响

通知影响

其他最终用户影响

python-blazarclient 需要在租约处理命令中支持 resource_properties 参数。

性能影响

其他部署者影响

开发者影响

实现

负责人

主要负责人

muroi-masahito

其他贡献者

工作项

  • 将 resource_properties 列添加到 InstanceReservation 表

  • 支持实例预留插件中的 resource_properties 键

  • 为 ComputeHostExtraCapability 管理添加重新分配逻辑

  • 在 python-blazarclient 中支持 resource_properties 参数

依赖项

测试

  • 实例预留的场景测试应支持 resource_properties

文档影响

  • API 参考

参考资料

  1. OPNFV Promise : http://artifacts.opnfv.org/promise/docs/development_manuals/index.html

  2. resource-monitoring BP: https://blueprints.launchpad.net/blazar/+spec/resource-monitoring

历史记录

修订版

发布名称

描述

Queens

引入