计算镜像虚拟大小¶
https://blueprints.launchpad.net/glance/+spec/calculate-virtual-size
应在镜像上设置 ‘virtual_size’,以避免在消费者节点上运行 qemu_img 操作。
问题描述¶
镜像表中的 images 表格中存在 virtual_size 字段,但除非我们使用 taskflow introspect 创建镜像,否则该字段永远不会被设置。Glance 的消费者,如 nova 或 cinder,在计算虚拟大小之前从不使用镜像,这意味着每次他们请求镜像时,都需要执行 qemu_img info 调用来计算镜像的虚拟大小。
用例:¶
应在镜像上设置 ‘virtual_size’,以避免在消费者节点上运行 qemu_img 操作。
提议的变更¶
所有支持的稀疏磁盘镜像格式(即 glance 所说的 disk_format)模拟比实际存储的数据更大的虚拟磁盘,并将该虚拟大小记录在元数据中。我们建议为每种格式添加一个处理程序,该处理程序可以在流式传输镜像时检查块,以提取相关元数据来确定虚拟磁盘大小。
在 glance 中,用户可以使用两种方式创建镜像。1) 创建镜像 API 2) 导入镜像 API
通过此更改,即使用户尝试使用上述两种方法之一创建镜像,虚拟大小也会被设置为镜像。此外,由 nova(nova-snapshot,除了 ‘direct-to-backend snapshot’)或 cinder(volume-upload-to-image)创建的镜像也能够将虚拟大小设置为镜像。
注意:首先,我们将仅为 container-format 为 bare 或其他 uncompressed 格式的镜像计算虚拟大小。 稍后,根据需要或预期,我们将为其他 container-format 进行增强。
我们将在此操作在上传镜像数据到 glance 存储期间执行,因此对于镜像导入,这将发生在实际导入阶段,而不是阶段阶段。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
danms
- 其他贡献者
无
评审人员¶
- 核心评审人
abhishek-kekane jokke rosmaita
- 其他审核员
whoami-rajat
工作项¶
为每种 disk-format 添加处理程序
为分块读取器添加包装器以计算虚拟大小
添加单元测试以进行覆盖
添加功能测试
依赖项¶
无
测试¶
Tempest 测试,用于验证使用 glance、nova snapshot 和 cinder upload-to-image 操作在镜像上设置虚拟大小。
文档影响¶
请参考 ‘其他部署者影响’