添加新的确保共享 API

确保共享是 manila 共享服务中的一项功能,它会检查后端中的所有共享,并在上次调用后发生更改的情况下对其进行检查和更新。

目前,只有在重启 manila-share 二进制文件以及 OpenStack Operator 识别到存储后端发生更改时,才会调用确保共享。

无法通过 Manila API 调用确保共享,因此如果配置发生更改,必须重启相应的 manila-share 二进制文件才能获取新的配置。

问题描述

在云环境中,共享后端配置可能会发生变化,并且这些变化可能意味着共享的挂载信息会过时,直到 Manila 应用最新的配置为止。

目前,我们仅在 manila-share 二进制文件启动时并调用共享驱动程序的 ensure_shares 例程时应用这些更改。在多后端环境中,单个共享管理器服务实例会生成多个进程,每个进程通过驱动程序与单个存储后端交互。在这种环境中,可能需要为单个/特定的存储后端驱动程序运行“ensure_shares”。今天,没有这样的规定。因此,即使操作员想要确保属于单个后端的共享,他们也需要执行对环境中所有后端驱动程序进行破坏性重启的操作。

仅在服务重启时调用确保共享,为 OpenStack 操作员提供灵活性有限,无法对配置进行更改并快速将其应用于该后端中的所有共享,因为每次都需要重启 manila-share 服务。此操作也具有破坏性,并将导致所有相关二进制文件出现临时中断。

用例

OpenStack 操作员希望更新后端配置并使其快速应用于共享,而无需云面临 manila-share 服务重启带来的停机时间,这使得它成为一种轻松更新导出位置和其他重要共享信息的良好方法。

提议的变更

  • 新的确保共享 API

    我们将引入一个 API,允许 OpenStack 操作员调用 manila 共享的确保共享例程,使此配置更新平滑且无需服务停机时间,以便可以重新计算导出位置并使用新的配置更新共享。

  • 对 manila 共享的更改

    在应用配置更新时,共享将具有不同的状态:ensuring。确保共享可能需要一段时间才能完成,因为我们将更新给定后端中的所有共享。在所有共享应用配置后,如果状态发生变化,我们将它们恢复到 available 状态。

  • 对 manila-share 服务的更改

    在运行确保共享时,服务的 ensuring 字段将过渡到 True,直到操作完成。所有不是 manila-share 二进制文件的服务将不受影响。

  • 关于此规范需要考虑的事项

    manila-share 服务必须处于启动和启用状态,才能通过 API 运行确保共享。

    我们将始终允许触发确保共享 API。manila share-manager 服务将根据共享的状态或共享是否繁忙来决定是否需要更改共享的数据。

    将添加一个新的配置选项,名为 update_shares_status_on_ensure,其默认值为 True。通过此配置选项,OpenStack 操作员可以决定是否希望在通过 API 调用确保共享时更改共享状态。

备选方案

实现定期配置检查,并配置运行时间,从而获取最新的配置并将其应用于共享。但是,该例程将定期运行,这意味着即使没有更新,我们也会检查更新。

数据模型影响

  • 将向共享的可能状态添加一个新的状态 (ensuring)。

  • 将在 services 表中添加一个新字段 +———————–+—————+——+—–+———+——-+ | 字段 | 类型 | Null | Key | 默认值 | Extra | +=======================+===============+======+=====+=========+=======+ | ensuring | tinyint(1) | YES | | NULL | | +———————–+—————+——+—–+———+——-+

CLI API 影响

将在 Manila 的 OpenStack CLI 中添加一个新的命令

openstack share service ensure <host@backend>
  • host@backend:应更新其共享配置的主机和后端。

REST API 影响

要触发确保共享例程:

POST /v2/services/ensure

请求

{
  "host": "openstackhost@generic",
}

正常的 http 响应代码

  • 202 - 共享服务将启动确保共享过程。

预期的 http 错误代码

  • 401 - 未授权;用户未进行身份验证

  • 403 - 禁止;用户被策略禁止

  • 404 - 未找到;API 在微版本中不存在

  • 404 - 未找到;没有匹配提供的 host 和 backend

  • 409 - 冲突;并非所有共享当前都可用。

  • 409 - 冲突;服务未启动。

驱动程序影响

没有驱动程序影响,因为驱动程序目前可以自由地实现确保共享例程期间所需的内容,我们只是允许 OpenStack 操作员轻松访问它。

安全影响

我们将为此 API 实现 RBAC 规则。默认 RBAC 策略将仅允许 OpenStack 操作员使用它。

通知影响

当“ensure_shares”操作开始和结束时,我们将发出通知。

其他最终用户影响

如果启用了状态更改,并且 OpenStack 操作员调用确保共享 API,则最终用户会注意到他们的共享已过渡到“ensuring”状态。他们将无法通过 Manila 对共享执行任何操作。除非后端驱动程序在此操作期间更新导出位置,否则数据路径没有影响。

性能影响

manila-share 服务将更新共享,这可能需要一些时间才能完成,尤其是在繁忙的云环境中。

其他部署者影响

无。

开发人员影响

无。

实现

负责人

主要负责人

工作项

  • 实现确保共享 API。

  • 实现相应的 OSC 命令。

  • 在 SDK 中实现相应的功能。

  • 实现 tempest 测试。

  • 更新文档。

  • 将功能添加到 manila-ui。

未来工作项目

依赖项

测试

  • 单元测试

  • Tempest 测试

文档影响

  • 用户指南

  • 管理员指南

参考资料

[1]: https://bugs.launchpad.net/manila/+bug/1996793 [2]: https://etherpad.opendev.org/p/caracal-ptg-manila-cephfs