监控资源状态

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

当前未跟踪已租用/预留资源的的状态。本规范提出一项新功能,用于监控已租用/预留资源的状态,并从故障条件下恢复租约。

问题描述

即使租约已成功创建,如果资源发生故障,租约所有者也无法使用已租用的资源。更糟糕的是,租约所有者甚至无法从租约对象中注意到这种故障条件,因为 Blazar 不跟踪已租用/预留资源的状态。

用例

  • 租约所有者期望在租约状态良好时,已租用的资源可用。

  • 具有资源操作权限的管理员,例如 /v1/hosts 的 CRUD 操作,期望 Blazar 能够通知他们池中资源的故障。

提议的变更

概述

Blazar 监控资源的状态,并修复受损的租约。

监控资源状态

让 blazar-manager 监控资源状态。对于每个资源插件,应至少支持以下两种类型的监控功能:

  1. 基于推送的监控

    blazar-manager 监听其他组件发送的通知消息,例如 Nova 为主机/实例插件发送的消息。它会接收引用 Blazar 管理的资源的的消息,即资源记录存储在 Blazar 数据库中。每个资源插件提供发布者 ID 和要订阅的主题。

  2. 基于轮询的监控

    blazar-manager 定期调用每个资源插件的状态检查方法。然后,资源插件检查资源状态,例如,主机/实例插件使用 Compute API 的 *List Hypervisors*。如果检测到任何故障,则会通知 blazar-manager。

blazar-manager 在加载资源插件后开始监控。每种资源插件的监控功能类型是可配置的。

更新资源状态

如果检测到任何故障,blazar-manager 会调用资源插件来处理它。资源插件将字段 *reservable* 更新为 *FALSE*,该字段位于故障资源的记录中。这里的记录是指存储在 Blazar 数据库的资源表中的记录,例如,主机/实例插件的 computehosts 表的记录。

即使 computehosts 表有一个名为 *status* 的字段,我们也不使用该字段,因为它会导致误解,即 *status* 字段复制了 Nova 中 hypervisor 的状态。相反,我们引入了一个新的布尔字段 *reservable*,它由 Nova 中 hypervisor 的状态和状态组合决定。只有当状态为 *up* 并且状态为 *enabled* 时,*reservable* 字段才变为 *TRUE*。也就是说,如果状态变为 *down* 或状态变为 *disabled*,则它将变为 *FALSE*。

修复受损的租约

引入以下布尔标志来表示资源条件。默认情况下,它们设置为 False

  • Lease

    • degraded

  • Reservation

    • missing_resources

    • resources_changed

在更新故障资源的 status(= *reservable* 字段)后,资源插件会发现因故障而受到影响的租约,并尝试修复这些租约。在修复过程中,资源插件会查找满足租约要求的可用资源。然后,它执行以下操作:

  • 情况 1:租约尚未启动

    • 情况 1-1:有足够的资源可用

      用故障资源替换新的资源。虽然资源已更改,但将 *resources_changed* 标志保持为 False,因为如果尚未启动,则不会影响租约所有者的视角。

    • 情况 1-2:没有可用的替代资源

      将租约的 *degraded* 标志和预留的 *missing_resources* 标志设置为 True。

  • 情况 2:租约已启动

    • 情况 2-1:有足够的资源可用

      将租约的 *degraded* 标志和预留的 *resources_changed* 标志设置为 True。

    • 情况 2-2:没有可用的替代资源

      将租约的 *degraded* 标志和预留的 *missing_resources* 标志设置为 True。

一旦 *degraded* 和 *missing_resources* 标志设置为 True,即使故障资源已恢复,它们也会保持 True。要将它们设置为 False,租约所有者必须发送更新租约请求,并且必须满足请求的容量。请注意,一旦 *resources_changed* 标志变为 True,它将永远不会变为 False。在这种情况下,*degraded* 标志也不会变为 False。

从架构的角度来看,资源相关表(如 computehosts、computehost_allocations、computehost_reservations 和 instance_reservations 表)由资源插件更新。通用表(如 leases 和 reservations 表)由管理器更新。

通知

如果租约、预留或资源的状态发生变化,blazar-mangaer 会发布通知。

备选方案

可以使用其他监控服务,例如 Monasca。但是,就组件间依赖性而言,这不是一个好的解决方案。应尽可能减少依赖性。

数据模型影响

  • leases 表:添加一个新的布尔字段 *degraded*。

  • reservations 表:添加新的布尔字段 *missing_resources* 和 *resource_changed*。

  • computehosts 表:添加一个新的布尔字段 *reservable*。

REST API 影响

  • 通过上述数据模型更改,REST API 响应体中包含的一些字段将略有变化。

    GET /v1/<lease-id> 响应的新字段

    {
      "lease": {
        "degraded": false,
        "reservations": [
          {
            "missing_resources": false,
            "resources_changed": false,
          }
        ],
      }
    }
    

安全影响

无。

通知影响

blazar-manager 发送以下两个新通知:

  • 租约状态更改:通知租约及其包含的预留的状态更改。

  • 资源状态更改:通知 Blazar 管理的资源的 status 更改。即,通知 Blazar 数据库的资源表中 *reservable* 字段的更改。

其他最终用户影响

无。

性能影响

无。

其他部署者影响

  • 与监控功能相关的新的配置选项,例如监控类型、发布者 ID 和要订阅的主题,将为每个资源插件添加。

开发者影响

所有资源插件(包括将来支持的新插件)都必须支持至少一种资源监控功能。

实现

负责人

主要负责人:hiro-kobayashi

工作项

  1. 定义租约和预留的完整状态集。这将由 state-machine 蓝图[1]完成。

  2. 将监控机制实现到 blazar-manager 中。

  3. 更改 computehosts 表的模式。具体来说,删除 *status* 字段并添加一个新的 *reservable* 字段。

  4. 更改资源查找功能,例如主机插件的 _matching_hosts() 方法和实例插件的 pickup_hosts() 方法,以关注 computehosts 表中记录的 *reservable* 字段。

  5. 将资源特定的监控功能实现到每个资源插件中,该功能由 blazar-manager 调用。首先关注主机插件的基于推送的监控功能。

  6. 将租约修复功能实现到每个资源插件中。

  7. 实现通知功能。

  8. 更改 DevStack 设置脚本以启用监控功能

  9. 编写用户指南

依赖项

  • 租约和预留的可能状态取决于 state-machine 蓝图[1]。

测试

  • 测试监控功能。

  • 测试租约修复功能。

文档影响

  • 此新功能应在介绍文档中描述。

  • 安装指南将更新,以提及如何设置监控功能。

  • API 参考将更新,因为响应体将略有变化。

参考资料

历史记录

修订版

发布名称

描述

Queens

引入