[ English | Indonesia | русский ]

多架构部署

OpenStack-Ansible 支持部署,其中控制平面或计算节点可能包含多种不同的 CPU 架构。

计算节点的混合 CPU 架构

OpenStack-Ansible 支持在同一环境中部署具有多种架构的计算节点。

完全由 x86_64 或 aarch64 节点组成的部署无需任何特殊考虑,将按照正常的 OpenStack-Ansible 文档进行操作。

具有混合架构的部署,或将新架构添加到现有的单架构部署,需要部署者和最终用户采取一些额外的步骤,以确保行为符合预期。

示例 - 将 aarch64 节点添加到 x86_64 部署

  1. 将操作系统安装到所有新的计算节点上。

  2. 将新的计算节点添加到 openstack_user_config.yml

  3. 确保每个计算架构的主机都存在于 openstack_user_config.yml 中的 repo-infra_hosts 中。

    此主机将为它自己的架构构建 python wheel,这将加快许多主机的部署速度。 如果您没有为每个架构创建一个仓库服务器,请确保采取措施不要使 opendev.org git 服务器过载,例如使用所有 OpenStack 服务仓库的本地镜像。

  4. 运行 OpenStack-Ansible playbook 以部署所需的服务。

  5. 将 HW_ARCH_XXXX 特性添加到 OpenStack 中的每个计算主机。

    虽然 OpenStack 中大多数 CPU 硬件特性(例如指令集扩展)都会自动检测和处理,但 CPU 架构除外。 有必要手动将架构特性添加到与每个计算主机对应的资源提供程序。 所需的特性是

    HW_ARCH_X86_64 用于 x86_64 Intel 和 AMD CPU

    HW_ARCH_AARCH64 用于 aarch64 架构 CPU

    (参见:https://docs.openstack.org/os-traits/2025.2/reference/traits.html)

    openstack resource provider list
    openstack resource provider trait list <uuid-of-compute-host>
    openstack resource provider trait set --trait <existing-trait-1> --trait <existing-trait-2> ... --trait HW_ARCH_xxxxx <uuid-of-compute-host>
    

    注意

    特性设置命令将用提供的集合替换所有现有特性,因此您必须指定所有现有特性以及新特性。

  6. 配置 Nova 调度器以检查架构。

    所有 Nova API 实例中的 /etc/nova/nova.conf 中的两个附加设置

    [scheduler]
    image_metadata_prefilter = true
    
    [filter_scheduler]
    image_properties_default_architecture = x86_64
    

    image_metadata_prefilter 设置强制 Nova 调度器将 Glance 镜像上的 hw_architecture 属性与计算主机资源提供程序上的相应 HW_ARCH_XXX 特性匹配。 这确保了显式标记了目标架构的镜像被调度到具有匹配架构的主机。

    image_properties_default_architecture 设置将在现有的 x86_64 架构云中应用,在之前所有 Glance 镜像上都没有设置 hw_architecture。 这避免了需要追溯性地将该属性应用于所有现有镜像,这可能很困难,因为用户可能有自己的工具来创建和上传镜像,而无需应用所需的属性。

    警告

    未记录的行为警告!

    请注意,镜像元数据预过滤器和 ImagePropertiesFilter 是 Nova 调度器用于确定候选计算主机的过程中的不同且无关的步骤。 本节说明如何将它们一起使用。

    image_metadata_prefilter 仅查看计算主机上的 HW_ARCH_XXX 特性,并找到匹配所需架构的硬件。 这仅发生在镜像上存在 hw_architecture 属性时,并且仅当手动将所需的特性添加到计算主机时才会发生。

    image_properties_default_architecture 由 ImagePropertiesFilter 使用,它检查每个计算主机上 QEMU 支持的所有架构;这包括对非本机架构的软件模拟。

    如果完整的 QEMU 套件安装在计算主机上,则该主机将提供运行所有受可用 qemu-system-* 二进制文件支持的架构。 在这种情况下,没有 hw_architecture 属性的镜像可能会被调度到非本机架构主机并进行模拟。

  7. 禁用 QEMU 模拟。

    注意

    此步骤尤其适用于现有的 x86_64 环境,当添加新的 aarch64 计算节点时,并且不能假定 hw_architecure 属性已应用于所有 Glance 镜像,因为操作员可能无法控制所有镜像上传。

    为了避免对非本机架构进行不必要的 QEMU 模拟,有必要确保所有计算主机上仅存在本机 qemu-system-* 二进制文件。 对于现有的部署,最简单的方法是使用系统包管理器来确保删除不需要的二进制文件。

    包括 2023.1 及更高版本的 OpenStack-Ansible 版本将仅安装本机架构 qemu-system-*` 二进制文件,因此在新版本上不应需要此步骤。

  8. 将镜像上传到 Glance。

    • 理想情况下,应为所有上传的镜像设置 hw_architecture 属性。 对于与 image_properties_default_architecture 不匹配的所有架构,设置此属性是强制性的

    • 建议为任何需要 UEFI 启动的镜像设置属性 hw_firmware_type='uefi',即使这对于 aarch64 架构也是隐式的。 这是为了避免在删除实例时 libvirt 中出现 NVRAM 文件问题。

Nova 的架构模拟

Nova 具有允许在具有不同本机 CPU 架构的主机上模拟一种 CPU 架构的能力,请参阅 https://docs.openstack.org/nova/2025.2/admin/hw-emulation-architecture.html 以获取更多详细信息。

本 OpenStack-Ansible 文档当前假定部署者希望在具有本机 CPU 架构的主机上运行镜像,并且不提供涉及模拟的示例配置。