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 方法可以集成到同一个仓库中,如果社区审查并认为该技术在未来某个时候具有优势。

配置

无,此工具不使用 Trove 控制器使用的配置选项。换句话说,它不会解析或尝试使用 Trove 控制器配置设置进行镜像生成执行。

数据库

无,从此工具创建的镜像将被加载到 Glance 中,并像今天一样注册为 Trove 数据存储。

公共 API

无,镜像生成不是 Trove API 的一部分。

公共 API 安全

无,参见上文

Python API

无,镜像生成不是 Python API 的一部分。

替代方案

  • 使用 OpenStack 治理认可的其他镜像构建和操作工具1,例如 libguestfs。2 然而,人们担心在 gate 检查中使用这些工具的能力,因为 DIB 当前被用于这些检查。

  • 依赖于 trove-integration 项目通过 redstack 工具提供的有限的镜像选项。然而,这些镜像是专门为开发测试生成的,不适合其他环境。

  • 手动遵循现有“构建客体镜像”文档中描述的基于 DIB 的过程3

  • 使用下游提供商,这可能需要建立业务关系才能访问和使用他们专有的经过测试的镜像。

实施

负责人

名称

Launchpad ID

IRC

Email

Victoria Martinez de la Cruz

vkmc

vkmc

vimartin@redhat.com

Peter MacKinnon

pmackinn

pmackinn

pmackinn@redhat.com

里程碑

Newton-1

工作项

  • 让 PTL 创建用于镜像创建工具和支持文件的新的项目仓库。

  • 开发并安装仓库中的工件。

  • 更新现有文档,以指导用户使用新的镜像创建工具。

依赖项

DIB(diskimage-builder)0

测试

镜像构建器的自主测试可能涉及安装包、文件路径等的清单。可以使用其他镜像工具(如 guestfish、virt-ls 和 virt-cat)来完成此操作。2 对于集成测试,我们可以研究可配置的 redstack 更改,其中 redstack 不生成镜像,而是调用新的工具。一个新的 CI 作业(可能最初是非投票作业)可以运行 devstack 与 trove,运行镜像生成,配置生成的镜像和相关的数据存储,并运行集成测试和/或 tempest。当作业被社区认为稳定时,可以考虑进行投票。

文档影响

应将对新项目的引用添加到现有的“构建客体镜像”文档3

附录