第 3 层或无 DHCP 的 ramdisk 启动

通过 PXE 启动节点虽然被普遍支持,但存在一个缺点:它需要节点和控制平面之间的直接 L2 连接才能进行 DHCP。使用虚拟介质,可以避免不可靠的 TFTP 协议,甚至完全避免 DHCP。

当按照以下说明为节点提供网络数据时,生成的虚拟介质 ISO 也将作为 configdrive 提供,网络数据将存储在标准的 OpenStack 位置。

在创建部署 ramdisk 时,需要使用 simple-init 元素。 Glean 工具将查找标记为 config-2 的介质。如果找到,将读取其中的网络信息,并相应地配置节点的网络堆栈。

ironic-python-agent-builder -o /output/ramdisk \
     debian-minimal -e simple-init

警告

基于使用 NetworkManager 的发行版的 ramdisk 需要 Glean 1.19.0 或更高版本才能正常工作。

注意

如果需要,某些接口仍然可以配置为使用 DHCP。

硬件类型支持

已知以下硬件类型支持此功能

  • Redfish 使用 redfish-virtual-media 启动

  • iLO 使用 ilo-virtual-media 启动

配置网络数据

当 Bare Metal 服务在 OpenStack 中运行时,无需额外配置 - 网络配置将从网络服务中获取。

或者,用户可以构建并通过 network_data 字段以 JSON 形式传递网络配置给节点。基于节点的配置优先于网络服务生成的配置,并且在独立模式下也能工作。

baremetal node set --network-data ~/network_data.json <node>

一个网络数据示例

{
    "links": [
        {
            "id": "port-92750f6c-60a9-4897-9cd1-090c5f361e18",
            "type": "phy",
            "ethernet_mac_address": "52:54:00:d3:6a:71"
        }
    ],
    "networks": [
        {
            "id": "network0",
            "type": "ipv4",
            "link": "port-92750f6c-60a9-4897-9cd1-090c5f361e18",
            "ip_address": "192.168.122.42",
            "netmask": "255.255.255.0",
            "network_id": "network0",
            "routes": []
        }
    ],
    "services": []
}

注意

某些字段与端口信息冗余。我们正在研究简化格式,但目前,所有这些字段都是必需的。

您需要在部署的镜像中支持网络数据,例如通过预安装 cloud-initGlean (大多数云镜像都具有前者)。然后,您可以在部署时提供网络数据,例如

baremetal node deploy <node> \
    --config-drive "{\"network_data\": $(cat ~/network_data.json)}"

某些首次启动服务,例如 Ignition,不支持网络数据。您可以将它们的配置作为用户数据的一部分提供

baremetal node deploy <node> \
    --config-drive "{\"user_data\": \"... ignition config ...\"}"

在配置网络之外进行部署

如果您需要将使用配置网络的传统部署与通过 L3 进行的虚拟介质部署结合起来,您可能需要为远程节点提供替代 IP 地址以进行连接

[deploy]
http_url = <HTTP server URL internal to the provisioning network>
external_http_url = <HTTP server URL with a routable IP address>

您可能还需要覆盖回调 URL,该 URL 通常从服务目录中获取或在 [service_catalog] 部分中配置

[deploy]
external_callback_url = <Bare Metal API URL with a routable IP address>

如果您需要为每个节点指定特定的 URL,可以使用节点属性 driver_info[external_http_url]。使用后,它将覆盖配置文件中的 deploy.http_urldeploy.external_http_url 设置。

baremetal node set node-0 \
  --driver-info external_http_url="<your_node_external_url>"