附加/分离卷而不使用 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 依赖项。
备选方案¶
Cinder 已经拥有所有必需的 API。任何 API 消费者都可以使用现有方法在不使用 Nova 的情况下实现附加/分离操作。
我们可以在新的 python-brickclient 中实现所需的 API。
我们可以在 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 扩展的信息。
参考资料¶
http://lists.openstack.org/pipermail/openstack-dev/2015-July/068763.html
https://etherpad.openstack.org/p/liberty-cinder-ironic-integration
https://blueprints.launchpad.net/ironic/+spec/volume-connection-information
python-brickclient 概念验证实现:https://github.com/e0ne/python-brickclient
Cinder 会议纪要:http://goo.gl/ztuYTa
http://eavesdrop.openstack.org/meetings/cinder/2015/cinder.2015-11-11-16.00.log.html