管理共享

概述

借助 Manila 共享附加功能,用户可以轻松地将 Manila 提供的文件共享附加到其实例,并在实例内部挂载它们。此功能消除了用户手动连接和挂载 Manila 提供的共享的需要。

用例

Manila 共享附加功能可用于以下场景

  • 作为运维人员,我希望 Manila 数据路径与任何租户可访问的网络分离。

  • 作为用户,我希望将 Manila 共享直接附加到我的实例,并拥有一个简单的界面来在实例内部挂载它们。

    作为用户,我希望从我的实例分离直接附加的 Manila 共享。

  • 作为用户,我希望跟踪附加到我的实例的 Manila 共享。

先决条件

要使用 Manila 共享附加功能,您必须拥有已安装和配置了 Manila 和 Nova 的 OpenStack 环境。此外,您的环境必须满足以下要求

  • 运行您的实例的计算主机必须具有 QEMU 版本 5.0 或更高版本和 libvirt 版本 6.2 或更高版本。如果满足这些要求,则应在您的计算主机上启用 COMPUTE_STORAGE_VIRTIO_FS 特性。

  • 所有计算节点必须升级到启用 virtiofs 使用的 nova 版本。

  • 此外,此初始实现需要关联的实例使用 文件支持的内存大页。这是 virtio-fs 的要求。

  • 支持挂载 NFS 和 CEPHFS 共享的内核驱动程序和用户空间工具。

  • 实例访客操作系统内核版本必须大于等于 5.4,才能支持挂载 virtiofs 共享。

配置实例共享内存

可以通过使用 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,配置驱动器在适当的时间未刷新,导致共享在配置驱动器上保持不可见。您可以使用元数据服务代替。

  • 共享备份过程会删除共享访问权限和锁,因为它需要独占访问权限以保证备份的一致性。此操作 中断共享附加,使其对虚拟机不可访问。

    要正确使用此功能,请按照以下步骤操作

    1. 停止虚拟机。

    2. 从虚拟机分离共享(Nova 移除锁)。

    3. 使用 Manila API 执行备份。

    4. 重新附加共享(Nova 重新应用锁)。

    5. 启动虚拟机。

  • 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