调整加密卷大小¶
https://blueprints.launchpad.net/cinder/+spec/sizing-encrypted-volumes
问题描述¶
如果您有一个未加密的卷并迁移到加密类型,则会失败,因为目标上没有足够的空间来容纳整个源卷。这是因为加密卷必须有一个头部,这会占用一些空间。
实际上,确切的损失空间量尚不清楚,它可能因 LUKSv1/LUKSv2 和 PLAIN dm-crypt 格式而异。它可能在 1-2 MB 左右,但我们以 GB 为单位分配空间。是否可以进行非常细粒度的空间分配可能取决于包含该卷的后端。但是,我们还需要为了会计目的(使用量、配额、费用等)保留千兆字节边界,因为这是每个人工具所期望的。
此外,驱动程序以不同的方式优化迁移,并且由于我们之前没有新的大小参数,因此无法轻松地将此信息传递到驱动程序中。
考虑到所有因素,我们可以有一个标志,指示如果重新类型化成功需要增加卷的大小,则可以这样做。 这样我们就不会在用户不知情的情况下进行操作——如果卷不合适,我们会失败,如果他们希望重新类型化成功,则允许他们重新类型化为新大小。
用例¶
这里的核心用例是在升级旧部署时,希望在升级后加密旧卷。
提议的变更¶
manager.py 将创建一个更大的目标卷,大小为
GB,如果标志 ‘allow-resize==on_demand’ 并且目标卷类型已加密。 使用块设备时,驱动程序特定的方法 ‘_copy_volume_data’ 用于复制卷数据(即 LVM 仍将使用实际的 _migrate_volume_generic)。此方法将在卷迁移期间的 _before_volume_copy 之后调用。
RPC 次要版本,用于新参数 3.x - 将 allow_resize 添加到 retype 方法,并将 increase_size 添加到 migrate 方法。
将一个新的可选字段“allow_resize”添加到 os-retype 操作。可能的值将是“on-demand”或“never”(与当前的“migration_policy”字段相同)。如果未指定,则默认值为“never”。
将一个新的可选字段“increase_size”添加到 os-migrate 操作。操作员指定卷增长多少 GB(因此最终大小为当前大小 + increase_size)。
将以下参数添加到 Python-cinderclient 的 retype 和 migrate 命令
Retype:新的标志
--allow-resize指示如果重新类型化成功需要增加卷的大小,则可以这样做。Optional Arguments: --allow-resize <never|on-demand> Allow the volume to be increased in size during the retype if the system decides it is necessary. This argument is recommended when retyping to an encryption type. ...
Migration:允许在卷迁移期间指定新的大小。添加了新的可选参数
--increase-size'Optional Arguments: --increase-size [<size>] Number of GiBs to grow the volume during migration. This is recommended when migrating to an encrypted host. ...
卷显示的实际大小将是卷的实际大小。
备选方案¶
保持一切不变,不允许这种迁移。为了帮助用户,在文档中添加一些解决方法(例如,备份卷,然后将卷恢复到更大的卷)。如上文问题描述中所述,不允许小于 1GB 的大小增加。
数据模型影响¶
无
REST API 影响¶
微版本更新
应将新参数传递给 retype 和 migrate 命令,如“拟议的更改”部分中所述。
安全影响¶
无。如果您被允许迁移,您应该能够增加大小,如果您被允许重新类型化,您应该能够 allow-resize。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Sofia Enriquez <lsofia.enriquez@gmail.com>
工作项¶
在 cinder 中实现新的逻辑
在 python-cinderclient 中实现新的逻辑
单元测试
Tempest 测试
依赖项¶
无
测试¶
单元测试和当前的基于 devstack 的作业不足以测试这些更改。至少应在 cinder_tempest_plugin/api/volume/admin/test_volume_retype.py 中添加两个测试
将未加密的卷重新类型化为 LUKS 类型。
将加密的 LUKS 卷重新类型化为常规类型。
文档影响¶
目前,我添加了一些文档说明,警告关于重新类型化未加密/加密卷。但是,这些说明应替换为正确的文档。
要删除的注释 - https://review.opendev.org/#/c/732988/ - https://review.opendev.org/#/c/745199/