容量余量¶
包含您的 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