通用注意事项

本节涵盖了对所有描述的架构都同样重要的注意事项。

组件

Ironic 概述 中所述,Bare Metal 服务具有四个组件。

  • Bare Metal API 服务 (ironic-api) 应该以类似于控制平面 API 服务的方式部署。具体位置取决于所使用的架构。

  • Bare Metal conductor 服务 (ironic-conductor) 是大多数配置逻辑所在的地方。在决定如何部署它时,以下考虑因素是最重要的

    • conductor 管理一定比例的节点,通过哈希环将其分配给它。这包括不断轮询这些节点的当前电源状态和硬件传感器数据(如果硬件启用并支持,请参阅 收集传感器数据 以获取示例)。

    • conductor 需要访问其管理的每个节点的 管理控制器

    • conductor 与 TFTP(用于 PXE)和/或 HTTP(用于 HTTPBoot 和 iPXE)服务共存,这些服务提供内核和 ramdisk 以启动节点。conductor 通过将文件写入其根目录来管理它们。

    • 如果使用串口控制台,conductor 会在本地启动控制台进程。如果使用 nova-serialproxy 服务(Compute 服务的一部分),则它必须能够访问 conductor。否则,它们必须直接可供用户访问。

    • conductor 和正在部署或清理的节点之间必须具有相互连接性。有关详细信息,请参阅 网络

  • NoVNC 图形控制台代理服务 (ironic-novncproxy) 可以选择性地运行,以启用连接到具有受支持控制台驱动程序的宿主机的图形控制台。 类似于 (ironic-api) 它需要像其他控制平面服务一样部署,允许用户通过 Web 浏览器访问 NoVNC 界面。 此外,它也像 (ironic-conductor) 一样,需要访问管理网络才能连接到宿主 BMC 管理的图形控制台。

  • 启动时运行 ironic-python-agent 服务的配置 ramdisk。

    警告

    ironic-python-agent 服务不打算在配置/清理/救援 ramdisk 之外的任何地方使用或执行。

硬件和驱动程序

Bare Metal 服务努力为各种硬件提供最佳支持。但是,并非所有硬件都得到同等程度的支持。这取决于硬件本身的功能以及可用的驱动程序。本节涵盖了与硬件接口相关的各种注意事项。在继续之前,请参阅 启用驱动程序和硬件类型 以获取有关硬件类型和接口的详细介绍。

电源和管理接口

硬件必须提供的最低功能以及驱动程序必须支持的功能如下

  1. 获取和设置机器的电源状态

  2. 获取和设置当前的启动设备

  3. 启动 Bare Metal 服务提供的镜像(在最简单的情况下,支持使用 PXE 和/或 iPXE 启动)

注意

严格来说,可以通过一些手动步骤在没有这些功能的情况下使 Bare Metal 服务配置节点。这不是推荐的部署方式,因此本指南不涵盖它。

确保硬件支持这些功能后,您需要找到合适的驱动程序。大多数企业级硬件都支持 IPMI,因此可以使用 IPMI 驱动程序。一些较新的硬件也支持 Redfish 驱动程序。 几个供应商提供更具体的驱动程序,通常提供额外的功能。请查看 Ironic 的驱动程序、硬件类型和硬件接口 以找到最合适的驱动程序。

启动接口

节点的启动接口管理部署 ramdisk 和裸机节点上的用户实例的启动。部署接口协调部署并定义镜像如何传输到目标磁盘。

主要替代方案是使用 PXE/iPXE 或虚拟介质 - 请参阅 启动接口 以获取详细说明。如果硬件上可用虚拟介质实现,建议使用它以获得更好的可扩展性和安全性。否则,建议在目标硬件支持的情况下使用 iPXE。

硬件规格

Bare Metal 服务对硬件本身的特性没有施加太多限制。但是,请记住

  • 默认情况下,Bare Metal 服务将选择大于 4 GiB 的最小硬盘驱动器进行部署。可以使用另一个硬盘驱动器,但需要设置 根设备提示

    注意

    此设备不必与 BIOS(或类似固件)中设置的启动设备匹配。

  • 机器应该有足够的 RAM 来容纳部署/清理 ramdisk 运行。最小值因 ramdisk 的构建方式而异。例如,用于 CI 的基于 TinyCoreLinux 的 ramdisk tinyipa 只需要 400 MiB 的 RAM,而由 diskimage-builder 构建的 ramdisk 可能需要 3 GiB 或更多。

镜像类型

Bare Metal 服务可以部署两种类型的镜像

  • 全盘镜像,其中包含带有所有必要分区和引导加载程序的完整分区表。此类镜像是最通用的,但可能更难构建。

  • 分区镜像,其中仅包含根分区。Bare Metal 服务将创建必要的分区并安装引导加载程序(如果需要)。

    警告

    仅当使用 GNU/Linux 操作系统时才支持分区镜像。

    为了使 Bare Metal 服务在部署期间设置引导加载程序,您的分区镜像必须包含 GRUB2 引导加载程序或现成的 EFI 构件。

网络

有几种推荐的网络拓扑可与 Bare Metal 服务一起使用。它们在特定的架构文档中进行了详细说明。但是,有几个考虑因素对所有这些拓扑结构都是通用的

  • 必须有一个配置网络,该网络在部署过程中由节点使用。如果架构允许,此网络不应可供最终用户访问,也不应具有访问互联网的权限。

  • 必须有一个清理网络,该网络在清理过程中由节点使用。

  • 应该有一个救援网络,该网络在救援过程中由节点使用。如果不支持救援过程,则可以跳过它。

注意

在大多数情况下,为了简单起见,应将相同的网络用于清理、配置和救援。

除非另有说明,否则这些部分中的所有内容都适用于所有三个网络。

  • baremetal 节点在连接到配置/清理/救援网络时必须能够访问 Bare Metal API。

    注意

    只需要暴露两个端点

    GET /v1/lookup
    POST /v1/heartbeat/[a-z0-9\-]+
    

    您可能希望限制从该网络到这些端点的访问,并使这些端点无法从其他网络访问。

  • 如果使用 pxe 启动接口(或任何基于它的启动接口),则 baremetal 节点应具有对配置/清理/救援网络的无标签(访问模式)连接。它允许 PXE 固件,不支持 VLAN,与配置所需的服务进行通信。

    注意

    Bare Metal 服务是否会自动处理它取决于网络接口。请查看特定架构的网络文档。

    有时可能需要禁用交换机上的生成树协议延迟 - 请参阅 PXE 或 iPXE 期间的 DHCP 不一致或不可靠

  • Baremetal 节点在连接到配置/清理/救援网络时需要访问配置/清理/救援所需的任何服务。这可能包括

    • 用于 PXE 启动的 TFTP 服务器,以及启用 iPXE 时的 HTTP 服务器

    • 用于 direct 部署接口和一些虚拟介质启动接口的 HTTP 服务器或对象存储服务

  • Baremetal Conductor 需要在配置/清理/救援期间访问启动的 baremetal 节点。Conductor 通过 ironic-python-agent 提供的内部 API 与节点通信以执行操作。

HA 和可扩展性

ironic-api

Bare Metal API 服务是无状态的,因此可以轻松地水平扩展。建议将其作为 WSGI 应用程序部署在例如 Apache 或其他 WSGI 容器后面。

注意

此服务访问 ironic 数据库以读取实体(例如,响应 GET /v1/nodes 请求)并在极少数情况下进行写入。

ironic-conductor

高可用性

Bare Metal conductor 服务利用主动/主动 HA 模型。每个 conductor 管理一定数量的节点。节点组织在哈希环中,试图在 conductor 之间更或多地均匀地分配负载。当 conductor 被认为离线时,其节点将被其他 conductor 接管。因此,HA 部署至少需要 2 个 conductor 宿主机。

性能

Conductor 可能会占用大量资源,因此建议(但不要求)将所有 conductor 与云中的其他服务分开。部署中所需的最小 conductor 数量取决于几个因素

  • 将运行 conductor 的硬件的性能,

  • bare metal 节点的 管理控制器 的速度和可靠性(例如,处理较慢的控制器可能需要每个 conductor 较少的节点),

  • Bare Metal 服务轮询管理控制器的频率(请参阅 sync_power_state_interval 选项),

  • 用于节点的 bare metal 驱动程序(请参阅上面的 硬件和驱动程序),

  • 网络性能,

  • 同时配置的 bare metal 节点的最大数量(请参阅 Compute 服务的 max_concurrent_builds 选项)。

我们建议的目标是每个 conductor 100 个 bare metal 节点,以获得最大的可靠性和性能。每个 conductor 的数量略多一些是可以容忍的。但是,有报道称 [1] [2] 处理每个 conductor 大约 300 个 bare metal 节点时,可靠性会降低。

磁盘空间

每个 conductor 需要足够的可用磁盘空间来缓存它使用的镜像。根据部署接口和启动选项的组合,空间要求不同

  • 部署内核和 ramdisk 始终在部署期间缓存。

  • agent.image_download_source 设置为 http 且使用 Glance 时,conductor 会将实例镜像下载到本地,并通过其 HTTP 服务器提供服务。使用 swift 使用临时 URL 发布镜像并在节点端进行转换。

    agent.image_download_source 设置为 local 时,即使对于 HTTP(s) URL 也会发生这种情况。对于独立部署,请使用 http 以避免不必要的镜像缓存。

    在两种情况下,如果 force_raw_imagesTrue(默认值),则缓存的镜像将被转换为原始格式。

    有关更多详细信息,请参阅 使用自定义 HTTP 服务器部署流式传输原始镜像

  • 当使用网络启动时,实例镜像内核和 ramdisk 在实例活动期间会被本地缓存。

注意

所有镜像在不再需要后可能会存储一段时间。这是为了加速许多相似镜像的同时部署。可以通过 image_cache_sizeimage_cache_ttl 配置选项在 pxe 组中配置缓存。

ironic-novncproxy

NoVNC 代理服务是无状态的,因此可以水平扩展。任何负载均衡或反向代理架构也需要支持 websockets,因为这是 VNC 流量与服务通信的方式。

其他服务

与其他 OpenStack 服务集成时,可能需要考虑更多事项。这在本文档的其他部分中有介绍。