支持从备份创建卷¶
https://blueprints.launchpad.net/cinder/+spec/support-create-volume-from-backup
此蓝图建议支持从备份创建卷。
问题描述¶
Cinder 已经支持从卷、快照和镜像创建卷。但是,在考虑从备份创建卷时,用户必须先创建一个新卷,然后使用备份恢复该卷。虽然我们可以无需卷 ID 即可恢复备份,但在这种情况下,Cinder 会在后台创建一个新卷,但我们仍然存在一些问题,因为我们无法控制卷的可用区 (az)、卷类型、大小以及许多其他属性。
用例¶
用户可以直接从备份创建卷,而不是先创建一个新卷再恢复它。
提议的变更¶
此规范建议支持从备份创建卷,在此更改之后,用户可以使用备份 ID 直接创建一个新卷,如下所示
$ cinder create [size] --backup-id <id> [other_options]
如果省略 size 选项,卷的大小将等于备份原始卷的大小。
由于我们已经引入了通用的备份实现 [1] 用于我们现有的卷驱动程序,因此为我们的卷驱动程序添加此功能是有意义的。因此,当从备份创建卷时,请求将像往常一样调度到卷后端,并且我们首先会尝试供应商特定的 create_volume_from_backup 方法,如下所示
def create_volume_from_backup(self, volume, backup):
"""Creates a volume from a backup."""
raise NotImplementedError()
如果驱动程序报告 NotImplemented 或 NotSupported,Cinder 将直接在后端创建原始卷,然后将请求调度到备份服务以使用备份恢复卷。
从快照创建卷和从备份创建卷之间的区别之一是后者可能耗时较长,因此我们需要更新备份的状态以防止其他请求的可能使用。例如,在从备份创建卷时,卷和备份的可能状态是
1. Volume: creating, available, error
2. Backup: restoring, available, error
注意:为了不暴露创建细节,我们将在这里使用“创建中”代替“正在恢复备份”作为卷的转换状态。
备选方案¶
继续使用当前的恢复 API 或创建和恢复机制来涵盖此用例。
数据模型影响¶
无
REST API 影响¶
此更改需要 Microversion 升级。
Cinder 客户端影响¶
Cinder-client 将更新以支持从备份创建卷。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
当从备份创建卷并且不存在供应商特定的方法时,由于恢复操作,创建过程可能比典型的创建过程稍长。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
主要负责人
luqitao (qtlu@fiberhome.com)
tommylikehu(tommylikehu@gmail.com)
工作项¶
在 Cinder 中支持从备份创建卷。
添加相关的单元测试用例。
添加相关的 tempest 测试用例。
更新 cinder-client 和 OSC。
依赖项¶
依赖于通用的备份实现 [1]
测试¶
添加单元测试以涵盖从备份创建卷。
文档影响¶
API 文档和 CLI 文档都应更新。