附加/分离卷而不使用 Nova

https://blueprints.launchpad.net/cinder/+spec/use-cinder-without-nova

像 Ironic 这样的服务希望使用 Cinder 而不使用 Nova。此外,将 Cinder 卷附加到 Nova/Ironic 实例之外的实例也会很有用:例如,创建一个简单的 CLI 工具,将卷附加到某个主机(虚拟机、工作站等)到 OpenStack 云之外。

问题描述

目前没有一个工具可以自动执行所有附加/分离过程而不使用 Nova。

用例

  • 将卷附加到 Ironic 实例

  • 将卷附加到任何未由 Nova 或 Ironic 配置的虚拟/裸机主机

  • 将卷附加到 Magnum 容器

  • 将卷附加到 Docker 容器

提议的变更

提供一个命令行 (CLI) 工具和 Python API,它可以与 Cinder 交互并将卷附加到本地主机。它将作为 python-cinderclient 扩展实现,并且如果未用到扩展,则不需要添加任何依赖项。此扩展默认情况下不会安装。用户可以使用 PIP 或操作系统包管理工具进行安装

pip install python-brick-cinderclient-ext

CLI 接口示例:

cinder local-attach <volume_id>
cinder local-detach [--attachment-id attachment-id] <volume_id>
cinder get-connector

在 Ironic 的情况下,当我们不想在用户的实例中安装任何软件包时。用户可以通过 pip 或操作系统包管理器(apt、yum 等)自行安装软件包。

执行此命令后,cinder 客户端将调用 Cinder API 将卷状态更改为“in-use”,因为我们不知道用户何时会将卷附加到主机。

卷附加

cinder local-attach [--mountpoint /mnt/disk]
                    [--multipath True]
                    [--enforce-multipath True]
                    [--mode rw]
                    <volume_id>

卷分离

cinder local-detach [--attachment-id id]
                    [--multipath True]
                    [--enforce-multipath True]
                    [--device-info device-info]
                    <volume_id>

“attachment_uuid” 选项仅在多重附加场景中是必需的。

分离过程应包含以下步骤

  • disconnect_volume

  • terminate_connection 带有 ‘force’ 标志

  • detach

强制分离功能不在本规范的范围内,将在单独的规范中描述。

获取连接器详细信息

cinder get-connector

由于挂载/卸载是仅管理员操作,我们需要以 root 用户身份运行 python-cinderclient,以避免添加 oslo.rootwrap 依赖项。

备选方案

  1. Cinder 已经拥有所有必需的 API。任何 API 消费者都可以使用现有方法在不使用 Nova 的情况下实现附加/分离操作。

  2. 我们可以在新的 python-brickclient 中实现所需的 API。

  3. 我们可以在 python-cinderclient 项目中引入一个新的二进制文件(例如:brick)。在这种情况下,我们将拥有一个存储库中的两个不同的客户端。从打包者的角度来看,这将增加可能的 python-cinderclient 包的数量。例如:python-cinderclient-iscsci、python-cinderclient-rbd 等。

数据模型影响

REST API 影响

安全影响

待定

通知影响

其他最终用户影响

此更改将为 python-cinderclient 提供新的 CLI 选项和 Python。

性能影响

其他部署者影响

  • 部署者可以安装新的软件包以获得新的功能

开发人员影响

  • 所有驱动程序都应实现 initialize_connection,可以多次调用它而不会产生任何副作用。我们已经为一些驱动程序提交了错误报告。

实现

负责人

主要负责人

Ivan Kolodyazhny <e0ne>

工作项

  • 基于 python-cinderclient 实现概念验证

  • 获取反馈并完成规范

  • 修复规范中的错别字

  • 如果需要,对 Cinder API 进行更改

  • 需要单元测试和 Tempest 测试

  • 将在 python-cinderclient gates 上实现功能测试

  • 需要一个新的 python-brick-cinderclient-ext 存储库

依赖项

  • os-brick

  • python-cinderclient

  • Linux:open-iscsi、ceph-common、nfs-common 或其他工具,用于通过驱动程序的协议附加和分离卷 Windows:Windows 工具,能够通过驱动程序的协议附加和分离卷。

测试

  • 应实现单元测试

  • 新的 python-cinderclient API 将通过 gates 上的功能测试进行测试,以测试不使用 Nova 实例的附加/分离功能。

  • 将实现 Ironic 的功能测试,以测试附加/分离到 Ironic 实例的功能。

文档影响

用户手册将更新,包含有关 python-cinderclient 扩展的信息。

参考资料