共享使用量大小跟踪

https://blueprints.launchpad.net/manila/+spec/share-usage-size

我们需要一种收集实际共享存储使用量信息的方式,以便云运营商可以使用这些信息进行计费、健康检查和/或其他目的。

问题描述

目前,无法获取特定共享的实际存储使用量,因此无法按存储使用量计费。只能按配额限制计费。

用例

  • Manila 可以将存储使用量报告给计量服务,例如 ceilometer [1]。

  • 某些存储后端在创建共享后不会立即预留整个请求的共享大小,而是仅为共享设置配额/限制。对于此类后端,按使用量计费可能更合适,而不是按限制/配额计费。

提议的变更

在共享服务中添加定期任务以收集共享的使用量大小。定期任务将在共享管理器启动后被调用。我们可以设置一个时间间隔,以确定共享管理器轮询驱动程序以执行下一步获取共享使用量大小的频率。管理员和驱动程序开发人员可以在其驱动程序和云中“选择加入”以启用此功能。

添加用于衡量共享使用量大小的通知器。目前我们打算为资源(例如:共享、共享组、快照等)添加通知器,并发布我们期望的资源 [1]。

update_share_usage_size() 驱动程序方法是一个新的驱动程序方法,将在驱动程序初始化之后和定期任务中调用,它返回一个关于共享 ID 和共享使用量大小的字典。共享使用量大小值信息将被通知给 ceilometer 或其他项目,否则不需要通知共享信息。

备选方案

  • 为什么我们不在使用时收集空间使用量(例如:list、show API)?

    因为我们可以将此类实时信息发布到 ceilometer。

  • 为什么我们不存储空间使用量?

    因为我们无法在不复制其他项目(如 ceilometer)中已有的功能的情况下在 manila 内部实现它。这是一个随时间变化的数据。如果数据太旧,可能会严重不准确。因此,我们将存储/检索问题的部分推到 manila 之外,以保持 manila 的范围小而集中。

数据模型影响

REST API 影响

CLI 影响

驱动程序影响

  • 从驱动程序获取实际共享配置容量

    def update_share_usage_size(self, context, shares):
        """Invoked to get the usage size of given shares.
    
        Driver can use this method to update the share usage size of
        the shares. To do that, a dictionary of shares should be
        returned.
        :shares: None or a list of all shares for updates.
        :return None or a dictionary of updates in the format::
    
            {
                '09960614-8574-4e03-89cf-7cf267b0bd08': {
                    'used_size': '200',
                },
            }
    
        """
        raise NotImplementedError()
    

如果管理员配置了一个用于监控的后端,并且驱动程序不支持 update_share_usage_size 方法,那么共享管理器将捕获驱动程序引发的异常 (NotImplementedError),并且我们以后将不会调用定期任务来更新此后端的共享使用量大小。我们将记录不支持的信息。

安全影响

通知影响

其他最终用户影响

性能影响

收集共享使用量会对服务性能产生负面影响。如果共享的大小在创建时已知,并且没有通过显式扩展或缩小而改变,那么我们根本不需要收集使用量。现在我们需要收集使用量。这可能会很昂贵。

管理员可以根据需要将定期间隔配置选项值设置为较大的间隔或禁用它。这可能成本更低或不产生成本。

其他部署者影响

我们需要添加一个用于启用和禁用发送通知的选项。此标志将影响使用任何后端部署的 manila。默认情况下,此选项将设置为 false,并且 manila 不会发送通知,保持其当前行为。

如果运营商希望开始检索 manila 共享使用量大小的指标,他们需要在升级到或安装 Pike 之后在配置文件中启用发送通知。他们还需要确保已部署了指定版本的 ceilometer 或其他软件。在此之后,此处指定的功能将可供使用。

开发人员影响

这将需要更改驱动程序接口。为了支持此功能,驱动程序需要实现 update_share_usage_size 功能。

实现

负责人

主要负责人

工作项

  • 使用功能性 tempest 测试覆盖实现核心功能

  • 添加此功能的文档

依赖项

测试

  • 单元测试

  • 功能性 tempest 测试

文档影响

  • Devref

  • API 参考

  • 用户指南和管理员指南

参考资料

[1] https://specs.openstack.org/openstack/manila-specs/specs/pike/ceilometer-integration.html