支持 cinder 中的快照导入/导出

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/cinder/+spec/support-import-export-snapshots

提供一种导入/导出快照的机制。导入/导出快照功能可以作为导入/导出卷功能的补充。

问题描述

导入/导出快照功能

  • 它可以提供从一个 cinder 导入卷快照到另一个 cinder 的能力,以及将已经存在于后端设备上的“非”OpenStack 快照导入到 OpenStack/cinder 的能力。

  • 导出快照的工作方式与导出卷相同。

优势

  • 我们可以将导入的快照作为卷模板来创建卷。

  • 导入快照功能可以提供一种有效的管理导入卷的方式。

    ::

    对于那些无法删除带有快照的卷的卷驱动程序,我们无法删除带有快照的导入卷。通过使用导入快照功能导入快照,我们可以首先删除导入的快照,然后删除导入的卷。

用例

提议的变更

通过支持快照的导入/导出,我们需要进行以下更改。

  • 添加快照导入/导出 API。

  • 添加快照导入/导出工作流。

    ::

    导入快照会检查快照的父卷是否存在于 cinder 中。如果不存在,则会引发 NotFound 异常。如果快照在卷后端不存在,或者卷没有相关的快照,则会引发 ManageExistingInvalidReference 异常。目前导入快照功能不支持导入那些没有父卷的快照(通常由存储的快照克隆操作创建)。我们应该使用导入卷功能来导入没有父卷的快照。

    导出快照的工作方式几乎与删除快照相同,但它不会删除快照数据。对于那些可以直接强制删除带有快照的卷的卷驱动程序,导出快照功能没有副作用。对于那些无法删除带有快照的卷的卷驱动程序,导出快照功能有一个副作用,会导致删除卷失败。对于 LVM 驱动程序和 RBD 驱动程序,如果取消管理卷的快照并删除卷,删除操作将失败,并且卷的状态将变为可用,因为这两个驱动程序在卷具有快照时不会继续删除卷。驱动程序向卷管理器引发 VolumeIsBusy 异常,并且卷管理器将卷的状态重置为可用。

  • 在卷驱动程序中添加 manage_existing_snapshot、manage_existing_snapshot_get_size 和 unmanage_snapshot 接口,并在 LVM 驱动程序中实现这两个接口。

备选方案

数据模型影响

REST API 影响

  1. 添加一个 API “manage_snapshot”

在 v2 中的 REST API 如下所示

  {
      'snapshot':{
      'host': 'cinder-volume',
      'volume_id': 'volume-058660ab-6771-4f82-9627-687b179175d6'
      'ref': '_snapshot-058660ab-6771-4f82-9627-687b179175d6'
      }
  }

* The <string> 'host' means cinder volume host name.
  No default value.

* The <string> 'volume_id' means the import snapshot's volume id.
  No default value.

* The <string> 'ref' means the import snapshot name
  exist in storage back-end.
  No default value.

它的响应体如下所示

  {
      "snapshot": {
          "status": "creating",
          "description": null,
          "created_at": "2014-08-25T11:14:31.469591",
          "metadata": {},
          "volume_id": "fbd83a45-cce7-4333-b991-dafd2251edd4",
          "size": 1,
          "id": "71543ced-a8af-45b6-a5c4-a46282108a90",
          "name": null
      }
  }

* The <string> 'status' will be creating.
* The <string> 'description' means the import snapshot display name.
* The <date> 'created_at' means the import time.
* The <map> 'metadata' means the snapshot's metadata.
* The <string> 'volume_id' means the snapshot's volume id.
* The <string> 'id' means the snapshot's id.
* The <string> 'name' means the alias of snapshot id.
  1. 添加一个 API “unmanage_snapshot”。

在 v2 中的 REST API 如下所示

POST /v2/{project_id}/os-snapshot-manage/{id}/action
{
    'os-unmanage':{}
}

当请求成功时,状态码将为 HTTP 202。

安全影响

通知影响

无。

其他最终用户影响

  1. 用户可以导入已经存在于卷后端中的快照。

  2. 导出快照功能对于那些无法删除带有快照的卷的卷驱动程序具有副作用。如果使用导出快照功能,会导致后续的删除卷操作失败。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

ling-yun<zengyunling@huawei.com>

工作项

  • 实现“Proposed change”中提到的代码。

  • 在 python-cinderclient 中实现代码。

  • 添加更改 API 文档。

依赖项

测试

需要创建单元测试和 Tempest 测试来覆盖“Proposed change”中提到的代码更改,并确保在引入导入/导出快照时 Cinder 快照功能正常工作。

文档影响

  1. Cinder API 文档需要更新以反映 REST API 的更改。

  2. 添加导出快照功能的副作用。

参考资料