容量余量

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/cinder/+spec/capacity-headroom

该提案旨在提供一种机制,以显示可用于分配或调整卷的大小的总剩余块存储容量。这将为部署者提供未来规划的参考。

问题描述

目前,管理员用户没有明确的方法来了解 cinder 中剩余的总块存储容量可以部署多少。

  • 具有多个后端的情况

  • 具有支持“过度订阅”的后端的情况,临时未使用的容量可用于部署新卷

  • 报告容量为“无限”或“未知”的后端的情况

用例

该提案为每个池计算虚拟可用容量,并对每个后端进行求和。它将与已存在的其他有用容量信息一起将信息通知给 ceilometer 服务。Ceilometer 服务将利用这些通知生成容量样本。管理员用户可以了解 cinder 容量使用情况的趋势,这将对未来的容量规划很有帮助。

提议的变更

  • 计算报告容量正常的每个池的虚拟可用容量,并对后端进行求和。

    如何计算虚拟可用容量(virtual_free)

    对于薄配置,根据 LVM 实现的过度订阅机制,池的剩余虚拟容量可以用作术语:virtual_free = apparent_available_virtual_capacity。可以通过以下公式计算

    virtual_free = apparent_available_virtual_capacity = total_capacity * max_over_subscription_ratio - provisioned_capacity

    对于厚配置,只需使用物理容量。

  • 将池容量以及后端的总容量通知给 ceilometer 服务。容量通知包括 total/free/allocated/provisioned/virtual_free。

    对于报告“未知/无限”的后端,只需将其报告为“未知/无限”。

HostState 中的新方法

  • get_capacity() - 调用 get_pools() - 计算池的容量信息,然后对每个后端进行求和

备选方案

另一种替代方案可能是

  • 在调度器中创建一个新的数据表,用于描述容量信息到数据库。

  • 提供一个 cinder api,用于从数据库检索容量信息。

与该提案相比,调度器中的数据库写入操作可能会花费更多。

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

host_manager 中的 update_service_capabilities() 方法将调用 get_capacity() 并将通知发送到 ceilometer 服务。然后 ceilometer 服务可以生成容量样本。

其他最终用户影响

不适用。

性能影响

不适用。

其他部署者影响

不适用。

开发人员影响

  • 如果 Cinder 卷驱动程序能够报告 provisioned_capacity,这将更好。这将提高存储利用率的效率。注意:该提案将通过 provisioned_capacity 计算虚拟容量。否则,我们将计算物理容量。

实现

负责人

主要负责人

XinXiaohui

其他贡献者

工作项

  • 计算容量

    • 如果支持薄配置,则计算池的总 virtual_free 容量。

      virtual_free = apparent_available_virtual_capacity = total_capacity * max_over_subscription_ratio - provisioned_capacity

      否则,只需使用物理容量。

  • 通知每个池的容量(total/free/allocated/provisioned/virtual_free),并通知后端给 ceilometer 服务,如果后端报告“未知/无限”,则按原样报告。

依赖项

  • 该提案依赖于后端驱动程序的过度订阅机制。

测试

  • 将添加单元测试。

文档影响

无。

参考资料

https://etherpad.openstack.org/p/kilo-cinder-over-subscription https://etherpad.openstack.org/p/kilo-cinder-capacity-headroom