NFS 快照

https://blueprints.launchpad.net/cinder/+spec/nfs-snapshots

为 NFS 卷驱动程序添加快照支持(创建、删除、从快照克隆),使其功能与其他 Cinder 驱动程序一样。

问题描述

NFS 驱动程序不支持现代 Cinder 驱动程序中预期的许多功能。

  • 创建快照

  • 删除快照

  • 从快照克隆

用例

提议的变更

如何在 GlusterFS 驱动程序中实现快照的基本模型已经得到验证。这里的总体思路是重用相同的模型和大部分代码用于 NFS 驱动程序,该驱动程序在总体上与 GlusterFS 驱动程序的工作方式相同。

在 Juno 中,大部分与快照相关的代码被重构到 RemoteFSSnapshot 类中。

NFS 驱动程序应从这个基类继承代码(并可能进行小的更改)以获得快照支持。

备选方案

没有真正的替代方案,基本的 NFS 服务器没有快照文件的能力。这种方法已经在其他 Cinder 驱动程序中使用并且有效,所以唯一的替代方案是决定我们不想为这个驱动程序提供快照。

数据模型影响

REST API 影响

没有重大影响。

initialize_connection 将返回额外的字段,指定卷文件的格式,以便 Nova 知道如何正确地附加它。

安全影响

无,请参阅此处说明。

此更改需要使用 Kilo 中添加的 NFS 安全基础设施进行测试,以确保没有任何问题,并且在快照操作之前、期间和之后的所有文件都具有预期的权限。没有理由期望这里出现问题。

在 Juno 中,解决了一个与 qcow2 文件处理相关的安全问题。( https://bugs.launchpad.net/cinder/+bug/1350504

现在从安全角度来看,这个问题已经解决,因为没有已知的方法可以利用它,但仍在“支持存储卷格式信息”规范中以更强大的方式进行修复。这项工作可以并行进行,因为这里没有严格的依赖关系。( https://review.openstack.org/#/c/103750/

通知影响

其他最终用户影响

我们尚未支持基于 qcow2 的卷的备份。(不确定是否在 Kilo 中另有目标。)

性能影响

NFS 驱动程序需要一个按卷 ID 的锁,用于操作和修改卷/快照数据。这不会导致现有功能的任何性能下降,并且在大多数使用快照的场景中不应该是一个大问题。

参见 https://review.openstack.org/#/c/106095/ (GlusterFS 示例)

其他部署者影响

新的配置选项 nfs_qcow2_volumes,用于指定是否希望始终将卷文件创建为 qcow2 镜像,而不是原始镜像。

开发人员影响

实现

负责人

主要负责人

eharney 和 akerr(?)

其他贡献者

NetApp 指示他们将 CI 此驱动程序。(bswartz)

工作项

  • 尝试将 RemoteFSSnapshot 代码继承到 NFS 驱动程序中。

  • 迭代解决那里的问题。

  • 测试安全问题。

依赖项

存储卷格式信息:https://review.openstack.org/#/c/103750/
  • 不是严格的依赖关系,哪个先着陆并不重要,但这项工作也需要在 Kilo 中与这项工作一起完成,并且密切相关。

我将提交另一个规范,解决 Cinder 和 Nova 之间的快照 API,该 API 将在这里使用,但那里的内容不会阻止这项工作。

测试

NFS 驱动程序的标准第三方 CI

考虑将此作为后续工作进行 in-gate 测试

文档影响

新的配置选项 nfs_qcow2_volumes。

参考资料

最初的快照工作,此工作在此基础上进行

https://blueprints.launchpad.net/cinder/+spec/qemu-assisted-snapshots

RemoteFS 快照代码重构,为支持这项工作而完成

https://review.openstack.org/#/c/106066/

SMBFS 卷驱动程序,是另一个重用此代码的驱动程序的示例

https://review.openstack.org/#/c/106046/