支持从 Cinder 卷下载和上传¶
https://blueprints.launchpad.net/glance/+spec/cinder-store-upload-download
当前的 Glance Cinder 后端驱动程序只能获取卷的大小,但不支持卷的读取、写入和删除。
由于 Cinder 侧缺失的部分(在 [1] 中列出:os-brick 库、readonly-volumes、multi-attach)现在都已支持,因此我们可以实现其读取(下载)、写入(上传)和删除功能。
当原始镜像备份在 cinder 存储上时,可以通过克隆镜像卷来创建一个新的卷。这将有助于快速启动从卷启动的实例,因为某些 Cinder 驱动程序可以使用写时复制技术高效地克隆卷。它还将改进支持薄配置的驱动程序的存储容量。[3]
请注意,镜像卷本身不打算用作实例的启动卷。镜像卷被标记为只读,因此无法以读写模式附加到实例。相反,应使用克隆卷来启动实例。
问题描述¶
如果没有 Glance Cinder 后端驱动程序的上传、下载和删除支持,就无法将其用作默认存储。
提议的变更¶
本规范建议实现将镜像上传到 Cinder 卷以及从 Cinder 卷下载镜像,并在删除镜像时删除卷。
上传步骤
创建一个大小足以存储镜像的新卷。它将放置在 glance-api.conf 中指定的租户中。
使用 os-brick 库将新卷附加到 glance-api 主机。
os-brick 库收集连接器(主机)信息,例如 iSCSI 的发起者 IQN 或 FibreChannel 的 WWN。
使用连接器信息和卷作为参数调用 Cinder 的
initialize_connectionAPI,以获取卷连接信息,例如 iSCSI 的目标门户 IP 地址和 IQN。将连接信息传递给 os-brick 的
connect_volume方法,以将卷附加到主机。返回卷设备信息,例如设备路径(例如/dev/sdX)。此步骤需要 root 权限才能执行 iSCSI、FC 等命令,因此必须安装glance-rootwrap,并且它应该允许 os-brick 的命令。[2]
将镜像数据从给定的设备路径写入卷。
从主机分离卷。
调用 os-brick 的
disconnect_volume方法和 Cinder 的terminate_connectionAPI 以删除卷连接。
将卷标记为只读。
添加卷元数据,以指示镜像大小、镜像 ID、镜像所有者(即使它放置在服务租户中,也要跟踪所有者)。例如:
{ 'image_id': 'e38f5596-4bd3-4b63-b4ef-88bcc814ed8e', 'image_owner': 'b58fffa08b4242988c42950b5f24fcd5', 'image_size': '228599296', }
下载步骤
将镜像卷作为只读附加到 glance-api 主机。
从卷读取镜像数据。
分离卷。
删除步骤
当删除镜像时,调用 Cinder 的
deleteAPI 以删除卷。
由于 cinder 当前不支持租户之间的 ACL 或公共卷,为了支持公共或可共享的镜像,镜像卷应放置在只能从 Glance 和 Cinder 服务访问的服务租户中,以控制可访问性。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
为了附加和分离卷到主机,需要 root 权限才能操作主机上的块设备。Glance 需要导入 oslo-rootwrap,以仅允许执行这些操作所需的命令作为 root 用户执行。
Glance 节点必须是存储网络(iSCSI、FC 等)的一部分。从理论上讲,这可能会打开每种方式的新攻击向量。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
当从 Glance Cinder 存储中存储的镜像创建新的 Cinder 卷,或从卷创建新的镜像时,如果满足某些条件(例如,存储在 Cinder 后端中的镜像以原始格式存储),Cinder 能够使用存储阵列功能(例如后台复制或写时复制)卸载镜像复制。这将显著提高镜像复制的性能。
如果部署了 Cinder,Nova-compute 将能够通过将镜像卷附加到主机来绕过镜像复制。
请注意,镜像上传/下载需要 cinder 存储的足够带宽。
其他部署者影响¶
要使用 cinder 后端,Glance 节点必须能够访问后端存储,并且可能需要额外的硬件连接(iSCSI、FC 等)。操作员必须适当地配置 cinder 和 glance-api.conf。
要启用 cinder 存储,必须将
cinder添加到 glance-api.conf 中的stores选项。要将镜像卷放置到特定的租户中,还必须提供该租户的身份验证信息。
必须安装 glance-rootwrap。rootwrap 配置路径还应在 glance-api.conf 中配置。
为了将卷创建上的镜像复制卸载到存储阵列,cinder.conf 中的
allowed_direct_url_schemes选项应包含cinder。[3] 此外,glance-api 主机必须能够将 Cinder 卷附加到自身。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
tsekiyam
评审人员¶
- 核心评审人
flaper87
工作项¶
将 os-brick 和 oslo-rootwrap 导入到 glance_store 中。
扩展当前的 cinder 后端驱动程序以支持上传、下载和删除。
依赖项¶
无
测试¶
在 devstack 中启用 cinder 后端。
测试将镜像上传到 cinder 后端。
然后再次测试下载镜像。
删除镜像并检查是否删除了卷。
测试其他正常的 glance 存储操作,例如所有者更改和共享。
文档影响¶
文档应扩展为描述如何启用和使用 cinder 存储。特别是,它应该解释配置 cinder 身份验证(租户 ID、用户名、密码)的新选项,以将卷存储到特定的租户中。
它还需要涵盖 Glance 节点是存储网络(iSCSI、FC 等)的一部分以及具有足够的存储带宽的要求。