Spec Lite:添加对扩展已挂载(正在使用)卷的支持

项目:

glance_store

问题:

在 cinder store 中创建镜像时,我们会执行一系列 API 调用到 cinder,创建、挂载、卸载、扩展等卷。将镜像复制到卷的操作序列是:挂载卷,将镜像内容复制到卷中(直到卷中没有剩余空间),卸载卷,查看是否需要扩展(如果镜像大于当前卷的大小)并执行扩展。我们重复这些操作,直到整个镜像复制到卷中。卸载卷、扩展并重新挂载卷的部分效率非常低,因为我们需要为镜像的每个 1GB 执行此操作。对于某些后端,cinder 支持扩展已挂载(正在使用)的卷,我们应该使用它来优化镜像创建操作。支持扩展正在使用卷的 cinder 后端:https://docs.openstack.org/cinder/latest/reference/support-matrix.html#operation_online_extend_support

与此相关,另一个发现的问题是,由于 cinder 只支持扩展而不支持缩小,我们最终会每次扩展卷 1GB,最终花费更多时间来创建大型镜像。

解决方案:

我们将引入一个新的配置选项,cinder_do_extend_attached,这将是一个布尔选项。如果他们使用的 cinder 后端支持扩展已挂载卷,操作员可以将其设置为 true。默认值将是 false。如果我们将 cinder_do_extend_attached 设置为 true,我们将使用微版本 3.42 调用 cinder os-extend API,这将允许我们扩展已挂载的卷。最后,我们将调用 os-brick 的 extend_volume 方法,以指示内核在主机上调整卷的大小。

其他工作

为了解决与 1GB 调整大小相关的问题,cinder store 已经处理了大小,如果 glance 正确传递了大小,我们会使用镜像大小初始化卷大小,从而避免不必要的扩展操作。因此,glance 需要更新以将正确的镜像大小传递给 cinder store。

影响:

替代方案:

时间线:

2023.1

链接:
审核人员:

Abhishek Kekane, Brian Rosmaita, Dan Smith, Erno Kuvaja

负责人:

Rajat Dhasmana (whoami-rajat)