多CPU架构支持

日期:

2016-06-14 12:00

标签:

openstack, ansible, power

本规范的目的是使 OpenStack-Ansible 能够在要部署的节点上跨多个 CPU 架构部署 OpenStack。

https://blueprints.launchpad.net/openstack-ansible/+spec/multi-arch-support

本规范的目的是为 OpenStack-Ansible 添加对多个 CPU 架构的支持。随着 OpenStack 服务在其他架构(如 PPC64LE)上运行,OpenStack-Ansible 需要扩展以支持存在混合 CPU 架构的环境。

问题描述

OpenStack-Ansible 最初构建时是为了支持部署到单个架构,主要是 x86。随着 OpenStack 和 OpenStack-Ansible 对其他平台(如 POWER)的支持扩展,需要支持运行不同 CPU 架构组合的部署。

对于每次部署,OpenStack-Ansible 都会创建并构建一个“repo”,其中包含 OpenStack 部署所需的工件。该 repo 包含 pip wheels、virtualenvs 和要部署的不同服务的源代码树等组件。对于每次部署,都会指定一个“master” repo,其中构建工件,然后同步到其余的 slaves。

这在多架构部署中会造成问题,对于 repo master 的 CPU 架构与其它节点的架构不同的节点而言。例如,在 x86 repo master 上构建工件用于控制平面的情况下,在 POWER 计算节点上部署 KVM 将会失败。

提议的变更

更新 OpenStack-Ansible 和必要的 roles,以支持使用多个 CPU 架构进行构建和部署。这包括对

  • 查看所有主机的 Ansible facts,并确定要构建工件的 CPU 架构集。

  • 添加支持为每个 CPU 架构分配构建 master。

  • 支持在每个构建 master 上构建 CPU 架构特定的工件副本,这些副本将同步到所有 slaves,而不管架构如何。

  • 支持使用相应的 CPU 架构标记所有架构特定的构建工件。

  • 确保安装期间使用的预构建二进制文件(apt 包等)存在或在支持的 CPU 架构(x86、ppc64el)上可用,或者添加文档以说明在不可用情况下的限制。

备选方案

  • 交叉编译工件 - 这将消除在不同架构上构建的 repo 之间构建、标记和同步的需要,但迄今为止,尚未找到可靠的方法来为 wheels/venvs 执行此操作。这还会增加架构特定的交叉编译问题的风险,因为添加了对其他架构的支持。

  • 仅支持单架构 OpenStack-Ansible 部署。这会损害部署者,限制了将其它架构的服务器集成到新的和现有的 OpenStack-Ansible 部署中的潜力

Playbook/Role 影响

repo playbooks 将受到影响,以处理跨多个架构的构建和同步。每个 role 也会受到轻微影响,以支持构建和标记带有所需架构信息的工件。

升级影响

N/A

安全影响

N/A

性能影响

repo 构建和同步操作将花费更长的时间,具体取决于正在部署的 CPU 架构数量。

  • repo 构建将花费更长的时间,因为必须串行构建每个 repo 的工件,以避免在同步非架构特定包期间发生冲突。

  • 同步将花费更长的时间,并且由于构建的工件数量增加,因此需要更多的带宽进行传输。

最终用户影响

预计不会对最终用户产生影响。

部署者影响

部署者现在能够创建包含具有多个 CPU 架构的服务器的部署。

预计不会有其它部署者影响,因为检测多个架构、部署每个架构所需的 repo master 数量以及构建每个架构的工件都应动态发生。

开发人员影响

开发人员的影响很小。开发人员现在能够为多个 CPU 架构开发和测试部署。它还能够开发特定于其它 CPU 架构的 roles,例如 ARM。

依赖项

N/A

实现

负责人

主要负责人

ashana@us.ibm.com/ashana

其他贡献者

adreznec@us.ibm.com/adreznec thorst@us.ibm.com/thorst

工作项

  • 添加一个 repo 发现任务,以确定所有主机上使用的 CPU 架构,并分配和存储有关每个架构的 master 的 facts。

  • 修改 repo-server playbook 以支持部署每个 CPU 架构的构建 master。

  • 修改 repo-build playbook 以支持串行构建每个 CPU 架构的 repos。

  • 更新构建任务以支持使用相应的 CPU 架构标记每个工件。

  • 更新 repo 同步以支持将来自每个构建 master 的工件同步到所有其它 slaves,而不管 CPU 架构如何。

  • 跨任务更新以使用新的标记工件名称。

  • 确保在所有包镜像/位置上提供 ppc64el 的二进制包,除了 i386/amd64 之外,或者添加文档以说明在哪些位置没有提供包。

测试

将添加一个新的测试作业,该作业部署一个两节点配置,其中一个节点属于上游/默认架构(x86),另一个节点属于要支持的其它 CPU 架构(ppc64el、arm64 等)。

文档影响

将向用户指南添加有关如何配置多架构支持的文档。

参考资料