添加租期结束操作选项

https://blueprints.launchpad.net/blazar/+spec/on-end-options

对于主机预留功能,我们建议更改租期结束时的行为,强制删除正在运行的实例,以避免后续租期的失败。此外,我们建议添加在强制删除之前采取的操作选项。当然,租期所有者也可以在租期结束时间之前请求“更新租期”以延长租期。

问题描述

目前,物理主机预留功能在租期结束时不会终止正在运行的实例。这可能导致后续租期的失败。解决方案是默认删除实例,并提供删除前的操作选项,例如快照。

用例

  • 所有用户都希望 Blazar 能够准时执行,以保证所有租期的公平性。

  • 如果工作负载在租期内无法完成,用户希望对租期的实例进行快照。然后,用户将在下一个租期恢复快照的实例并重新启动工作负载。

  • 用户只想临时使用实例,并希望这些实例在租期结束时自动删除。

提议的变更

更改 PhysicalHostPlugin 类的 on_end() 方法,默认在租期结束时删除正在运行的实例。

此外,支持删除前采取的操作选项。为此,扩展现有的 before_end_lease 事件,该事件目前仅用于租期结束前的通知。我们计划支持以下 before_end_lease 事件操作

  • 通知:通知租期所有者租期即将结束。(当前支持)

  • 快照:在删除之前拍摄正在运行的实例的快照。

  • 迁移:迁移正在运行的实例。

我们预计未来还会提出其他选项。

before_end_lease 事件在创建和更新租期时注册和更改。可以配置默认的 before_end_lease 操作以及触发该事件的时间。此外,用户可以通过请求参数指定它们。

备选方案

不要使用“before_end_lease”,而是使用“end_lease”事件来进行快照等操作。目前,end_lease 事件在租期结束时触发。更改为在租期结束前的特定时间窗口触发。使时间窗口的长度可配置。

这种更改可能会使事件处理复杂化,因为 end_lease 事件可以触发多个操作,例如,拍摄快照然后删除实例,而 before_end_lease 解决方案保持一对一事件与操作的关系。因此,我们更喜欢 before_end_lease 解决方案。

数据模型影响

  • 将在预留表中添加一个新的属性“before_end_action”。

REST API 影响

  • 计划仅更新 v2 API,并且不为 v1 API 支持与 before_end_lease 相关的能力。

  • URL: POST /v2/leases

    • 添加一个新的参数“before_end_action”

    • 将参数“before_end_lease”更改为“before_end_date”。此更改是为了与其他参数的术语保持一致。

      示例

      {
          "name": "lease_foo",
          "start_date": "2017-3-21 15:00",
          "end_date": "2017-03-24 15:00",
          "before_end_date": "2017-3-24 14:00",
          "reservations": [
              {
                  "resource_id": "1234",
                  "min": 1,
                  "max": 3,
                  "resource_type": "physical:host",
                  "hypervisor_properties": "[\">=\", \"$memory_mb\", \"4096\"]",
                  "before_end_action": "snapshot"
              }
          ],
          "events": []
      }
      
  • URL: PUT /v2/leases

    与 POST 请求相同的更改。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

无。

其他部署者影响

  • 将在 physical:host 组中添加新的配置选项

    • before_end_action:配置 before_end_lease 的默认操作。

    • hours_before_end_lease:配置触发 before_end_lease 操作的默认小时数(在 end_lease 之前)。

开发者影响

无。

实现

负责人

主要负责人

hiro-kobayashi

工作项

  • 步骤 1:更改租期结束时的行为,强制删除正在运行的实例。

  • 步骤 2:更改 before_end_lease 事件以支持可配置的操作。

  • 步骤 3:更改 REST API。

依赖项

无。

测试

添加以下测试

  • 单元测试

    • 步骤 1:检查租期结束时是否删除了所有正在运行的实例。

    • 步骤 2:检查 before_end_lease 操作是否被触发并完成。

    • 步骤 3:检查新参数是否被正确处理。

文档影响

更新以下文档

  • 添加发布说明

  • Blazar REST API 文档(API v2 文档将自动更新。)

参考资料

历史记录

修订版

发布名称

描述

Pike

引入