裸机置备

Red Hat OpenStack Platform 17.0

安装和配置裸机置备服务(ironic)

摘要

在 Red Hat OpenStack Platform 环境的 overcloud 中安装和配置裸机置备服务,以便为云用户置备和管理物理计算机。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。

使用直接文档反馈(DDF)功能

使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。

  1. Multi-page HTML 格式查看文档。
  2. 请确定您看到文档右上角的 反馈 按钮。
  3. 用鼠标指针高亮显示您想评论的文本部分。
  4. 添加反馈
  5. 添加反馈项中输入您的意见。
  6. 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
  7. Submit

第 1 章 裸机置备服务(ironic)功能

您可以使用裸机置备服务(ironic)组件为云用户置备和管理物理机器作为裸机实例。要置备和管理裸机实例,裸机置备服务与 overcloud 中的以下 Red Hat OpenStack Platform(RHOSP)服务交互:

  • 计算服务(nova)为虚拟机实例管理提供调度、租户配额和面向用户的 API。裸机置备服务为硬件管理提供管理 API。
  • Identity 服务(keystone)提供请求身份验证,并帮助裸机置备服务找到其他 RHOSP 服务。
  • 镜像服务(glance)管理磁盘和实例镜像和镜像元数据。
  • Networking 服务(neutron)提供 DHCP 和网络配置,并调配实例引导时连接到的虚拟或物理网络。
  • Object Storage 服务(swift)会公开一些驱动程序的临时镜像 URL。

裸机置备服务组件

裸机置备服务由名为 ironic-* 的服务组成。以下服务是裸机置备服务:

裸机置备 API(ironic-api)
此服务为用户提供外部 REST API。API 通过远程过程调用(RPC)将应用程序请求发送到裸机置备编排器。
裸机置备编排器(ironic-conductor)

此服务使用驱动程序来执行以下裸机节点管理任务:

  • 添加、编辑和删除裸机节点。
  • 使用 IPMI、Redfish 或其他特定供应商的协议打开和关闭裸机节点。
  • 置备、部署和清理裸机节点。
裸机置备检查器(ironic-inspector)
此服务发现调度裸机实例所需的裸机节点硬件属性,并为发现的以太网 MAC 创建裸机置备服务端口。
裸机置备数据库
此数据库跟踪硬件信息和状态。
消息队列
所有服务都使用此消息服务相互通信,包括在 ironic-apiironic-conductor 之间实施 RPC。
裸机置备代理(ironic-python-agent)
此服务在临时 ramdisk 中运行,为 ironic-conductorironic-inspector 服务提供远程访问、无权硬件控制和硬件内省。

置备裸机实例

裸机恢复调配服务使用 iPXE 将物理计算机调配为裸机实例。下图显示了当云用户使用默认驱动程序启动新的裸机实例时,RHOSP 服务如何在置备过程中进行交互。

The PXE Provisioning Process

第 2 章 裸机置备要求

为了提供云用户可以启动裸机实例的 overcloud,Red Hat OpenStack Platform(RHOSP)环境必须具有所需的硬件和网络配置。

2.1. 硬件要求

要提供给您的云用户使用的裸机的硬件要求取决于操作系统。有关 Red Hat Enterprise Linux 安装的硬件要求的详情,请参考 Red Hat Enterprise Linux 产品文档

要给您的云用户使用的所有裸机,用于置备的裸机必须具有以下功能:

  • 用于连接到裸机网络的 NIC。
  • 一个电源管理接口,如 Redfish 或 IPMI,它连接到可从 ironic-conductor 服务访问的网络。默认情况下,ironic-conductor 在所有 Controller 节点上运行,除非您使用可组合角色并在其他位置运行 ironic-conductor
  • 裸机网络上的 PXE 引导。在部署的所有其他 NIC 中禁用 PXE 引导。

2.2. 网络要求

裸机网络必须是专用网络,供裸机置备服务用于以下操作:

  • overcloud 上裸机的置备和管理。
  • 在节点取消置备时清理裸机节点。
  • 租户访问裸机。

裸机网络提供 DHCP 和 PXE 引导功能来发现裸机系统。这个网络必须在中继接口上使用原生 VLAN,以便裸机置备服务可以提供 PXE 引导和 DHCP 请求。

overcloud 中的裸机置备服务是为可信租户环境而设计的,因为裸机可以直接访问 Red Hat OpenStack Platform(RHOSP)环境的 control plane 网络。因此,默认裸机网络为 ironic-conductor 服务使用扁平网络。

默认的扁平置备网络在客户环境中引入安全问题,因为租户可能会干扰 control plane 网络。要防止这种风险,您可以为无法访问 control plane 的裸机置备服务配置自定义可组合裸机置备网络。

裸机网络必须取消标记置备,还必须有权访问 Bare Metal Provisioning API。control plane 网络(也称为 director provisioning 网络)总是取消标记。其他网络可以标记。

托管裸机置备服务的 Controller 节点必须有权访问裸机网络。

从 裸机配置为 PXE 引导的 NIC 必须有权访问裸机网络。

裸机网络由 OpenStack operator 创建。云用户可以直接访问公共 OpenStack API 和裸机网络。使用默认的扁平裸机网络,云用户也可以对 control plane 有间接访问权限。

裸机置备服务使用裸机网络来清理节点。

2.2.1. 默认裸机网络

在默认的裸机置备服务部署架构中,裸机网络与 control plane 网络是分开的。裸机网络是一个扁平网络,也充当租户网络。此网络必须路由到 control plane 上的裸机置备服务,如 director 置备网络。如果您定义了隔离的裸机网络,则裸机节点无法 PXE 引导。

默认裸机网络架构图

Default bare metal network architecture diagram

2.2.2. 自定义可组合裸机网络

当您在裸机置备服务部署架构中使用自定义可组合裸机网络时,裸机网络是一个自定义可组合网络,它无法访问 control plane。如果要限制对 control plane 的访问,请使用自定义可组合裸机网络。

第 3 章 使用裸机置备服务部署 overcloud

要使用裸机置备服务(ironic)部署 overcloud,您必须创建和配置裸机网络,并配置 overcloud 以启用裸机置备。

  1. 创建裸机网络。您可以重复使用 Controller 节点上的置备网络接口来创建扁平网络,或者创建自定义网络:

  2. 配置 overcloud 以启用裸机置备:

注意

如果使用 Open Virtual Network(OVN),则裸机置备服务只支持 ironic-overcloud.yaml 文件中定义的 DHCP 代理,neutron-dhcp-agent。OVN 上的内置 DHCP 服务器无法置备裸机节点或为 provisioning 网络提供 DHCP。要启用 iPXE 链加载,您必须在 dnsmasq 中设置 --dhcp-match 标签,该标签不受 OVN DHCP 服务器的支持。

先决条件

3.1. 配置默认扁平网络

要使用默认扁平裸机网络,您可以重复使用 Controller 节点上的 provisioning 网络接口,以便为裸机置备服务(ironic)创建桥接。

流程

  1. stack 用户的身份登录 undercloud。
  2. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
  3. 修改 /home/stack/templates/nic-configs/controller.yaml 文件,以重复使用 Controller 节点上的 provisioning 网络接口 eth1 来为裸机网络创建桥接:

    network_config:
    - type: ovs_bridge
      name: br-baremetal
      use_dhcp: false
      members:
        - type: interface
          name: eth1
      addresses:
        - ip_netmask:
            list_join:
            - /
            - - get_param: ControlPlaneIp
              - get_param: ControlPlaneSubnetCidr
    注意

    您在重复使用 provisioning 网络时,您无法在创建裸机时标记裸机网络。

  4. br-baremetal 添加到 network-environment.yaml 文件中的 NeutronBridgeMappings 参数:

    parameter_defaults:
      NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
  5. baremetal 添加到 network-environment.yaml 文件中 NeutronFlatNetworks 参数指定的网络列表中:

    parameter_defaults:
      NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
      NeutronFlatNetworks: datacentre,baremetal

3.2. 配置自定义 IPv4 置备网络

创建自定义 IPv4 调配网络,以通过 IPv4 来置备和部署 overcloud。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. network_data.yaml 文件复制到环境文件目录中:

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/templates/network_data.yaml
  4. 在您的 network_data.yaml 文件中为 overcloud 置备添加新网络:

    # custom network for overcloud provisioning
    - name: OcProvisioning
      name_lower: oc_provisioning
      vip: true
      vlan: 205
      ip_subnet: '<ipv4_subnet_address>/<ipv4_mask>'
      allocation_pools: [{'start': '<ipv4_start_address>', 'end': '<ipv4_end_address>'}]
    • <ipv4_subnet_address > 替换为 IPv4 子网的 IPv4 地址。
    • <ipv4_mask > 替换为 IPv4 子网的 IPv4 网络掩码。
    • <ipv4_start_address > 和 <ipv4_end_address > 替换为您要用于地址分配的 IPv4 范围。
  5. ServiceNetMap 配置中配置 IronicApiNetworkIronicNetwork,以使用新的 IPv4 置备网络:

    ServiceNetMap:
      IronicApiNetwork: oc_provisioning
      IronicNetwork: oc_provisioning
  6. 将新网络作为接口添加到本地 Controller NIC 配置文件:

    network_config:
    - type: vlan
      vlan_id:
        get_param: OcProvisioningNetworkVlanID
      addresses:
      - ip_netmask:
          get_param: OcProvisioningIpSubnet
  7. roles_data.yaml 文件复制到环境文件目录中:

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml /home/stack/templates/roles_data.yaml
  8. 将控制器的新网络添加到您的 roles_data.yaml 文件中:

    networks:
      ...
      OcProvisioning:
        subnet: oc_provisioning_subnet
  9. 如果还没有存在,在您的 roles_data.yaml 文件的 Ironic 角色中包括 IronicInspector 服务:

    ServicesDefault:
      OS::TripleO::Services::IronicInspector

3.3. 配置自定义 IPv6 置备网络

创建自定义 IPv6 置备网络,以在 IPv6 上置备和部署 overcloud。

流程

  1. stack 用户的身份登录 undercloud。
  2. Source stackrc 文件:

    [stack@director ~]$ source ~/stackrc
  3. network_data.yaml 文件复制到环境文件目录中:

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/templates/network_data.yaml
  4. 在您的 network_data.yaml 文件中为 overcloud 置备添加新的 IPv6 网络:

    # custom network for IPv6 overcloud provisioning
    - name: OcProvisioningIPv6
      vip: true
      name_lower: oc_provisioning_ipv6
      vlan: 10
      ipv6: true
      ipv6_subnet: '<ipv6_subnet_address>/<ipv6_prefix>'
      ipv6_allocation_pools: [{'start': '<ipv6_start_address>', 'end': '<ipv6_end_address>'}]
      gateway_ipv6: '<ipv6_gw_address>'
    • <ipv6_subnet_address > 替换为 IPv6 子网的 IPv6 地址。
    • <ipv6_prefix > 替换为 IPv6 子网的 IPv6 网络前缀。
    • <ipv6_start_address > 和 <ipv6_end_address > 替换为您要用于地址分配的 IPv6 范围。
    • <ipv6_gw_address > 替换为网关的 IPv6 地址。
  5. 在环境文件目录中创建新文件 network_environment_overrides.yaml

    $ touch /home/stack/templates/network_environment_overrides.yaml
  6. network_environment_overrides.yaml 文件中配置 IronicApiNetworkIronicNetwork,以使用新的 IPv6 置备网络:

    ServiceNetMap:
      IronicApiNetwork: oc_provisioning_ipv6
      IronicNetwork: oc_provisioning_ipv6
  7. IronicIpVersion 参数设置为 6

    parameter_defaults:
      IronicIpVersion: 6
  8. 启用 RabbitIPv6MysqlIPv6RedisIPv6 参数:

    parameter_defaults:
      RabbitIPv6: True
      MysqlIPv6: True
      RedisIPv6: True
  9. 将新网络作为接口添加到本地 Controller NIC 配置文件:

    network_config:
    - type: vlan
      vlan_id:
        get_param: OcProvisioningIPv6NetworkVlanID
      addresses:
      - ip_netmask:
          get_param: OcProvisioningIPv6IpSubnet
  10. roles_data.yaml 文件复制到环境文件目录中:

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml /home/stack/templates/roles_data.yaml
  11. 在您的 roles_data.yaml 文件中,为 Controller 角色添加新网络:

    networks:
      ...
      - OcProvisioningIPv6
  12. 如果还没有存在,在您的 roles_data.yaml 文件的 Ironic 角色中包括 IronicInspector 服务:

    ServicesDefault:
      OS::TripleO::Services::IronicInspector

3.4. 配置 overcloud 以启用裸机置备

使用环境文件来部署 overcloud,并启用了裸机置备服务(ironic)。您可以使用位于 /usr/share/openstack-tripleo-heat-templates/environments/services 目录中的示例模板:

  • 对于使用 OVS 的部署: ironic.yaml
  • 对于使用 OVN 的部署:ironic-overcloud.yaml

以下流程使用 ironic-overcloud.yaml 文件来说明如何配置部署以启用裸机置备服务。

流程

  1. 将示例裸机模板复制到环境文件目录中:

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml /home/stack/templates/ironic-overcloud.yaml
  2. 可选:配置在置备前以及置备间要在裸机上执行的清理类型:

    parameter_defaults:
      IronicCleaningDiskErase: <cleaning_type>

    <cleaning_type > 替换为以下值之一:

    • 完整 :(默认)执行完全清理。
    • 元数据 :仅清理分区表。这种类型的清理大大加快清理过程。但是,因为部署在多租户环境中不太安全,因此仅在可信租户环境中使用这个选项。
  3. 可选:在默认驱动程序中添加额外驱动程序:

    parameter_defaults:
      IronicEnabledHardwareTypes: ipmi,idrac,ilo,[additional_driver_1],...,[additional_driver_n]

    用您要启用的额外驱动程序替换 [additional_driver_1],(可选)以及直到 [additional_driver_n]

  4. 要启用裸机内省,请将示例 ironic-inspector.yaml 文件复制到环境文件目录中:

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-inspector.yaml /home/stack/templates/ironic-inspector.yaml
  5. 为您的环境配置 ironic-inspector.yaml

    parameter_defaults:
      IronicInspectorSubnets:
        - ip_range: <ip_range>
      IPAImageURLs: '["http://<ip_address>:<port>/agent.kernel", "http://<ip_address>:<port>/agent.ramdisk"]'
      IronicInspectorInterface: '<baremetal_interface>'
    • <ip_range > 替换为环境的 IP 范围。您可以指定多个范围。
    • <ip_address>:<port> 替换为托管 IPA 内核和 ramdisk 的 web 服务器的 IP 地址和端口。要使用 undercloud 上相同的镜像,请将 IP 地址设置为 undercloud IP 地址,并将端口设置为 8088。如果省略此参数,则必须在每个 Controller 节点上包括 alternatives。
    • <baremetal_interface> 替换为裸机网络接口,例如 br-baremetal
  6. 将您的新角色和自定义环境文件添加到堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
      -e [your environment files] \
      -e /home/stack/templates/node-info.yaml
      -r /home/stack/templates/roles_data.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/network-environment.yaml \
      -e /home/stack/templates/network_environment_overrides.yaml
      -n /home/stack/templates/network_data.yaml
      -e /home/stack/templates/ironic-overcloud.yaml \
    注意

    将环境文件传递给 openstack overcloud deploy 命令的顺序非常重要,因为稍后文件中的配置具有优先权。因此,在 overcloud 上启用和配置裸机置备的环境文件必须在任何网络配置文件后传递给该命令。

3.5. 测试裸机置备服务

您可以使用 OpenStack Integration Test Suite 来验证 Red Hat OpenStack 部署。如需更多信息,请参阅 OpenStack Integration Test Suite 指南

裸机置备服务的额外验证方法:

  1. 配置 shell 以以管理用户身份访问身份:

    $ source ~/overcloudrc
  2. 检查 nova-compute 服务是否在 Controller 节点上运行:

    $ openstack compute service list -c Binary -c Host -c Status
  3. 如果更改了默认 ironic 驱动程序,请确保启用了所需的驱动程序:

    $ openstack baremetal driver list
  4. 确保列出了 ironic 端点:

    $ openstack catalog list

3.6. 其他资源

第 4 章 在部署后配置裸机置备服务

在使用裸机置备服务(ironic)部署 overcloud 后,您可能需要完成一些额外的配置,以便为裸机工作负载准备您的环境:

  • 配置网络.
  • 配置节点清理。
  • 为您的裸机节点创建裸机类型和镜像。
  • 配置部署接口。
  • 配置虚拟介质引导。
  • 分离虚拟机和物理机器配置。

先决条件

4.1. 配置 OpenStack 网络

配置 OpenStack 网络,使其与裸机置备服务通信,以进行 DHCP、PXE 引导和其他要求。您可以通过两种方式配置裸机网络:

  • 对 Ironic Conductor 服务使用扁平裸机网络。此网络必须路由到 control plane 网络上的 Ironic 服务。
  • 使用自定义可组合网络在 overcloud 中实施 Ironic 服务。

按照本节中的步骤为单个平面网络配置 OpenStack 网络,以便在裸机上置备,或者配置不依赖于未使用隔离网络或扁平网络的新可组合网络。该配置使用 ML2 插件和 Open vSwitch 代理。

4.1.1. 配置 OpenStack 网络,以在扁平裸机网络上与裸机置备服务通信

在托管 OpenStack 网络服务的服务器上,以 root 用户身份执行以下步骤。

先决条件

流程

  1. 配置 shell 以以管理用户身份访问身份:

    $ source ~/overcloudrc
  2. 创建扁平网络来置备裸机实例:

    $ openstack network create \
      --provider-network-type flat \
      --provider-physical-network baremetal \
      --share NETWORK_NAME

    NETWORK_NAME 替换为这个网络的名称。您在其中实现虚拟网络(本例中为 baremetal)的物理网络的名称已在 ~/templates/network-environment.yaml 文件中使用参数 NeutronBridgeMappings

  3. 在扁平网络上创建子网:

    $ openstack subnet create \
      --network NETWORK_NAME \
      --subnet-range NETWORK_CIDR \
      --ip-version 4 \
      --gateway GATEWAY_IP \
      --allocation-pool start=START_IP,end=END_IP \
      --dhcp SUBNET_NAME

    替换以下值:

    • SUBNET_NAME 替换为子网的名称。
    • NETWORK_NAME 替换为您在上一步中创建的 provisioning 网络的名称。
    • 使用子网所代表的 IP 地址块的无类别域间路由(CIDR)表示替换 NETWORK_CIDR。您以 START_IP 开头并以 END_IP 开头的范围中指定的 IP 地址块必须在 NETWORK_CIDR 指定的 IP 地址块内。
    • GATEWAY_IP 替换为作为新子网的网关的路由器接口的 IP 地址或主机名。此地址必须在 NETWORK_CIDR 指定的 IP 地址块内,但由范围指定的 IP 地址块以 START_IP 开始并以 END_IP 结束。
    • START_IP 替换为 IP 地址,该 IP 地址将在分配浮动 IP 地址的新子网中表示 IP 地址的范围。
    • END_IP 替换为 IP 地址,该地址表示将在其中分配浮动 IP 地址的新子网中 IP 地址的范围。
  4. 为网络和子网创建一个路由器,以确保 OpenStack 网络服务提供元数据请求:

    $ openstack router create ROUTER_NAME

    ROUTER_NAME 替换为路由器的名称。

  5. 将子网附加到新路由器:

    $ openstack router add subnet ROUTER_NAME BAREMETAL_SUBNET

    ROUTER_NAME 替换为您的路由器的名称,将 BAREMETAL_SUBNET 替换为之前创建的子网的 ID 或名称。这允许提供 cloud-init 的元数据请求并配置节点。

4.1.2. 配置 OpenStack 网络,使其与自定义可组合裸机网络上的裸机置备服务通信

在托管 OpenStack 网络服务的服务器上,以 root 用户身份执行以下步骤。

先决条件

流程

  1. 创建一个带有 VlanID 的 vlan 网络,它与您在部署期间创建的 OcProvisioning 网络匹配。将新网络命名为 provisioning,以匹配清理网络的默认名称。

    (overcloud) [stack@host01 ~]$ openstack network create \
      --share \
      --provider-network-type vlan \
      --provider-physical-network datacentre \
      --provider-segment 205 provisioning

    如果 overcloud 网络的名称没有 置备,请将 IronicProvisioningNetwork 参数设置为 provisioning 并重新部署 overcloud:

    ~/templates/ironic.yaml

    parameter_defaults:
      IronicProvisioningNetwork:
        default: provisioning
        description: Name or UUID of the overcloud network used for provisioning bare metal nodes, if IronicDefaultNetworkInterface is set to "neutron". The default value can be left during the initial deployment and should be changed to an actual UUID in a post-deployment stack update.
        type: string

4.2. 配置节点清理

默认情况下,裸机置备服务使用名为 provisioning 的网络来清理节点。但是,网络名称在 OpenStack 网络中没有唯一,因此租户可以创建具有相同名称的网络,这会导致与裸机置备服务冲突。要避免冲突,请使用网络 UUID。

先决条件

流程

  1. 要配置节点清理,在托管裸机置备服务的 Controller 上提供提供商网络 UUID:

    ~/templates/ironic.yaml

    parameter_defaults:
        IronicCleaningNetwork: <UUID>

    &lt;UUID> 替换为您在前面步骤中创建的裸机网络的 UUID。

    您可以使用 openstack network show 命令找到 UUID:

    openstack network show NETWORK_NAME -f value -c id
    注意

    您必须在初始 overcloud 部署后执行此配置,因为网络的 UUID 不可用。

  2. 要应用更改,请使用 openstack overcloud deploy 重新部署 overcloud。有关部署命令的更多信息,请参阅使用 裸机置备服务部署 overcloud

4.2.1. 手动清理节点

要手动启动节点清理,节点必须处于 manageable 状态。

节点清理有两个模式:

元数据只清理 - 从给定节点中的所有磁盘中删除分区。这是一个更快的清理周期,但安全性较低,因为它只清除分区表。仅在可信租户环境中使用此模式。

完整清理 - 使用 ATA 安全清除或缩减从所有磁盘中删除所有数据。这可能需要几小时才能完成。

先决条件

流程

启动 元数据 清理:

$ openstack baremetal node clean _UUID_ \
    --clean-steps '[{"interface": "deploy", "step": "erase_devices_metadata"}]'

启动 完全 清理:

$ openstack baremetal node clean _UUID_ \
    --clean-steps '[{"interface": "deploy", "step": "erase_devices"}]'

使用您要 清理的节点的 UUID 替换 UUID。

成功清理后,节点状态将返回到 manageable。如果状态 清理失败,请检查 last_error 字段是否有故障原因。

4.3. 创建裸机类型和资源类

您必须创建一个类别和资源类,以用于为特定工作负载标记裸机节点。

流程

  1. 提供 overcloud 凭证文件:

    $ source ~/overcloudrc
  2. 为裸机节点创建新实例类别:

    (overcloud)$ openstack flavor create --id auto \
     --ram <ram_size_mb> --disk <disk_size_gb> \
     --vcpus <no_vcpus> baremetal
    • <ram_size_mb> 替换为裸机节点的 RAM,以 MB 为单位。
    • <disk_size_gb> 替换为裸机节点中的磁盘大小(以 GB 为单位)。
    • <no_vcpus> 替换为裸机节点中的 CPU 数量。

      注意

      这些属性不用于调度实例。但是,计算调度程序会使用磁盘大小来确定根分区大小。

  3. 检索节点列表以标识其 UUID:

    (overcloud)$ openstack baremetal node list
  4. 使用自定义裸机资源类标记每个裸机节点:

    (overcloud)$ openstack baremetal node set \
     --resource-class baremetal.<CUSTOM> <node>
    • <CUSTOM > 替换为标识资源类目的的字符串。例如,设置为 GPU 以创建一个自定义 GPU 资源类,供您用来标记您要为 GPU 工作负载指定的裸机节点。
    • <node> 替换为裸机节点的 ID。
  5. 将裸机节点的新实例类别与自定义资源类关联:

    (overcloud)$ openstack flavor set \
     --property resources:CUSTOM_BAREMETAL_<CUSTOM>=1 \
     baremetal

    要确定与裸机恢复服务节点的资源类对应的自定义资源类的名称,请将资源类转换为大写,将每个标点标记替换为下划线,并将前缀替换为 CUSTOM_

    注意

    类别只能请求一个裸机资源类的实例。

  6. 设置以下类型属性,以防止计算调度程序使用裸机类型属性来调度实例:

    (overcloud)$ openstack flavor set \
     --property resources:VCPU=0 \
     --property resources:MEMORY_MB=0 \
     --property resources:DISK_GB=0 baremetal
  7. 验证新类别具有正确的值:

    (overcloud)$ openstack flavor list

4.4. 创建裸机镜像

包含裸机置备服务(ironic)的 overcloud 需要两组镜像。在部署过程中,裸机置备服务从部署镜像引导裸机节点,并将用户镜像复制到节点上。

部署镜像
裸机置备服务使用部署镜像引导裸机节点,并将用户镜像复制到裸机节点。部署镜像 由内核 镜像和 ramdisk 镜像组成。
用户镜像

用户镜像是您部署到裸机节点的镜像。用户镜像也有 内核 镜像和 ramdisk 镜像,但用户镜像还包含 主要 镜像。主镜像是 root 分区或整个磁盘镜像。

  • 完整磁盘镜像 是包含分区表和引导装载程序的镜像。裸机置备服务无法控制使用完整磁盘镜像部署的节点的后续重启,因为节点支持 localboot。
  • root 分区镜像仅包含操作系统的根分区。如果您使用 root 分区,在部署镜像加载到镜像服务后,您可以在节点属性中将部署镜像设置为节点引导镜像。节点的后续重启使用 netboot 来拉取用户镜像。

本节中的示例使用 root 分区镜像来置备裸机节点。

4.4.1. 准备部署镜像

您不必创建部署镜像,因为它已在 undercloud 部署 overcloud 时创建。部署镜像由两个镜像组成 - 内核镜像和 ramdisk 镜像:

/tftpboot/agent.kernel
/tftpboot/agent.ramdisk

这些镜像通常位于主目录中,除非您已在其他位置删除或解压缩它们。如果它们不在主目录中,并且您仍然安装了 rhosp-director-images-ipa 软件包,则这些镜像位于 /usr/share/rhosp-director-images/ironic-python-agent*.tar 文件中。

先决条件

流程

提取镜像并将其上传到镜像服务:

$ openstack image create \
  --container-format aki \
  --disk-format aki \
  --public \
  --file ./tftpboot/agent.kernel bm-deploy-kernel
$ openstack image create \
  --container-format ari \
  --disk-format ari \
  --public \
  --file ./tftpboot/agent.ramdisk bm-deploy-ramdisk

4.4.2. 准备用户镜像

您所需的最终镜像是您将部署到裸机节点上的用户镜像。用户镜像也有内核和 ramdisk 以及主镜像。要下载并安装这些软件包,您必须首先配置完整磁盘镜像环境变量以符合您的要求。

4.4.3. 安装用户镜像

配置用户镜像,然后将镜像上传到镜像服务(glance)。

先决条件

流程

  1. 客户门户网站 下载 Red Hat Enterprise Linux KVM 客户机镜像
  2. DIB_LOCAL_IMAGE 定义为下载的镜像:

    $ export DIB_LOCAL_IMAGE=rhel-8.0-x86_64-kvm.qcow2
  3. 设置注册信息。如果使用红帽客户门户网站,您必须配置以下信息:

    $ export REG_USER='USER_NAME'
    $ export REG_PASSWORD='PASSWORD'
    $ export REG_AUTO_ATTACH=true
    $ export REG_METHOD=portal
    $ export https_proxy='IP_address:port' (if applicable)
    $ export http_proxy='IP_address:port' (if applicable)

    如果使用 Red Hat Satellite,您必须配置以下信息:

    $ export REG_USER='USER_NAME'
    $ export REG_PASSWORD='PASSWORD'
    $ export REG_SAT_URL='<SATELLITE URL>'
    $ export REG_ORG='<SATELLITE ORG>'
    $ export REG_ENV='<SATELLITE ENV>'
    $ export REG_METHOD=<METHOD>

    如果有任何离线存储库,您可以将 DIB_YUM_REPO_CONF 定义为本地存储库配置:

    $ export DIB_YUM_REPO_CONF=<path-to-local-repository-config-file>
  4. 使用 diskimage-builder 工具创建用户镜像:

    $ export DIB_RELEASE=8
    $ disk-image-create rhel baremetal -o rhel-image

    此命令将内核提取为 rhel-image.vmlinuz,初始 ramdisk 为 rhel-image.initrd

  5. 将镜像上传到镜像服务:

    $ KERNEL_ID=$(openstack image create \
      --file rhel-image.vmlinuz --public \
      --container-format aki --disk-format aki \
      -f value -c id rhel-image.vmlinuz)
    $ RAMDISK_ID=$(openstack image create \
      --file rhel-image.initrd --public \
      --container-format ari --disk-format ari \
      -f value -c id rhel-image.initrd)
    $ openstack image create \
      --file rhel-image.qcow2   --public \
      --container-format bare \
      --disk-format qcow2 \
      --property kernel_id=$KERNEL_ID \
      --property ramdisk_id=$RAMDISK_ID \
      rhel-image

4.5. 将物理机添加为裸机节点

注册裸机节点的方法有两种:

  1. 使用节点详情准备清单文件,将该文件导入到裸机置备服务,并使节点可用。
  2. 将物理计算机注册为裸机节点,然后手动添加硬件详细信息并为其每个以太网 MAC 地址创建端口。您可以在具有 overcloudrc 文件的任何节点上执行这些步骤。

注册物理计算机后,不会立即向新资源通知 Compute,因为计算资源跟踪程序会定期同步。您可以在下一次定期任务运行后查看更改。您可以使用 /etc/nova/nova.conf 文件中的 scheduler_driver_task_period 更新 periodic 任务的频率。默认周期为 60 秒。

4.5.1. 使用清单文件注册裸机节点

使用节点详情准备清单文件,将该文件导入到裸机置备服务(ironic)中,并使节点可用。

先决条件

流程

  1. 创建清单文件 overcloud-nodes.yaml,其中包含节点详情。您可以使用一个文件注册多个节点。

    nodes:
        - name: node0
          driver: ipmi
          driver_info:
            ipmi_address: <ipmi_ip>
            ipmi_username: <user>
            ipmi_password: <password>
          properties:
            cpus: <cpu_count>
            cpu_arch: <cpu_arch>
            memory_mb: <memory>
            local_gb: <root_disk>
            root_device:
                serial: <serial>
          ports:
            - address: <mac_address>
    • <ipmi_ip > 替换为 Bare Metal 控制器的地址。
    • 将 & lt;user& gt; 替换为您的用户名。
    • 将 & lt;password& gt; 替换为您的密码。
    • <cpu_count > 替换为 CPU 数量。
    • <cpu_arch > 替换为 CPU 的构架类型。
    • <memory > 替换为 MiB 的内存量。
    • <root_disk > 替换为 GiB 中根磁盘的大小。只有在机器有多个磁盘时才需要。
    • &lt;serial> 替换为您要用于部署的磁盘的序列号。
    • <mac_address > 替换为用于 PXE 引导的 NIC 的 MAC 地址。
  2. 获取 overcloudrc 文件:

    $ source ~/overcloudrc
  3. 将清单文件导入到裸机置备服务:

    $ openstack baremetal create overcloud-nodes.yaml

    节点现在处于 注册 状态。

  4. 指定部署内核并在每个节点中部署 ramdisk:

    $ openstack baremetal node set <node> \
      --driver-info deploy_kernel=<kernel_file> \
      --driver-info deploy_ramdisk=<initramfs_file>
    • <node> 替换为节点的名称或 ID。
    • <kernel_file > 替换为 .kernel 镜像的路径,例如 file:///var/lib/ironic/httpboot/agent.kernel
    • <initramfs_file > 替换为 .initramfs 镜像的路径,例如 file:///var/lib/ironic/httpboot/agent.ramdisk
  5. 可选:指定每个节点的 IPMI 密码套件:

    $ openstack baremetal node set <node> \
     --driver-info ipmi_cipher_suite=<version>
    • <node> 替换为节点的名称或 ID。
    • <version > 替换为要在节点上使用的密码套件版本。设置为以下有效值之一:

      • 3 - 节点使用带有 SHA1 密码套件的 AES-128。
      • 17 - 节点使用带有 SHA256 密码套件的 AES-128。
  6. 将节点的置备状态设置为 available

    $ openstack baremetal node manage <node>
    $ openstack baremetal node provide <node>

    如果启用了节点清理,裸机置备服务会清理节点。

  7. 在节点上设置本地引导选项:

    $ openstack baremetal node set <node> --property capabilities="boot_option:local"
  8. 检查节点是否已注册:

    $ openstack baremetal node list

    注册节点及其显示的状态之间可能会有延迟。

4.5.2. 手动注册裸机节点

将物理计算机注册为裸机节点,然后手动添加硬件详细信息并为其每个以太网 MAC 地址创建端口。您可以在具有 overcloudrc 文件的任何节点上执行这些步骤。

先决条件

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 提供 overcloud 凭证文件:

    (undercloud)$ source ~/overcloudrc
  3. 添加新节点:

    $ openstack baremetal node create --driver <driver_name> --name <node_name>
    • <driver_name > 替换为驱动程序的名称,如 ipmi
    • <node_name > 替换为新裸机节点的名称。
  4. 记下在创建时分配给节点的 UUID。
  5. 将每个注册节点的引导选项设置为 local

    $ openstack baremetal node set \
      --property capabilities="boot_option:local" <node>

    <node> 替换为裸机节点的 UUID。

  6. 为节点驱动程序指定部署的内核并部署 ramdisk:

    $ openstack baremetal node set <node> \
      --driver-info deploy_kernel=<kernel_file> \
      --driver-info deploy_ramdisk=<initramfs_file>
    • <node> 替换为裸机节点的 ID。
    • <kernel_file > 替换为 .kernel 镜像的路径,例如 file:///var/lib/ironic/httpboot/agent.kernel
    • <initramfs_file > 替换为 .initramfs 镜像的路径,例如 file:///var/lib/ironic/httpboot/agent.ramdisk
  7. 更新节点属性以匹配节点上的硬件规格:

    $ openstack baremetal node set <node> \
      --property cpus=<cpu> \
      --property memory_mb=<ram> \
      --property local_gb=<disk> \
      --property cpu_arch=<arch>
    • <node> 替换为裸机节点的 ID。
    • <cpu > 替换为 CPU 数量。
    • 将 & lt;ram& gt; 替换为 RAM(以 MB 为单位)。
    • <disk> 替换为磁盘大小(以 GB 为单位)。
    • 将 & lt;arch& gt; 替换为构架类型。
  8. 可选:指定每个节点的 IPMI 密码套件:

    $ openstack baremetal node set <node> \
     --driver-info ipmi_cipher_suite=<version>
    • <node> 替换为裸机节点的 ID。
    • <version > 替换为要在节点上使用的密码套件版本。设置为以下有效值之一:

      • 3 - 节点使用带有 SHA1 密码套件的 AES-128。
      • 17 - 节点使用带有 SHA256 密码套件的 AES-128。
  9. 可选:如果您有多个磁盘,请设置根设备提示来通知部署 ramdisk 磁盘:

    $ openstack baremetal node set <node> \
      --property root_device='{"<property>": "<value>"}'
    • <node> 替换为裸机节点的 ID。
    • < property > 和 <value > 替换为您要用于部署的磁盘的详情,如 root_device='{"size": "128"}'

      RHOSP 支持以下属性:

      • model(字符串):设备识别码。
      • vendor(字符串):设备厂商。
      • serial(字符串):磁盘序列号。
      • hctl(字符串):SCSI 的 Host:Channel:Target:Lun。
      • size(整数):设备的大小(以 GB 为单位)。
      • wwn(字符串):唯一的存储 ID。
      • wwn_with_extension(字符串):唯一存储 ID 附加厂商扩展名。
      • wwn_vendor_extension(字符串):唯一厂商存储标识符。
      • rotational(布尔值):旋转磁盘设备为 true (HDD),否则为 false (SSD)。
      • Name (字符串):设备名称,例如:/dev/sdb1 仅对具有持久名称的设备使用此属性。

        注意

        如果您指定了多个属性,该设备必须与所有这些属性匹配。

  10. 通过在 provisioning 网络中创建具有 NIC 的 MAC 地址端口来通知节点网卡的裸机置备服务:

    $ openstack baremetal port create --node <node_uuid> <mac_address>
    • <node> 替换为裸机节点的唯一 ID。
    • <mac_address > 替换为用于 PXE 引导的 NIC 的 MAC 地址。
  11. 验证节点的配置:

    $ openstack baremetal node validate <node>
    +------------+--------+---------------------------------------------+
    | Interface  | Result | Reason                                      |
    +------------+--------+---------------------------------------------+
    | boot       | False  | Cannot validate image information for node  |
    |            |        | a02178db-1550-4244-a2b7-d7035c743a9b        |
    |            |        | because one or more parameters are missing  |
    |            |        | from its instance_info. Missing are:        |
    |            |        | ['ramdisk', 'kernel', 'image_source']       |
    | console    | None   | not supported                               |
    | deploy     | False  | Cannot validate image information for node  |
    |            |        | a02178db-1550-4244-a2b7-d7035c743a9b        |
    |            |        | because one or more parameters are missing  |
    |            |        | from its instance_info. Missing are:        |
    |            |        | ['ramdisk', 'kernel', 'image_source']       |
    | inspect    | None   | not supported                               |
    | management | True   |                                             |
    | network    | True   |                                             |
    | power      | True   |                                             |
    | raid       | True   |                                             |
    | storage    | True   |                                             |
    +------------+--------+---------------------------------------------+

    验证 输出结果 显示以下内容:

    • false :该接口的验证失败。如果提供的原因包括 instance_info 参数 [\'ramdisk'、\'kernel' 和 \'image_source'],这可能是因为计算服务在部署过程开始时填充这些缺失的参数,因此在此刻还没有设置它们。如果您使用完整磁盘镜像,可能需要仅设置 image_source 才能通过验证。
    • true :该接口已通过验证。
    • None: 接口不支持您的驱动。

4.6. 配置 Redfish 虚拟介质引导

重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

您可以使用 Redfish 虚拟介质引导,向节点的 Baseboard Management Controller (BMC) 提供引导镜像,以便 BMC 可将镜像插入到其中一个虚拟驱动器中。然后,节点可以从虚拟驱动器引导到镜像中存在的操作系统。

Redfish 硬件类型支持通过虚拟介质引导部署、救援和用户镜像。Bare Metal Provisioning 服务(ironic)使用与节点关联的内核和 ramdisk 镜像,在节点部署时为 UEFI 或 BIOS 引导模式构建可引导的 ISO 镜像。虚拟介质引导的主要优点是可以消除 PXE 的 TFTP 镜像传输阶段,并使用 HTTP GET 或其他方法。

4.6.1. 使用 Redfish 虚拟介质引导部署裸机服务器

重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

要通过虚拟介质使用 redfish 硬件类型引导节点,请将引导接口设置为 redfish-virtual-media,对于 UEFI 节点,请定义 EFI 系统分区 (ESP) 镜像。然后将注册节点配置为使用 Redfish 虚拟介质引导。

先决条件

  • undercloud.conf 文件的 enabled_hardware_types 参数中启用 redfish 驱动程序。
  • 注册并登记的裸机节点。
  • Image Service (glance) 中的 IPA 和实例镜像。
  • 对于 UEFI 节点,还必须在 Image Service (glance) 中有一个 EFI 系统分区镜像 (ESP)。
  • 裸机类型。
  • 用于清理和置备的网络。
  • 已安装 Sushy 库:

    $ sudo yum install sushy

流程

  1. 将 Bare Metal 服务 (ironic) 引导接口设置为 redfish-virtual-media

    $ openstack baremetal node set --boot-interface redfish-virtual-media $NODE_NAME

    $NODE_NAME 替换为节点的名称。

  2. 对于 UEFI 节点,将引导模式设置为 uefi

    $ openstack baremetal node set --property capabilities="boot_mode:uefi" $NODE_NAME

    $NODE_NAME 替换为节点的名称。

    注意

    对于 BIOS 节点,请不要完成此步骤。

  3. 对于 UEFI 节点,定义 EFI 系统分区 (ESP) 镜像:

    $ openstack baremetal node set --driver-info bootloader=$ESP $NODE_NAME

    $ESP 替换为 glance 镜像 UUID 或 ESP 镜像的 URL,并将 $NODE_NAME 替换为节点的名称。

    注意

    对于 BIOS 节点,请不要完成此步骤。

  4. 在裸机节点上创建一个端口,并将端口与裸机节点上 NIC 的 MAC 地址关联:

    $ openstack baremetal port create --pxe-enabled True --node $UUID $MAC_ADDRESS

    $UUID 替换为裸机节点的 UUID,并将 $MAC_ADDRESS 替换为裸机节点上 NIC 的 MAC 地址。

  5. 创建新的裸机服务器:

    $ openstack server create \
        --flavor baremetal \
        --image $IMAGE \
        --network $NETWORK \
        test_instance

    $IMAGE$NETWORK 替换为您要使用的镜像的名称。

4.7. 使用主机聚合来分离物理和虚拟机置备

OpenStack Compute 使用主机聚合来对具有特定共享属性的节点进行分区,并分组到一起。置备实例时,计算调度程序将类别的属性与分配给主机聚合的属性进行比较,并确保实例在正确的聚合和正确的主机上置备:在物理虚拟机上或作为虚拟机。

完成本节中的步骤以执行以下操作:

  • 将属性 baremetal 添加到您的类型,并将其设置为 truefalse
  • 使用匹配的 baremetal 属性为裸机主机和计算节点创建单独的主机聚合。分组为聚合的节点将继承此属性。

先决条件

流程

  1. baremetal 类别上,将 baremetal 属性设为 true

    $ openstack flavor set baremetal --property baremetal=true
  2. 在虚拟实例使用的类别上将 baremetal 属性设置为 false

    $ openstack flavor set FLAVOR_NAME --property baremetal=false
  3. 创建名为 baremetal-hosts 的主机聚合:

    $ openstack aggregate create --property baremetal=true baremetal-hosts
  4. 将每个 Controller 节点添加到 baremetal-hosts 聚合中:

    $ openstack aggregate add host baremetal-hosts HOSTNAME
    注意

    如果您使用 NovaIronic 服务创建了可组合角色,请将使用此服务的所有节点添加到 baremetal-hosts 聚合中。默认情况下,只有 Controller 节点具有 NovaIronic 服务。

  5. 创建名为 virtual-hosts 的主机聚合:

    $ openstack aggregate create --property baremetal=false virtual-hosts
  6. 将每个 Compute 节点添加到 virtual-hosts 聚合中:

    $ openstack aggregate add host virtual-hosts HOSTNAME
  7. 如果您在部署 overcloud 时没有添加以下 Compute 过滤器调度程序,现在将其添加到 _/etc/nova/nova.conf_ 文件中的 scheduler_default_filters 下:

    AggregateInstanceExtraSpecsFilter

第 5 章 管理裸机节点

部署包含裸机置备服务(ironic)的 overcloud 后,您可以在注册的裸机节点上置备物理计算机并在 overcloud 中启动裸机实例。

先决条件

5.1. 启动裸机实例

您可以从命令行或从 OpenStack 控制面板启动实例。

先决条件

5.1.1. 使用命令行界面启动实例

您可以使用 OpenStack 客户端 CLI 创建裸机实例。

先决条件

流程

  1. 配置 shell 以以管理用户身份访问身份服务(keystone):

    $ source ~/overcloudrc
  2. 创建裸机实例:

    $ openstack server create \
     --nic net-id=<network_uuid> \
     --flavor baremetal \
     --image <image_uuid> \
     myBareMetalInstance
    • <network_uuid> 替换为您创建的网络的唯一标识符,以用于裸机置备服务。
    • <image_uuid> 替换为包含实例需要的软件配置集的镜像的唯一标识符。
  3. 检查实例的状态:

    $ openstack server list --name myBareMetalInstance

5.1.2. 使用仪表板启动实例

使用仪表板图形用户界面部署裸机实例。

先决条件

流程

  1. 登录到位于 http[s]://DASHBOARD_IP/dashboard 的仪表板。
  2. Project > Compute > Instances
  3. Launch Instance

    • Details 选项卡中,指定 Instance Name,为 Count 选择 1
    • Source 选项卡中,从 Select Boot Source 中选择 Image,然后单击 +( 加号)符号来选择操作系统磁盘镜像。您选择要移到 Allocated 的镜像。
    • Flavor 选项卡中,选择 baremetal
    • 网络选项卡中,使用 +(加)和 - (减)按钮,将所需的网络从 Available 移到 Allocated。确保已选中您为裸机置备服务创建的共享网络。
    • 如果要将实例分配到安全组,在 Security Groups 选项卡中,使用箭头将组移到 分配
  4. Launch Instance

5.2. 在裸机置备服务中配置端口组

注意

本发行版本中 作为技术预览提供 的裸机节点的端口组功能,因此不享有红帽的全面支持。它应该只用于测试,不应部署到生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

端口组(bond)提供了一种将多个网络接口聚合到一个"绑定"接口的方法。端口组配置始终优先于单个端口配置。

如果端口组有物理网络,那么该端口组中的所有端口都必须具有相同的物理网络。裸机置备服务使用 configdrive 支持在实例中配置端口组。

注意

裸机置备服务 API 版本 1.26 支持端口组配置。.Prerequisites

5.2.1. 在交换机上手动配置端口组

要在裸机部署中配置端口组,您必须手动配置交换机上的端口组。您必须确保交换机中的模式和属性与裸机中的模式和属性对应,因为命名可以在交换机上有所不同。

注意

如果您需要使用 iPXE 启动部署,则无法使用端口组来置备和清理。

使用端口组回退时,端口组中的所有端口可在连接失败时回退到单独的交换机端口。根据交换机是否支持端口组回退,您可以使用 --support-standalone-ports--unsupport-standalone-ports 选项。

先决条件

5.2.2. 在裸机置备服务中配置端口组

创建一个端口组,将多个网络接口聚合到一个 绑定接口

先决条件

流程

  1. 通过指定其所属的节点、名称、地址、模式、属性以及是否支持回退到独立端口来创建端口组。

    # openstack baremetal port group create --node NODE_UUID --name NAME --address MAC_ADDRESS --mode MODE  --property miimon=100 --property xmit_hash_policy="layer2+3" --support-standalone-ports

    您还可以使用 openstack baremetal port group set 命令来更新端口组。

    如果不指定地址,部署的实例端口组地址与 OpenStack 网络端口相同。如果您没有附加 neutron 端口,则端口组配置会失败。

    在接口附加过程中,端口组的优先级高于端口,因此首先使用它们。目前,无法在接口附加请求中指定端口组或端口。没有任何端口的端口组将被忽略。

    注意

    您必须在镜像中以独立模式手动配置端口组,或者通过生成 配置映射 并将其添加到节点的 instance_info 中。确保具有 cloud-init 版本 0.7.7 或更高版本,以便端口组配置正常工作。

  2. 将端口与端口组关联:

    • 在端口创建过程中:

      # openstack baremetal port create --node NODE_UUID --address MAC_ADDRESS --port-group test
    • 在端口更新过程中:

      # openstack baremetal port set PORT_UUID --port-group PORT_GROUP_UUID
  3. 通过提供带有 cloud-init 或支持绑定的镜像来引导实例。

    要检查端口组是否已正确配置,请运行以下命令:

    # cat /proc/net/bonding/bondX

    在这里,Xcloud-init 会自动为每个配置的端口组生成的数字,从 0 开始,为每个配置的端口组递增。

5.3. 确定主机到 IP 地址映射

使用以下命令来确定将哪些 IP 地址分配给哪些主机和裸机节点。使用这些命令,您可以在不直接访问主机的情况下查看主机到 undercloud 的 IP 映射。

先决条件

流程

  1. 运行以下命令以显示每个主机的 IP 地址:

    (undercloud) [stack@host01 ~]$ openstack stack output show overcloud HostsEntry --max-width 80
    
    +--------------+---------------------------------------------------------------+
    | Field        | Value                                                         |
    +--------------+---------------------------------------------------------------+
    | description  | The content that should be appended to your /etc/hosts if you |
    |              | want to get                                                   |
    |              | hostname-based access to the deployed nodes (useful for       |
    |              | testing without                                               |
    |              | setting up a DNS).                                            |
    |              |                                                               |
    | output_key   | HostsEntry                                                    |
    | output_value | 172.17.0.10 overcloud-controller-0.localdomain overcloud-     |
    |              | controller-0                                                  |
    |              | 10.8.145.18 overcloud-controller-0.external.localdomain       |
    |              | overcloud-controller-0.external                               |
    |              | 172.17.0.10 overcloud-controller-0.internalapi.localdomain    |
    |              | overcloud-controller-0.internalapi                            |
    |              | 172.18.0.15 overcloud-controller-0.storage.localdomain        |
    |              | overcloud-controller-0.storage                                |
    |              | 172.21.2.12 overcloud-controller-0.storagemgmt.localdomain    |
    |              | overcloud-controller-0.storagemgmt                            |
    |              | 172.16.0.15 overcloud-controller-0.tenant.localdomain         |
    |              | overcloud-controller-0.tenant                                 |
    |              | 10.8.146.13 overcloud-controller-0.management.localdomain     |
    |              | overcloud-controller-0.management                             |
    |              | 10.8.146.13 overcloud-controller-0.ctlplane.localdomain       |
    |              | overcloud-controller-0.ctlplane                               |
    |              |                                                               |
    |              | 172.17.0.21 overcloud-compute-0.localdomain overcloud-        |
    |              | compute-0                                                     |
    |              | 10.8.146.12 overcloud-compute-0.external.localdomain          |
    |              | overcloud-compute-0.external                                  |
    |              | 172.17.0.21 overcloud-compute-0.internalapi.localdomain       |
    |              | overcloud-compute-0.internalapi                               |
    |              | 172.18.0.20 overcloud-compute-0.storage.localdomain           |
    |              | overcloud-compute-0.storage                                   |
    |              | 10.8.146.12 overcloud-compute-0.storagemgmt.localdomain       |
    |              | overcloud-compute-0.storagemgmt                               |
    |              | 172.16.0.16 overcloud-compute-0.tenant.localdomain overcloud- |
    |              | compute-0.tenant                                              |
    |              | 10.8.146.12 overcloud-compute-0.management.localdomain        |
    |              | overcloud-compute-0.management                                |
    |              | 10.8.146.12 overcloud-compute-0.ctlplane.localdomain          |
    |              | overcloud-compute-0.ctlplane                                  |
    |              |                                                               |
    |              |                                                               |
    |              |                                                               |
    |              |                                                               |
    |              | 10.8.145.16  overcloud.localdomain                            |
    |              | 10.8.146.7  overcloud.ctlplane.localdomain                    |
    |              | 172.17.0.19  overcloud.internalapi.localdomain                |
    |              | 172.18.0.19  overcloud.storage.localdomain                    |
    |              | 172.21.2.16  overcloud.storagemgmt.localdomain                |
    +--------------+---------------------------------------------------------------+
  2. 要过滤特定主机,请运行以下命令:

    (undercloud) [stack@host01 ~]$ openstack stack output show overcloud HostsEntry -c output_value -f value | grep overcloud-controller-0
    
    172.17.0.12 overcloud-controller-0.localdomain overcloud-controller-0
    10.8.145.18 overcloud-controller-0.external.localdomain overcloud-controller-0.external
    172.17.0.12 overcloud-controller-0.internalapi.localdomain overcloud-controller-0.internalapi
    172.18.0.12 overcloud-controller-0.storage.localdomain overcloud-controller-0.storage
    172.21.2.13 overcloud-controller-0.storagemgmt.localdomain overcloud-controller-0.storagemgmt
    172.16.0.19 overcloud-controller-0.tenant.localdomain overcloud-controller-0.tenant
    10.8.146.13 overcloud-controller-0.management.localdomain overcloud-controller-0.management
    10.8.146.13 overcloud-controller-0.ctlplane.localdomain overcloud-controller-0.ctlplane
  3. 要将主机映射到裸机节点,请运行以下命令:

    (undercloud) [stack@host01 ~]$ openstack baremetal node list --fields uuid name instance_info -f json
    [
      {
        "UUID": "c0d2568e-1825-4d34-96ec-f08bbf0ba7ae",
        "Instance Info": {
          "root_gb": "40",
          "display_name": "overcloud-compute-0",
          "image_source": "24a33990-e65a-4235-9620-9243bcff67a2",
          "capabilities": "{\"boot_option\": \"local\"}",
          "memory_mb": "4096",
          "vcpus": "1",
          "local_gb": "557",
          "configdrive": "******",
          "swap_mb": "0",
          "nova_host_id": "host01.lab.local"
        },
        "Name": "host2"
      },
      {
        "UUID": "8c3faec8-bc05-401c-8956-99c40cdea97d",
        "Instance Info": {
          "root_gb": "40",
          "display_name": "overcloud-controller-0",
          "image_source": "24a33990-e65a-4235-9620-9243bcff67a2",
          "capabilities": "{\"boot_option\": \"local\"}",
          "memory_mb": "4096",
          "vcpus": "1",
          "local_gb": "557",
          "configdrive": "******",
          "swap_mb": "0",
          "nova_host_id": "host01.lab.local"
        },
        "Name": "host3"
      }
    ]

5.4. 连接和分离虚拟网络接口

裸机置备服务具有一个 API,可用于管理虚拟网络接口之间的映射。例如,OpenStack 网络服务中的接口和物理接口(NIC)。您可以为每个裸机置备节点配置这些接口,以将虚拟网络接口(VIF)设置为物理网络接口(PIF)映射逻辑。要配置接口,请使用 openstack baremetal node vif* 命令。

先决条件

流程

  1. 列出当前连接到裸机节点的 VIF ID:

    $ openstack baremetal node vif list baremetal-0
    +--------------------------------------+
    | ID                                   |
    +--------------------------------------+
    | 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16 |
    +--------------------------------------+
  2. 附加 VIF 后,裸机置备服务会使用物理端口的实际 MAC 地址更新 OpenStack 网络服务中的虚拟端口。检查此端口地址:

    $ openstack port show 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16 -c mac_address -c fixed_ips
    +-------------+-----------------------------------------------------------------------------+
    | Field       | Value                                                                       |
    +-------------+-----------------------------------------------------------------------------+
    | fixed_ips   | ip_address='192.168.24.9', subnet_id='1d11c677-5946-4733-87c3-23a9e06077aa' |
    | mac_address | 00:2d:28:2f:8d:95                                                           |
    +-------------+-----------------------------------------------------------------------------+
  3. 在创建了 baremetal-0 节点的网络中创建一个新端口:

    $ openstack port create --network baremetal --fixed-ip ip-address=192.168.24.24 baremetal-0-extra
  4. 从实例中删除端口:

    $ openstack server remove port overcloud-baremetal-0 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16
  5. 检查列表中不再存在 IP 地址:

    $ openstack server list
  6. 检查是否有附加到节点的 VIFs:

    $ openstack baremetal node vif list baremetal-0
    $ openstack port list
  7. 添加新创建的端口:

    $ openstack server add port overcloud-baremetal-0 baremetal-0-extra
  8. 验证新 IP 地址是否显示新端口:

    $ openstack server list
    +--------------------------------------+-------------------------+--------+------------------------+------------------------------+---------+
    | ID                                   | Name                    | Status | Networks               | Image                        | Flavor  |
    +--------------------------------------+-------------------------+--------+------------------------+------------------------------+---------+
    | 53095a64-1646-4dd1-bbf3-b51cbcc38789 | overcloud-controller-2  | ACTIVE | ctlplane=192.168.24.7  | overcloud-hardened-uefi-full | control |
    | 3a1bc89c-5d0d-44c7-a569-f2a3b4c73d65 | overcloud-controller-0  | ACTIVE | ctlplane=192.168.24.8  | overcloud-hardened-uefi-full | control |
    | 6b01531a-f55d-40e9-b3a2-6d02be0b915b | overcloud-controller-1  | ACTIVE | ctlplane=192.168.24.16 | overcloud-hardened-uefi-full | control |
    | c61cc52b-cc48-4903-a971-073c60f53091 | overcloud-novacompute-0overcloud-baremetal-0 | ACTIVE | ctlplane=192.168.24.24 | overcloud-hardened-uefi-full | compute |
    +--------------------------------------+-------------------------+--------+------------------------+------------------------------+---------+
  9. 检查 VIF ID 是否为新端口的 UUID:

    $ openstack baremetal node vif list baremetal-0
    +--------------------------------------+
    | ID                                   |
    +--------------------------------------+
    | 6181c089-7e33-4f1c-b8fe-2523ff431ffc |
    +--------------------------------------+
  10. 检查 OpenStack 网络端口 MAC 地址是否已更新,并与裸机置备服务端口之一匹配:

    $ openstack port show 6181c089-7e33-4f1c-b8fe-2523ff431ffc -c mac_address -c fixed_ips
    +-------------+------------------------------------------------------------------------------+
    | Field       | Value                                                                        |
    +-------------+------------------------------------------------------------------------------+
    | fixed_ips   | ip_address='192.168.24.24', subnet_id='1d11c677-5946-4733-87c3-23a9e06077aa' |
    | mac_address | 00:2d:28:2f:8d:95                                                            |
    +-------------+------------------------------------------------------------------------------+
  11. 重新引导裸机节点,以便它识别新的 IP 地址:

    $ openstack server reboot overcloud-baremetal-0

    在分离或附加接口后,裸机操作系统会删除、添加或修改已更改的网络接口。当您替换端口时,DHCP 请求会获取新的 IP 地址,但这可能需要一些时间,因为旧 DHCP 租期仍然有效。要立即启动这些更改,请重启裸机主机。

5.5. 为裸机置备服务配置通知

您可以配置 Bare Metal Provisioning 服务(ironic)来显示服务中发生的不同事件的通知。外部服务可以使用这些通知进行账单目的,监控数据存储和其他目的。要为裸机置备服务启用通知,您必须在 ironic.conf 配置文件中设置以下选项。

先决条件

流程

  • [DEFAULT] 部分中的 notification_level 选项决定发送通知的最低优先级级别。您可以将此选项的值设置为 debuginfowarningerrorcritical。如果将选项设为 warning,则发送带有优先级级别 warning, error, 或 critical 的所有通知,但不发送优先级为 debuginfo 的通知。如果没有设置这个选项,则不会发送通知。每个可用通知的优先级级别记录在下面。
  • [oslo_ messaging_notifications] 部分中的 transport_url 选项决定了发送通知时使用的消息总线。如果没有设置,则使用用于 RPC 的默认传输。

所有通知都会在消息总线中的 ironic_versioned_notifications 主题上发出。通常,遍历消息总线的每种消息与描述消息内容的主题相关联。

5.6. 配置自动电源故障恢复

Bare Metal Provisioning 服务(ironic)有字符串字段 错误,用于记录节点的 power、清理和救援中止故障。

表 5.1. Ironic 节点错误

fault描述

电源故障

由于电源同步失败超过重试次数,节点处于维护模式。

清理失败

由于清理操作失败,节点处于维护模式。

rescue abort 失败

节点处于维护模式,因为救援中止期间清理操作失败。

none

不存在故障。

编排器定期检查此字段的值。如果编排器检测到 电源故障状态,并且可以成功恢复至该节点,则该节点将从维护模式中移除并恢复到操作。

注意

如果 Operator 手动将节点置于维护模式,则编排器不会自动从维护模式中删除该节点。

但是,默认的间隔为 300 秒,您可以使用 hieradata 为 director 配置这个间隔。

先决条件

流程

  • 包含以下 hieradata 来配置自定义恢复间隔:

    ironic::conductor::power_failure_recovery_interval

    要禁用自动电源故障恢复,请将值设为 0。

5.7. 内省 overcloud 节点

执行 overcloud 节点的内省,以标识和存储节点在 director 中的规格。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 overcloudrc 凭证文件:

    $ source ~/overcloudrc
  3. 运行内省命令:

    $ openstack baremetal introspection start [--wait] <NODENAME>

    将 <NODENAME> 替换为您要检查的节点的名称或 UUID。

  4. 检查内省状态:

    $ openstack baremetal introspection status <NODENAME>

    将 <NODENAME> 替换为节点的名称或 UUID。

后续步骤

  • 提取内省数据:

    $ openstack baremetal introspection data save <NODE-UUID>

    将 <NODENAME> 替换为节点的名称或 UUID。

第 6 章 从 cinder 卷引导

您可以在块存储服务(cinder)中创建卷,并将这些卷连接到使用裸机置备服务(ironic)创建的裸机实例。

6.1. 用于裸机节点的 Cinder 卷引导

您可以从存储在 OpenStack Block Storage(cinder)中的块存储设备引导裸机节点。OpenStack Bare Metal(ironic)通过 iSCSI 接口将裸机节点连接到卷。

Ironic 在 overcloud 部署期间启用此功能。但是,在部署 overcloud 前请考虑以下条件:

  • overcloud 需要启用 cinder iSCSI 后端。在部署 overcloud 期间,将 CinderEnableIscsiBackend heat 参数设置为 true
  • 您不能将 cinder 卷引导功能与 Red Hat Ceph Storage 后端一起使用。
  • 您必须在引导磁盘上设置 rd.iscsi.firmware=1 内核参数。

6.2. 为 cinder 卷引导配置节点

您必须为每个裸机节点配置特定的选项,才能成功从 cinder 卷引导。

流程

  1. 提供 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. iscsi_boot 功能设置为 true,将所选节点的 storage-interface 设置为 cinder

    $ openstack baremetal node set --property capabilities=iscsi_boot:true --storage-interface cinder <NODEID>

    <NODEID > 替换为所选节点的 ID。

  3. 为节点创建 iSCSI 连接器:

    $ openstack baremetal volume connector create --node <NODEID> --type iqn --connector-id iqn.2010-10.org.openstack.node<NUM>

    每个节点的连接器 ID 必须是唯一的。在本例中,连接器为 iqn.2010-10.org.openstack.node<NUM&gt;,其中 <NUM > 是每个节点的递增数字。

6.3. 在引导磁盘中配置 iSCSI 内核参数

您必须在镜像中在内核中启用 iSCSI 引导。要实现这一目的,请挂载 QCOW2 镜像并在镜像中启用 iSCSI 组件。

先决条件

  1. 下载 Red Hat Enterprise Linux QCOW2 镜像,并将其复制到 undercloud 上的 /home/stack/ 目录中。您可以从以下页面以 QCOW2 格式下载 Red Hat Enterprise Linux KVM 镜像:

流程

  1. stack 用户的身份登录 undercloud。
  2. 挂载 QCOW2 镜像,并以 root 用户身份访问它:

    1. 加载 nbd 内核模块:

      $ sudo modprobe nbd
    2. /dev/nbd0 身份连接 QCOW 镜像:

      $ sudo qemu-nbd --connect=/dev/nbd0 <IMAGE>
    3. 检查 NBD 中的分区:

      $ sudo fdisk /dev/nbd0 -l

      新的 Red Hat Enterprise Linux QCOW2 镜像只包含一个分区,它通常命名为 NBD 上的 /dev/nbd0p1

    4. 为镜像创建一个挂载点:

      mkdir /tmp/mountpoint
    5. 挂载镜像:

      sudo mount /dev/nbd0p1 /tmp/mountpoint/
    6. 挂载您的 dev 目录,以便镜像能够访问主机上的设备信息:

      sudo mount -o bind /dev /tmp/mountpoint/dev
    7. 将根目录改为挂载点:

      sudo chroot /tmp/mountpoint /bin/bash
  3. 在镜像中配置 iSCSI:

    注意

    此步骤中的一些命令可能会报告以下错误:

    lscpu: cannot open /proc/cpuinfo: No such file or directory

    此错误并不重要,您可以忽略错误。

    1. resolv.conf 文件移动到临时位置:

      # mv /etc/resolv.conf /etc/resolv.conf.bak
    2. 创建一个临时 resolv.conf 文件,以解决 Red Hat Content Delivery Network 的 DNS 请求。这个示例在名称服务器中使用 8.8.8.8

      # echo "nameserver 8.8.8.8" > /etc/resolv.conf
    3. 将挂载的镜像注册到 Red Hat Content Delivery Network 中:

      # subscription-manager register

      当命令提示您输入时,输入您的用户名和密码。

    4. 附加包含 Red Hat Enterprise Linux 的订阅:

      # subscription-manager list --all --available
      # subscription-manager attach --pool <POOLID>

      将 & lt;POOLID > 替换为订阅的池 ID。

    5. 禁用默认软件仓库:

      # subscription-manager repos --disable "*"
    6. 启用 Red Hat Enterprise Linux 软件仓库:

      • Red Hat Enterprise Linux 7:

        # subscription-manager repos --enable "rhel-7-server-rpms"
      • Red Hat Enterprise Linux 8:

        # subscription-manager repos --enable "rhel-8-for-x86_64-baseos-eus-rpms"
    7. 安装 iscsi-initiator-utils 软件包:

      # yum install -y iscsi-initiator-utils
    8. 取消注册挂载的镜像:

      # subscription-manager unregister
    9. 恢复原始 resolv.conf 文件:

      # mv /etc/resolv.conf.bak /etc/resolv.conf
    10. 检查挂载镜像的内核版本:

      # rpm -qa kernel

      例如,如果输出为 kernel-3.10.0-1062.el7.x86_64,则内核版本为 3.10.0-1062.el7.x86_64。请记录此内核版本来执行后续步骤。

      注意

      新的 Red Hat Enterprise Linux QCOW2 镜像只安装一个内核版本。如果安装了多个内核版本,请使用最新的版本。

    11. 在 initramfs 镜像中添加 网络和 iscsi dracut 模块:

      # dracut --force --add "network iscsi" /boot/initramfs-<KERNELVERSION>.img <KERNELVERSION>

      <KERNELVERSION > 替换为您从 rpm -qa 内核获得的版本号。以下示例将 3.10.0-1062.el7.x86_64 用作内核版本:

      # dracut --force --add "network iscsi" /boot/initramfs-3.10.0-1062.el7.x86_64.img 3.10.0-1062.el7.x86_64
    12. 从挂载的镜像退出回主机操作系统:

      # exit
  4. 卸载镜像:

    1. 从临时挂载点卸载 dev 目录:

      $ sudo umount /tmp/mountpoint/dev
    2. 从挂载点卸载镜像:

      $ sudo umount /tmp/mountpoint
    3. /dev/nbd0/ 断开 QCOW2 镜像:

      $ sudo qemu-nbd --disconnect /dev/nbd0
  5. 在镜像中重建 grub 菜单配置:

    1. 安装 libguestfs-tools 软件包:

      $ sudo yum -y install libguestfs-tools
      重要

      如果在 undercloud 上安装 libguestfs-tools 软件包,请禁用 iscsid.socket,以避免与 undercloud 上的 tripleo_iscsid 服务冲突:

      $ sudo systemctl disable --now iscsid.socket
    2. libguestfs 后端设置为直接使用 QEMU:

      $ export LIBGUESTFS_BACKEND=direct
    3. 更新镜像的 grub 配置:

      $ guestfish -a /tmp/images/{{ dib_image }} -m /dev/sda3 sh "mount /dev/sda2 /boot/efi && rm /boot/grub2/grubenv && /sbin/grub2-mkconfig -o /boot/grub2/grub.cfg && cp /boot/grub2/grub.cfg /boot/efi/EFI/redhat/grub.cfg && grubby --update-kernel=ALL --args=\"rd.iscsi.firmware=1\" && cp /boot/grub2/grubenv /boot/efi/EFI/redhat/grubenv && echo Success"

6.4. 在 cinder 中创建并使用引导卷

您必须将支持 iSCSI 的镜像上传到 OpenStack Image Storage(glance),并在 OpenStack Block Storage(cinder)中创建引导卷。

流程

  1. stack 用户的身份登录 undercloud。
  2. 将启用了 iSCSI 的镜像上传到 glance:

    $ openstack image create --disk-format qcow2 --container-format bare --file rhel-server-7.7-x86_64-kvm.qcow2 rhel-server-7.7-iscsi
  3. 从镜像创建卷:

    $ openstack volume create --size 10 --image rhel-server-7.7-iscsi --bootable rhel-test-volume
  4. 创建在 cinder 中使用引导卷的裸机实例:

    $ openstack server create --flavor baremetal --volume rhel-test-volume --key default rhel-test

第 7 章 对裸机置备服务进行故障排除

诊断包括裸机置备服务(ironic)的环境中的问题。

7.1. PXE 引导错误

使用以下故障排除步骤来评估和修复您在 PXE 引导时可能会遇到的问题。

Permission Denied 错误

如果裸机节点的控制台返回 Permission Denied 错误,请确保将适当的 SELinux 上下文应用于 /httpboot/tftpboot 目录:

# semanage fcontext -a -t httpd_sys_content_t "/httpboot(/.*)?"
# restorecon -r -v /httpboot
# semanage fcontext -a -t tftpdir_t "/tftpboot(/.*)?"
# restorecon -r -v /tftpboot

/pxelinux.cfg/XX-XX-XX-XX-XX-XX-XX-XX-XX-XX 中启动进程冻结

在节点的控制台上,如果它看起来像收到 IP 地址,但进程停止,您可能会在 ironic.conf 文件中使用错误的 PXE 引导镜像。

PXE Process Freezes During Boot

$ grep ^pxe_config_template ironic.conf
pxe_config_template=$pybasedir/drivers/modules/ipxe_config.template

默认模板是 pxe_config.template,因此可以轻松省略 i,并且意外地输入 ipxe_config.template

7.2. 裸机节点引导后的登录错误

当使用配置期间设置的 root 密码时,无法登录到节点,这代表您没有引导到部署的镜像。您可能已登录到 deploy-kernel/deploy-ramdisk 镜像,系统尚未加载正确的镜像。

要解决这个问题,请验证 Compute 或 Bare Metal Provisioning 服务节点上的 /httpboot/pxelinux.cfg/MAC_ADDRESS 中的 PXE 引导配置文件,并确保此文件中列出的所有 IP 地址对应于 Bare Metal 网络上的 IP 地址。

注意

裸机置备服务节点唯一使用的网络是 Bare Metal 网络。如果一个端点不在网络中,端点无法作为引导过程的一部分访问裸机置备服务节点。

例如,文件中的内核行如下:

kernel http://192.168.200.2:8088/5a6cdbe3-2c90-4a90-b3c6-85b449b30512/deploy_kernel selinux=0 disk=cciss/c0d0,sda,hda,vda iscsi_target_iqn=iqn.2008-10.org.openstack:5a6cdbe3-2c90-4a90-b3c6-85b449b30512 deployment_id=5a6cdbe3-2c90-4a90-b3c6-85b449b30512 deployment_key=VWDYDVVEFCQJNOSTO9R67HKUXUGP77CK ironic_api_url=http://192.168.200.2:6385 troubleshoot=0 text nofb nomodeset vga=normal boot_option=netboot ip=${ip}:${next-server}:${gateway}:${netmask} BOOTIF=${mac}  ipa-api-url=http://192.168.200.2:6385 ipa-driver-name=ipmi boot_mode=bios initrd=deploy_ramdisk coreos.configdrive=0 || goto deploy
上面示例 内核行 中的值对应信息

http://192.168.200.2:8088

/etc/ironic/ironic.conf 文件中的参数 http_url。这个 IP 地址必须位于 Bare Metal 网络中。

5a6cdbe3-2c90-4a90-b3c6-85b449b30512

ironic node-list 中 baremetal 节点的 UUID。

deploy_kernel

这是复制为 /httpboot/<NODE_UUID>/deploy_kernel 的镜像服务中的部署 内核镜像。

http://192.168.200.2:6385

/etc/ironic/ironic.conf 文件中的参数 api_url。这个 IP 地址必须位于 Bare Metal 网络中。

ipmi

此节点的裸机置备服务使用中的 IPMI 驱动程序。

deploy_ramdisk

这是在镜像服务中复制为 /httpboot/<NODE_UUID>/deploy_ramdisk 的镜像服务中的部署 ramdisk 镜像。

如果值没有对应 /httpboot/pxelinux.cfg/MAC_ADDRESSironic.conf 文件:

  1. 更新 ironic.conf 文件中的值
  2. 重启裸机置备服务
  3. 重新部署 Bare Metal 实例

7.3. 部署节点上的引导到磁盘错误

在某些硬件中,您可能会遇到部署节点在作为部署连续引导操作期间无法从磁盘引导的问题。这通常是因为 BMC 不会遵循节点上 director 请求的持久性引导设置。相反,节点会从 PXE 目标引导。

在这种情况下,您必须在节点的 BIOS 中更新引导顺序。将 HDD 设置为第一个引导设备,然后 PXE 作为后续选项,以便节点默认从磁盘引导,但可以根据需要从网络启动。

注意

这个错误主要适用于使用 LegacyBIOS 固件的节点。

7.4. 裸机置备服务没有收到正确的主机名

如果裸机置备服务没有接收正确的主机名,这意味着 cloud-init 失败。要修复此问题,请将 Bare Metal 子网连接到 OpenStack 网络服务中的路由器。此配置将请求路由到 meta-data 代理。

7.5. 执行裸机置备服务命令时无效的 OpenStack Identity service 凭证

如果您无法向 Identity 服务进行身份验证,请检查 ironic.conf 文件中的 identity_uri 参数,并确保从 keystone AdminURL 中删除 /v2.0。例如,将 identity_uri 设置为 http://IP:PORT

7.6. 硬件执行

节点注册详情不正确可能会导致注册的硬件出现问题。确保您正确输入属性名称和值。当您输入属性名称不正确时,系统会在节点详情中添加属性,但忽略它们。

使用 openstack baremetal node set 命令更新节点详情。例如,将节点注册的内存量更新为 2 GB:

$ openstack baremetal node set --property memory_mb=2048 NODE_UUID

7.7. iDRAC 问题故障排除

Redfish 管理界面无法设置引导设备

当您将 idrac-redfish 管理界面与某些 iDRAC 固件版本一起使用时,并尝试在带有 UEFI 引导的裸机服务器上设置引导设备,iDRAC 会返回以下错误:

Unable to Process the request because the value entered for the
parameter Continuous is not supported by the implementation.

如果您遇到这个问题,将节点上的 driver-info 中的 force_persistent_boot_device 参数设置为 Never

openstack baremetal node set --driver-info force_persistent_boot_device=Never ${node_uuid}
关闭电源时的超时

有些服务器在关闭和超时时可能太慢。默认重试数为 6,这会产生 30 秒超时。要将超时持续时间增加到 90 秒,请在 undercloud hieradata 覆盖文件中将 ironic::agent::rpc_response_timeout 值设置为 18,并重新运行 openstack undercloud install 命令:

ironic::agent::rpc_response_timeout: 18
供应商透传超时

当 iDRAC 无法执行厂商透传命令时,这些命令需要太长且超时:

openstack baremetal node passthru call --http-method GET \
aed58dca-1b25-409a-a32f-3a817d59e1e0 list_unfinished_jobs
Timed out waiting for a reply to message ID 547ce7995342418c99ef1ea4a0054572 (HTTP 500)

要增加消息传递的超时持续时间,请增加 undercloud hieradata 覆盖文件中的 ironic::default::rpc_response_timeout 参数的值,并重新运行 openstack undercloud install 命令:

ironic::default::rpc_response_timeout: 600

7.8. 配置服务器控制台

overcloud 节点的控制台输出并不总是发送到服务器控制台。如果要在服务器控制台中查看这个输出,则必须将 overcloud 配置为使用您的硬件的正确控制台。使用以下方法之一执行此配置:

  • 修改每个 overcloud 角色的 KernelArgs heat 参数。
  • 自定义 director 用于置备 overcloud 节点的 overcloud-hardened-uefi-full.qcow2 镜像。

先决条件

  • 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 指南。
  • overcloud 节点已准备好进行部署。

在部署过程中使用 heat 修改 KernelArgs

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc 凭证文件:

    $ source stackrc
  3. 创建包含以下内容的环境文件 overcloud-console.yaml

    parameter_defaults:
      <role>Parameters:
        KernelArgs: "console=<console-name>"

    <role > 替换为您要配置的 overcloud 角色的名称,并将 <console-name > 替换为您要使用的控制台的 ID。例如,使用以下代码片段将默认角色中的所有 overcloud 节点配置为使用 tty0

    parameter_defaults:
      ControllerParameters:
        KernelArgs: "console=tty0"
      ComputeParameters:
        KernelArgs: "console=tty0"
      BlockStorageParameters:
        KernelArgs: "console=tty0"
      ObjectStorageParameters:
        KernelArgs: "console=tty0"
      CephStorageParameters:
        KernelArgs: "console=tty0"
  4. 使用 -e 选项,将 overcloud-console-tty0.yaml 文件包含在部署命令中。

修改 overcloud-hardened-uefi-full.qcow2 镜像

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc 凭证文件:

    $ source stackrc
  3. 修改 overcloud-hardened-uefi-full.qcow2 镜像的内核参数,为您的硬件设置正确的控制台。例如,将控制台设置为 tty1

    $ virt-customize --selinux-relabel -a overcloud-hardened-uefi-full.qcow2 --run-command 'grubby --update-kernel=ALL --args="console=tty1"'
  4. 将镜像导入 director:

    $ openstack overcloud image upload --image-path overcloud-hardened-uefi-full.qcow2
  5. 部署 overcloud。

验证

  1. 从 undercloud 登录 overcloud 节点:

    $ ssh tripleo-admin@<IP-address>

    <IP-address > 替换为 overcloud 节点的 IP 地址。

  2. 检查 /proc/cmdline 文件的内容,并确保将 console= 参数设置为您要使用的控制台值:

    [tripleo-admin@controller-0 ~]$ cat /proc/cmdline
    BOOT_IMAGE=(hd0,msdos2)/boot/vmlinuz-4.18.0-193.29.1.el8_2.x86_64 root=UUID=0ec3dea5-f293-4729-b676-5d38a611ce81 ro console=tty0 console=ttyS0,115200n81 no_timer_check crashkernel=auto rhgb quiet

第 8 章 裸机驱动程序

您可以将裸机节点配置为使用在裸机置备服务中启用的其中一个驱动程序。每个驱动程序都包括一个置备方法和电源管理类型。有些驱动程序需要额外的配置。本节中描述的每个驱动程序使用 PXE 进行置备 ; 驱动程序由电源管理类型列出。

您可以通过在 ironic.yaml 文件中配置 IronicEnabledHardwareTypes 参数来添加驱动程序。默认情况下启用 ipmiredfish

有关支持的插件和驱动程序的完整列表,请参阅 Red Hat OpenStack Platform 中的组件、插件和驱动程序支持

8.1. 智能平台管理接口 (IPMI)

IPMI 是一个提供带外远程管理功能的接口,包括电源管理和服务器监控。要使用这种电源管理类型,所有裸机置备服务节点都需要连接到共享 Bare Metal 网络的 IPMI。启用 ipmi 驱动程序,并在节点的 driver_info 中设置以下信息:

  • ipmi_address - IPMI NIC 的 IP 地址。
  • ipmi_username - IPMI 用户名。
  • ipmi_password - IPMI 密码。

8.2. Redfish

由分布式管理任务组 (DMTF) 开发的,IT 基础架构的标准 RESTful API

  • redfish_username - Redfish 用户名。
  • redfish_password - Redfish 密码。
  • redfish_address - Redfish 控制器的 IP 地址。
  • redfish_system_id - 系统资源的规范路径。此路径必须包括 root 服务、版本以及系统的路径/唯一 ID。例如:/redfish/v1/Systems/CX34R87.
  • redfish_verify_ca - Either a Boolean value、到 CA_BUNDLE 文件的路径或带有可信 CA 证书的目录。如果将此值设置为 True,则驱动程序会验证主机证书。如果将此值设置为 False,则驱动程序忽略验证 SSL 证书。如果将此值设置为路径,则驱动程序将使用指定证书或目录中的其中一个证书。默认值为 True

8.3. Dell Remote Access Controller (DRAC)

DRAC 是一个提供远程电源功能的接口,包括电源管理和服务器监控。要使用这种电源管理类型,所有裸机置备服务节点都需要连接到共享 Bare Metal 网络的 DRAC。启用 idrac 驱动程序,并在节点的 driver_info 中设置以下信息:

  • drac_address - DRAC NIC 的 IP 地址。
  • drac_username - DRAC 用户名。
  • drac_password - DRAC 密码。

8.4. 集成远程管理控制器(iRMC)

Fujitsu 的 iRMC 是一个提供带外远程管理功能的接口,包括电源管理和服务器监控。要在裸机置备服务节点上使用此电源管理类型,节点需要一个连接到共享 Bare Metal 网络的 iRMC 接口。启用 irmc 驱动程序,并在节点的 driver_info 中设置以下信息:

  • irmc_address - iRMC 接口 NIC 的 IP 地址。
  • irmc_username - iRMC 用户名。
  • irmc_password - iRMC 密码。

要使用 IPMI 设置引导模式或 SCCI 获取传感器数据,您必须完成以下步骤:

  1. ironic.conf 文件中启用传感器方法:

    $ openstack-config --set /etc/ironic/ironic.conf \
       irmc sensor_method METHOD

    METHOD 替换为 scciipmitool

  2. 如果启用了 SCCI,请安装 python-scciclient 软件包:

    # dnf install python-scciclient
  3. 重启裸机编排器服务:

    # systemctl restart openstack-ironic-conductor.service
注意

要使用 iRMC 驱动程序,需要 iRMC S4 或更高版本。

8.5. Integrated Lights-Out (iLO)

iLO 是惠普提供的一个远程电源功能的接口,这些功能包括电源管理和服务器监控。要使用这种电源管理类型,所有裸机节点需要一个连接到共享 Bare Metal 网络的 iLO 接口。启用 ilo 驱动程序,并在节点的 driver_info 中设置以下信息:

  • ilo_address - iLO 接口 NIC 的 IP 地址。
  • ilo_username - iLO 用户名。
  • ilo_password - iLO 密码。

您还必须安装 python-proliantutils 软件包并重启 Bare Metal conductor 服务:

# dnf install python-proliantutils
# systemctl restart openstack-ironic-conductor.service

8.6. 转换为下一代电源管理驱动程序

Red Hat OpenStack Platform 现在使用下一代驱动程序(也称为 硬件类型 )替换旧的驱动程序。

下表显示了与传统驱动程序和下一代硬件类型等同的比较:

旧驱动程序新硬件类型

pxe_ipmitool

ipmi

pxe_drac

idrac

pxe_ilo

ilo

pxe_irmc

irmc

fake_pxe

fake-hardware

在 Red Hat OpenStack Platform(RHOSP)15 中,这些较旧的驱动程序已被删除,且不再可以访问。在升级到 RHOSP 15 之前,您必须更改为新硬件类型。

流程

  1. 检查启用的硬件类型的当前列表:

    $ source ~/overcloud
    $ openstack baremetal driver list --type dynamic
  2. 如果您使用没有启用的硬件类型驱动程序,请在环境文件中使用 IronicEnabledHardwareTypes 参数来启用驱动程序:

    parameter_defaults:
      IronicEnabledHardwareTypes: ipmi,redfish,idrac
  3. 保存文件并运行 overcloud 部署命令:

    $ openstack overcloud deploy -e [ENVIRONMENT_FILE] -r [ROLES_DATA] -n [NETWORK_DATA]

    确保包含与 overcloud 相关的所有环境和数据文件。

  4. 运行以下命令。替换 OLDDRIVERNEWDRIVER 变量,用于电源管理类型:

    $ source ~/overcloud
    $ OLDDRIVER="pxe_ipmitool"
    $ NEWDRIVER="ipmi"
    $ for NODE in $(openstack baremetal node list --driver $OLDDRIVER -c UUID -f value) ; do openstack baremetal node set $NODE --driver $NEWDRIVER; done