通用注意事项¶
本节涵盖了对所有描述的架构都同样重要的注意事项。
组件¶
如 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 服务努力为各种硬件提供最佳支持。但是,并非所有硬件都得到同等程度的支持。这取决于硬件本身的功能以及可用的驱动程序。本节涵盖了与硬件接口相关的各种注意事项。在继续之前,请参阅 启用驱动程序和硬件类型 以获取有关硬件类型和接口的详细介绍。
电源和管理接口¶
硬件必须提供的最低功能以及驱动程序必须支持的功能如下
注意
严格来说,可以通过一些手动步骤在没有这些功能的情况下使 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_images为True(默认值),则缓存的镜像将被转换为原始格式。有关更多详细信息,请参阅 使用自定义 HTTP 服务器部署 和 流式传输原始镜像。
当使用网络启动时,实例镜像内核和 ramdisk 在实例活动期间会被本地缓存。
注意
所有镜像在不再需要后可能会存储一段时间。这是为了加速许多相似镜像的同时部署。可以通过 image_cache_size 和 image_cache_ttl 配置选项在 pxe 组中配置缓存。
ironic-novncproxy¶
NoVNC 代理服务是无状态的,因此可以水平扩展。任何负载均衡或反向代理架构也需要支持 websockets,因为这是 VNC 流量与服务通信的方式。
其他服务¶
与其他 OpenStack 服务集成时,可能需要考虑更多事项。这在本文档的其他部分中有介绍。