配置可附加的最大卷数¶
https://blueprints.launchpad.net/nova/+spec/conf-max-attach-volumes
目前,libvirt 驱动程序存在限制,将单个实例可附加的最大卷数限制为 26 个。根据虚拟驱动程序和操作员环境的不同,操作员希望能够将超过 26 个卷附加到单个实例。我们建议添加一个配置选项,操作员可以使用该选项来选择允许附加到单个实例的最大卷数。
问题描述¶
我们收到客户要求能够将超过 26 个卷附加到单个实例,并且我们看到用户尝试附加超过 26 个卷时打开了 launchpad 错误(请参阅 参考)。由于任何数量的卷的支持性在很大程度上取决于使用的虚拟驱动程序和操作员的特定环境,我们建议让操作员配置最大值。选择合适的最大数量需要使用特定的虚拟驱动程序和部署环境进行调整,因此我们希望操作员设置最大值、测试、调整和调整配置选项,直到最大值在他们的环境中工作良好为止。
用例¶
操作员希望能够将最大数量的卷附加到单个实例,并能够选择针对其环境进行了良好调整的最大值。
提议的变更¶
当用户尝试使用 libvirt 驱动程序附加超过 26 个磁盘设备时,附加操作将在 nova-compute 中的 reserve_block_device_name 方法中失败,该方法最终由 nova-api 中的 attach_volume 方法调用。reserve_block_device_name 方法调用 self.driver.get_device_name_for_instance 以获取用于附加卷的下一个可用设备名称。如果驱动程序已实现该方法,则在这里尝试超出允许的最大磁盘设备数量将失败。libvirt 驱动程序在附加了 26 个磁盘设备后失败。尚未实现 get_device_name_for_instance 的驱动程序似乎没有限制磁盘设备的最大数量。get_device_name_for_instance 的默认实现位于 nova.compute.utils 模块中。只有 libvirt 驱动程序提供了其自己的 get_device_name_for_instance 实现。
reserve_block_device_name 方法是一个同步 RPC 调用(不是 cast)。这意味着我们可以为每个 nova-compute 设置不同的配置允许的最大值,并且仍然可以在 API 中快速失败,如果附加卷请求期间已超过最大值。
对于服务器创建、重建、撤离、卸载或实时迁移请求,如果已超过最大值,服务器将进入 ERROR 状态,服务器错误消息将指示失败原因。
请注意,libvirt 驱动程序中的限制实际上是单个实例允许附加的总磁盘设备数量,包括根磁盘和任何其他磁盘。它不区分卷和其他磁盘。
我们建议添加一个新的配置选项 [compute]max_disk_devices_to_attach IntOpt,用于配置每个 nova-compute 允许附加的最大磁盘设备数量。这样,操作员可以根据他们运行的虚拟驱动程序和部署环境来适当地设置它。默认值将设置为无限制 (-1),以保持所有驱动程序(libvirt 驱动程序除外)的当前行为。
配置选项将在 get_device_name_for_instance 方法中强制执行,使用已附加的磁盘设备数量的计数。失败后,将通过同步 RPC 调用将异常传播到 nova-api,用户将收到 403 错误(而不是当前的 500 错误)。
备选方案¶
我们可以解决此问题的方法包括:仅为 libvirt 驱动程序选择一个新的硬编码最大值,或创建新的配额限制“允许附加的最大磁盘设备数量”(请参阅 参考 中的 ML 线程)。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
部署者将能够设置 [compute]max_disk_devices_to_attach 配置选项,以控制允许附加到单个实例的磁盘设备数量,每个 nova-compute 在其部署中。
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
melwitt
- 其他贡献者
yukari-papa
工作项¶
添加一个新的配置选项
[compute]max_disk_devices_to_attach,IntOpt修改(或删除)libvirt 驱动程序的
get_device_name_for_instance方法的实现,以适应超过 26 个磁盘设备将
[compute]max_disk_devices_to_attach的强制执行添加到get_device_name_for_instance方法添加对 API 中引发的异常的处理,以便在超过允许的最大磁盘设备数量时向用户翻译为 403
依赖项¶
无
测试¶
新的功能将通过新的单元和功能测试进行测试。
文档影响¶
新配置选项的文档将自动包含在生成的配置参考文档中。
参考资料¶
历史¶
可选部分,旨在每次更新规范时使用,以描述新的设计、API 或任何数据库模式更新。有助于让读者了解随着时间的推移发生了什么。
发布名称 |
描述 |
|---|---|
Stein |
引入 |