Trove 镜像构建器¶
目录
开发和用户社区需要一个一致且自动化的工具,用于为不同的平台和数据库生成 Trove 客体数据库镜像(简称“镜像”),并且该工具需要是开源的。
Launchpad 蓝图:https://blueprints.launchpad.net/trove-image-builder/+spec/trove-image-build-repo
问题描述¶
Trove 用户(新用户和经验丰富的用户)通常在数据存储设置的最后阶段遇到问题,即生成和加载一个兼容的镜像,该镜像包括数据库和 Trove 客体代理。GNU/Linux 发行版、它们的原生数据库包、供应商包以及内置于当前 Trove 代码库中的假设之间存在显著差异。这些差异可能会共同导致无法使用的 Trove 客体数据库实例。从错误组装的 Trove 镜像启动的实例将无法正确准备并与 Trove 控制平面注册,可能会无限期地停留在 BUILD 状态,而新手用户将几乎没有信息可供参考。
建议的变更¶
本规范建议创建一个新的 Trove 仓库,其中包含用于镜像生成工具的源代码工件。新的工具将支持为当前“redstack kick-start”中可用的相同发行版生成镜像。然而,这里的关键区别在于,新的仓库将具有明确的关注点分离,与 trove-integration 项目分离:没有 devstack 也没有测试包装器,只有镜像构建。
这些工件本质上是一个 BASH 脚本主驱动程序,该程序可能会加载特定于发行版的参数解析、设置和函数。驱动程序脚本最终将调用 DIB(diskimage-builder)0,并使用参数来应用 DIB 文件元素以
安装数据库包
从以下几个来源安装 Trove 客体代理代码:Github master 分支或稳定版本、如果适用,发行版包、社区包(如 RDO)或本地文件系统。
应用任何必需的数据库配置路径更改
systemd 或 init.d 服务启用
设置 SELinux 标签或 AppArmor 配置文件
执行 RHEL 订阅注册和附加
可选地安装 SSH 密钥以进行调试开发和测试镜像
另一个参数化选项(例如,命令行参数)应该是脚本是否从互联网获取基本云镜像、使用缓存版本(如 redstack),还是直接指向本地文件系统上的现有镜像。
仓库中的其他工件可能包括
用于加载包的外部仓库文件
systemd 脚本或其他 init 文件
cloud-init 数据源规范
此变更建议从 trove-integration 项目派生的现有 DIB 元素开始。这些目前包括 Ubuntu 和 Fedora(F22 或更高版本)。目前正在将现有的 Fedora 元素转换为 CentOS 7。建议支持的数据存储(省略特定版本,因为这些版本会随着时间而变化)
数据存储 |
Ubuntu |
CentOS 7 |
Cassandra |
是 |
是 |
Couchbase |
是 |
是 |
CouchDB |
是 |
待定 |
DB2 |
是 |
待定 |
MariaDB |
是 |
是 |
MongoDB |
是 |
是 |
MySQL |
是 |
是 |
Percona |
是 |
是 |
PostgreSQL |
是 |
是 |
PXC |
是 |
是 |
Redis |
是 |
待定 |
Vertica |
是 |
待定 |
注意:CentOS 7 上标记为 TBD 的数据存储目前缺乏用于安装的公共社区 yum 仓库。
镜像构建过程应独立于任何特定的 OpenStack python 或其他依赖项,仅需 DIB 工具即可。理想情况下,这个新的仓库不应该与 OpenStack 版本分支,就像 trove-integration 今天一样。但是,trove-integration 依赖于每个版本的 requirements 文件用于 pip。这些本质上是精简的 requirements,用于服务于客体代理代码的 pip 安装。一些可能的解决方案
在新的构建器中进行 pip 安装时,获取现有的 trove-integration requirements 文件
今后,让 trove 正式合并这些文件,而不是在外部维护它们(在单独的蓝图下)
虽然该项目最终可以与 redstack 脚本集成,用于开发和测试,但它不应依赖于它,也不应依赖于 trove 或 python-troveclient 项目来执行,除非包含现有的客体 requirements 文件。
虽然此提案最初将围绕现有的 DIB 工具组织,但它不会排除添加和增强以支持 OpenStack 社区认可的其他镜像构建技术。1 例如,libguestfs 2 方法可以集成到同一个仓库中,如果社区审查并认为该技术在未来某个时候具有优势。
Python API¶
无,镜像生成不是 Python API 的一部分。
实施¶
测试¶
镜像构建器的自主测试可能涉及安装包、文件路径等的清单。可以使用其他镜像工具(如 guestfish、virt-ls 和 virt-cat)来完成此操作。2 对于集成测试,我们可以研究可配置的 redstack 更改,其中 redstack 不生成镜像,而是调用新的工具。一个新的 CI 作业(可能最初是非投票作业)可以运行 devstack 与 trove,运行镜像生成,配置生成的镜像和相关的数据存储,并运行集成测试和/或 tempest。当作业被社区认为稳定时,可以考虑进行投票。