Manila 作为运行时数据源

https://blueprints.launchpad.net/sahara/+spec/manila-as-a-data-source

利用 manila nfs 共享以及为作业二进制文件开发的文件挂载功能,使用 nfs 共享来托管输入和输出数据应该是可行的。这将允许通过本地文件系统路径引用数据,作为 hdfs 或 swift 存储的另一种简单替代方案。

问题描述

已经完成了支持在集群配置时挂载 manila nfs 共享,或者为 EDP 作业二进制文件自动挂载共享的工作,这些共享的 URL 格式为 manila://<share-id>/path。此外,Hadoop 文件系统 API 已经支持 file:///path URL,用于引用本地文件系统。

Sahara 可以基于这些现有功能,允许使用 manila://<share-id>/path URL 作为数据源,在必要时自动挂载数据源引用的共享,并在运行时为 EDP 作业生成正确的本地文件系统 URL。

这种方法的一些好处是

  • 作业二进制文件和数据源在 manila 共享方面具有一致性

  • 能够在同一个共享中存储作业二进制文件和数据源

  • 可以随时向集群添加新的数据共享

  • 可以使用本地操作系统工具在集群节点上操作数据

  • 适用于任何支持 mount -t nfs … 的节点

  • 为未来其他 manila 共享类型奠定基础

这个问题可以分为三个高级项目

  • 添加一个 manila 数据源类型,并验证 manila:// URL

  • manila:// URL 转换为 file:// URL,以便在作业运行时使用

  • 当数据源引用新的共享时,调用现有的自动挂载方法

请注意,自动挂载和 URL 转换仅适用于数据源对象引用的 manila 共享。嵌入在作业配置、参数或参数中的 manila:// URL 将被忽略。它不会被 Sahara 转换为 file:// URL,也不会导致自动挂载。但是,这已经有先例了——Sahara 目前有一些功能仅在数据源对象上受支持,而不是在字面 URL 上。(未来可以通过更广泛地使用最近引入的统一作业映射接口来消除这些限制)。

提议的变更

将在数据源的 JSON 模式中添加一个 manila 数据源类型,并对 manilla:// URL 进行适当的验证。

sahara/service/edp/binary_retrievers/manila_share.py 中支持路径名生成和 manila nfs 共享作业二进制文件自动挂载的现有代码将被重构,并分解到 sahara/service/edp/job_utils.pysahara/service/shares.py 之间。基本实现已经完成,但此逻辑需要从多个位置以不同的组合方式调用,以支持数据源。

当前,所有数据源 URL 都会从 job_utils.py 中的 get_data_sources()resolve_data_source_references() 返回给 EDP 引擎,并在 job_execution 对象中记录,然后由 EDP 引擎用于在集群上生成作业。这两个例程将被扩展,以以下方式处理 manila 数据源

  • 在必要时将引用的 nfs 共享挂载到集群上。由于 EDP 作业在多个节点上运行,因此共享必须挂载到整个集群,而不是单个实例

  • manila:// URL 转换为 file:// URL,并返回两个 URL。由于这些数据源的提交时间 URL 和运行时 URL 将不同,因此必须返回两个 URL。Sahara 将在 job_execution 中记录提交时间 URL,但使用运行时 URL 进行作业生成

替代方案

不支持数据源的 manila:// URL,但支持如中所述的托管在 nfs 上的数据

https://review.openstack.org/#/c/210839/

然而,这些功能是互补的,而不是相互排斥的,并且使此提议生效的大部分设备已经存在。

数据模型影响

REST API 影响

无(JSON 模式中只有“manila”作为有效的数据源类型)

其他最终用户影响

部署者影响

显然,如果需要此功能,则 manila 服务应该正在运行

开发者影响

Sahara-image-elements impact

无(nfs-utils 元素已经在进行中)

Sahara-dashboard / Horizon 影响

Sahara 需要在数据源创建表单上添加一个 manila 数据源类型

实现

负责人

主要负责人

tmckay

其他贡献者

croberts, egafford

工作项

  • 将 manila 数据源类型添加到 JSON 模式

  • 允许提交时间和运行时 URL 不同 (https://review.openstack.org/#/c/209634/3)

  • 重构 binary_retrievers/manila_share.py

  • 扩展 job_utils get_data_sources() 和 resolve_data_source_references() 以处理 manila:// URL

  • 将 manila 数据源创建添加到 Horizon

  • 修改/扩展单元测试

  • 文档

依赖项

https://blueprints.launchpad.net/sahara/+spec/manila-as-binary-store

测试

单元测试。

最终,与作业二进制文件一样,如果/当我们拥有 gate 中的 manila 支持时,可以使用集成测试进行测试

文档影响

关于 manila 数据源类型的讨论应添加到我们当前讨论 swift 或 hdfs 中托管的数据的任何部分。

此外,我们应该考虑将有关使用 manila 数据共享的影响的信息添加到 Sahara 部分的安全指南中。

如果安全指南或 manila 文档包含有关安全性的部分,这可能是一个来自 Sahara 视角的简短讨论,并链接到安全信息。如果当前没有这样的部分,那么可能应该针对安全指南进行单独的 CR,以创建 manila 的部分。

参考资料