允许 Manila 共享直接附加到使用 libvirt 的实例¶
https://blueprints.launchpad.net/nova/+spec/libvirt-virtiofs-attach-manila-shares
Manila 是 OpenStack 共享文件系统服务。此规范将概述 Nova 中所需的 API、数据库、计算和 libvirt 驱动程序更改,以允许 Manila 提供的共享与实例关联并附加到实例。
问题描述¶
目前用户必须手动连接并挂载 Manila 提供的共享资源到他们的实例中。因此,Manila 必须暴露后端存储基础设施的细节,并允许数据路径通过租户可寻址的网络流向用户的实例。
作为替代方案,Nova 可以将这些共享资源挂载到底层计算主机上,然后将提供的文件系统传递到实例,使数据路径远离任何租户可寻址的网络,并且无需暴露后端存储基础设施的细节。
用例¶
作为用户,我希望将 Manila 共享直接附加到我的实例,并拥有一个简单的界面来在实例中挂载它们。
作为用户,我希望从我的实例分离直接附加的 Manila 共享。
作为用户,我希望跟踪附加到我的实例的 Manila 共享。
作为操作员,我希望 Manila 数据路径与任何租户可访问的网络分离。
作为运维人员,我不想向用户暴露我的存储基础设施的细节。
提议的变更¶
此初始实现仅提供对附加共享到现有 SHUTOFF 实例的支持,以及稍后分离共享的支持。在实例的初始创建过程中表达附件的能力不在本规范的涵盖范围内。
本规范不包含共享资源附加后的移动操作的支持。任何请求对附加了共享资源的实例进行 shelve、evacuate、resize、cold migrate 或 live migrate 的操作,目前都将被拒绝。
将在新的微版本下引入一个新的服务器 shares API。这将列出当前共享,显示其详细信息,并允许附加或分离共享。
将引入一个新的 share_mapping 数据库表和相关的 ShareMapping 版本化对象,以捕获共享附件的详细信息。将提供一个基础 ShareMapping 版本化对象,可以从中派生 virt 驱动程序和后端共享特定的对象,从而提供特定的共享附加和分离实现。
注意
需要注意的是,Nova 内部不会存储任何 Manila 状态,除了用于初始附加共享的导出详细信息。稍后在分离共享时将使用这些详细信息。如果共享随后重新附加,Nova 将从 Manila 请求新的导出详细信息,并在 Nova 中新的共享附件中存储这些信息。
libvirt 驱动程序将被扩展以支持上述内容,并初步支持冷附加和分离。未来的工作将旨在添加实时附加和分离,一旦 libvirt 本身支持。
此初始 libvirt 支持将针对 Manila 中的基本 NFS 和更复杂的 CephFS 后端。共享将通过 virtio-fs 映射到基础 libvirt 域。这需要计算主机上的 QEMU >=5.0 和 libvirt >= 6.2,以及实例客户机操作系统内的 >= 5.4 的内核版本。
此外,此初始实现需要关联的实例使用 文件支持的内存 或 大页。这是 virtio-fs 的要求,因为 virtiofsd 服务使用 vhost-user 协议直接与底层客户机通信。
将引入两个新的计算兼容性特征来模拟单个计算对 virtio-fs 和文件支持内存的支持。
COMPUTE_STORAGE_VIRTIO_FSCOMPUTE_MEM_BACKING_FILE
然后,这些特征将与实例关联的 flavor 和 image metadata 一起使用,以确保在请求附加共享资源期间满足上述要求。
未来的工作将着眼于取消此要求,并引入一种更强大的方法来通过 flavor extra specs 和 image properties 允许访问底层客户机内存,但这超出了本规范的范围。
用户可以使用挂载标签挂载附加的共享资源,这可以是来自 Manila 的共享资源 UUID,也可以是用户在其附加共享资源的请求中提供的字符串。
user@instance $ mount -t virtiofs $tag /mnt/mount/path
最初的实现不会创建先前讨论的 os-share 库,但如果底层主机上挂载和跟踪共享所需的逻辑也由其他项目需要,则将来可以创建它。目前,libvirt 驱动程序中现有的代码 用于跟踪基于 remoteFS 的存储(例如 NFS、SMB 等)托管的卷使用的文件系统主机挂载,将尽可能地重用。
备选方案¶
唯一的替代方案是继续当前的情况,即用户必须手动在他们的实例中挂载共享。缺点是这些实例必须能够访问 Manila 后端使用的存储网络。
REST API 影响¶
将在新的微版本下引入一个新的服务器级别 shares API,其中包含以下方法
GET
/servers/{server_id}/shares
列出附加到实例的所有共享。
返回代码:200、400、401、403、404
{
"shares": [
{
"shareId": "48c16a1a-183f-4052-9dac-0e4fc1e498ad",
"status": "attached",
"tag": "foo"
},
{
"shareId": "e8debdc0-447a-4376-a10a-4cd9122d7986",
"status": "attached",
"tag": "bar"
}
]
}
GET
/servers/{server_id}/shares/{shareId}
显示附加到实例的特定共享的详细信息。
返回代码:200、400、401、403、404
{
"share": {
"shareId": "e8debdc0-447a-4376-a10a-4cd9122d7986",
"status": "attached",
"tag": "bar"
}
}
管理员将能够查看存储在 Nova 中的附件 ID 和导出位置的详细信息
{
"share": {
"attachmentId": "715335c1-7a00-4dfe-82df-9dc2a67bd8bf",
"shareId": "e8debdc0-447a-4376-a10a-4cd9122d7986",
"status": "attached",
"tag": "bar",
"export_location": "server.com/nfs_mount,foo=bar"
}
}
POST /servers/{server_id}/shares
将共享附加到实例。
先决条件:实例必须处于 SHUTOFF 状态。
这是一个异步 API,调用者需要轮询上述 GET 方法之一,以确定附件何时完成。
返回代码:202、400、401、403、404、409
请求主体
注意
tag 将是一个可选的请求参数,如果未提供,它将始终如请求中提供的一样是 shareId。
{
"share": {
"shareId": "e8debdc0-447a-4376-a10a-4cd9122d7986",
}
}
响应体
{
"share": {
"shareId": "e8debdc0-447a-4376-a10a-4cd9122d7986",
"status": "attaching",
"tag": "e8debdc0-447a-4376-a10a-4cd9122d7986",
}
}
DELETE /servers/{server_id}/shares/{shareId}
将共享从实例分离。
先决条件:实例必须处于 SHUTOFF 状态。
返回代码:202、400、401、403、404、409
数据模型影响¶
将引入一个新的 share_mapping 数据库表。
id- 用于标识特定共享资源附件的唯一 UUIDinstance_uuid- 共享将附加到的实例的 UUIDshare_id- Manila 中的共享的 UUIDstatus- Nova 中共享资源附件的状态。-detached-attaching-attached-detaching-errortag- 用户在实例中挂载共享资源时要使用的设备标签实例
export_location- 用于将共享资源附加到底层主机的导出位置。
将引入一个新的基础 ShareMapping 版本化对象,以封装上述数据库条目,并用作特定 virt 驱动程序实现的父类。
此基础 ShareMapping 对象将提供存根 attach 和 detach 方法,任何子对象都需要实现这些方法。
将引入新的 ShareMappingLibvirt、ShareMappingLibvirtNFS 和 ShareMappingLibvirtCephFS 对象作为 libvirt 实现的一部分。
安全影响¶
通过移除数据路径中的租户网络,同时消除用户了解底层存储环境细节的需求,这将改进使用 Manila 的安全模型。
Manila 返回并用于将共享资源附加到底层主机的 export_location JSON blob 不应被 Nova 记录,并且默认情况下只能通过 API 被管理员访问。
通知影响¶
将添加新的通知来表示将共享资源附加到实例和从实例分离的过程。
其他最终用户影响¶
用户需要使用返回的 tag 在他们的 guestOS 中挂载共享。
性能影响¶
通过使用 vhost-user,virtio-fs 应该在 guestOS 中具有接近本地(已挂载)文件系统性能。
其他部署者影响¶
无
开发人员影响¶
无
升级影响¶
将引入一个新的计算服务版本和兼容性特征,以确保计算服务和底层 virt 堆栈足够新,可以在接受请求之前通过 virtio-fs 附加共享资源。
实现¶
负责人¶
- 主要负责人
lyarwood
其他贡献者
功能联络人¶
- 功能联络人
lyarwood
工作项¶
在 os-traits 中添加新的兼容性特征
添加 libvirt 驱动程序对冷附加和分离的支持
添加新的共享 API 和微版本
依赖项¶
无
测试¶
功能 libvirt 驱动程序和 API 测试
集成 Tempest 测试
文档影响¶
将提供详细的管理员和用户文档。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
瑜伽 |
引入 |