管理共享¶
概述¶
借助 Manila 共享附加功能,用户可以轻松地将 Manila 提供的文件共享附加到其实例,并在实例内部挂载它们。此功能消除了用户手动连接和挂载 Manila 提供的共享的需要。
用例¶
Manila 共享附加功能可用于以下场景
作为运维人员,我希望 Manila 数据路径与任何租户可访问的网络分离。
作为用户,我希望将 Manila 共享直接附加到我的实例,并拥有一个简单的界面来在实例内部挂载它们。
作为用户,我希望从我的实例分离直接附加的 Manila 共享。
作为用户,我希望跟踪附加到我的实例的 Manila 共享。
先决条件¶
要使用 Manila 共享附加功能,您必须拥有已安装和配置了 Manila 和 Nova 的 OpenStack 环境。此外,您的环境必须满足以下要求
配置实例共享内存¶
可以通过使用 hw:mem_page_size 附加规格来配置实例来实现。
或者,您可以通过在 nova-compute 的 libvirt 中配置 file_backed_memory 功能来启用 COMPUTE_MEM_BACKING_FILE 特性。这将允许使用文件支持的内存。
COMPUTE_MEM_BACKING_FILE 支持要求运维人员配置一个或多个具有文件支持内存的主机。可以通过创建包含这些主机的 AZ 来确保实例将降落在其中一个主机上。然后指示用户将其实例部署在此 AZ 中。或者,运维人员可以通过将 trait:COMPUTE_MEM_BACKING_FILE=required 作为附加规格或镜像属性来引导调度程序选择合适的宿主机。
限制¶
您必须拥有处于 SHUTOFF 状态的实例才能附加或分离共享。
由于 Qemu / libvirt 中当前 virtiofs 实现的原因,以下 Nova 功能对于附加共享的虚拟机被阻止
evacuate
live_migrate
rebuild
resize(migrate)
resume
shelve
volume snapshot
已知问题¶
由于 一个 bug,配置驱动器在适当的时间未刷新,导致共享在配置驱动器上保持不可见。您可以使用元数据服务代替。
共享备份过程会删除共享访问权限和锁,因为它需要独占访问权限以保证备份的一致性。此操作 中断共享附加,使其对虚拟机不可访问。
要正确使用此功能,请按照以下步骤操作
停止虚拟机。
从虚拟机分离共享(Nova 移除锁)。
使用 Manila API 执行备份。
重新附加共享(Nova 重新应用锁)。
启动虚拟机。
Nova 未随 Nova 的服务令牌一起发送用户的令牌,Manila 仅会在访问创建期间将 Nova 识别为请求者。因此,审计跟踪日志将缺乏表明 Nova 代表用户请求操作的信息。这是当前实现的一个重要限制。
如果虚拟机删除失败,共享 未标记为错误。
管理共享¶
附加共享¶
要将 Manila 共享附加到实例,请使用 POST /servers/{server_id}/shares API,并指定要附加的共享的 share_id。tag 参数是可选的,可用于提供在实例内部挂载共享的字符串。如果您未提供 tag,则将使用 share_id 代替。
发出附加请求后,共享的附加状态将记录在数据库中,并应快速过渡到 attaching 然后变为 inactive。用户应验证状态是否达到 inactive 后再进行任何新操作;除非出现错误,否则应发生此转换。
$ openstack server add share 9736bced-44f6-48fc-b913-f34c3ed95067 3d3aafde-b4cb-45ab-8ac6-31ff93f69536 --tag mytag
+-----------------+--------------------------------------------------------------------------------------+
| Field | Value |
+-----------------+--------------------------------------------------------------------------------------+
| Export Location | 192.168.122.76:/opt/stack/data/manila/mnt/share-25a777f7-a582-465c-a94c-7293707cc5cb |
| Share ID | 3d3aafde-b4cb-45ab-8ac6-31ff93f69536 |
| Status | inactive |
| Tag | mytag |
| UUID | b70403ee-f598-4552-b9e9-173343deff79 |
+-----------------+--------------------------------------------------------------------------------------+
然后,当您启动实例时,将执行必要的操作以附加共享,并在没有错误的情况下将其设置为 active。如果附加操作失败,虚拟机启动操作也将失败。
$ openstack server share show 9736bced-44f6-48fc-b913-f34c3ed95067 3d3aafde-b4cb-45ab-8ac6-31ff93f69536
+-----------------+--------------------------------------------------------------------------------------+
| Field | Value |
+-----------------+--------------------------------------------------------------------------------------+
| Export Location | 192.168.122.76:/opt/stack/data/manila/mnt/share-25a777f7-a582-465c-a94c-7293707cc5cb |
| Share ID | 3d3aafde-b4cb-45ab-8ac6-31ff93f69536 |
| Status | active |
| Tag | mytag |
| UUID | b70403ee-f598-4552-b9e9-173343deff79 |
+-----------------+--------------------------------------------------------------------------------------+
连接到虚拟机后,您可以通过查询 OpenStack 元数据服务来检索附加共享的 tag。
注意:这里,我们可以看到 2 个附加到实例的共享,一个定义了 tag (mytag),另一个使用默认 tag。
注意2:使用此机制,可以在机器启动时自动轻松挂载共享。
$ curl -s -H "Metadata-Flavor: OpenStack" http://169.254.169.254/openstack/2025.2/meta_data.json | jq .devices
[
{
"type": "share",
"share_id": "3d3aafde-b4cb-45ab-8ac6-31ff93f69536",
"tag": "mytag",
"bus": "none",
"address": "none"
},
{
"type": "share",
"share_id": "894a530c-6fa0-4aa1-97c9-4489d205c5ed",
"tag": "894a530c-6fa0-4aa1-97c9-4489d205c5ed",
"bus": "none",
"address": "none"
}
]
要挂载附加的共享,请使用带有 virtiofs 文件系统类型的 mount 命令,以及响应主体中提供的 tag。
user@instance $ mount -t virtiofs $tag /mnt/mount/path
分离共享¶
要分离 Manila 共享,首先停止实例,然后使用 DELETE /servers/{server_id}/shares/{share_id} API,指定要分离的共享的 share_id。
$ openstack server remove share 9736bced-44f6-48fc-b913-f34c3ed95067 3d3aafde-b4cb-45ab-8ac6-31ff93f69536
列出附加的共享¶
要列出附加到实例的所有共享,请使用 GET /servers/{server_id}/shares API。
$ openstack server share list 9736bced-44f6-48fc-b913-f34c3ed95067
+--------------------------------------+----------+--------------------------------------+
| Share ID | Status | Tag |
+--------------------------------------+----------+--------------------------------------+
| 3d3aafde-b4cb-45ab-8ac6-31ff93f69536 | inactive | mytag |
| 894a530c-6fa0-4aa1-97c9-4489d205c5ed | inactive | 894a530c-6fa0-4aa1-97c9-4489d205c5ed |
| 9238fc76-5b21-4b8e-80ef-26d74d192f71 | inactive | 9238fc76-5b21-4b8e-80ef-26d74d192f71 |
+--------------------------------------+----------+--------------------------------------+
显示附加共享的详细信息¶
要显示附加到实例的特定共享的详细信息,请使用 GET /servers/{server_id}/shares/{share_id} API,并指定要显示的共享的 share_id。
$ openstack server share show 9736bced-44f6-48fc-b913-f34c3ed95067 3d3aafde-b4cb-45ab-8ac6-31ff93f69536
+-----------------+--------------------------------------------------------------------------------------+
| Field | Value |
+-----------------+--------------------------------------------------------------------------------------+
| Export Location | 192.168.122.76:/opt/stack/data/manila/mnt/share-25a777f7-a582-465c-a94c-7293707cc5cb |
| Share ID | 3d3aafde-b4cb-45ab-8ac6-31ff93f69536 |
| Status | inactive |
| Tag | mytag |
| UUID | 8a8b42f4-7cd5-49f2-b89c-f27b2ed89cd5 |
+-----------------+--------------------------------------------------------------------------------------+
共享附加和分离的通知¶
将添加用于共享附加和共享分离的新通知。您可以使用 include_share_mapping 配置参数启用它们。然后您可以订阅这些通知以接收有关共享附加和分离事件的信息。
可用的版本化通知:https://docs.openstack.org/nova/2025.2/reference/notifications.html