裸机置备


Red Hat OpenStack Platform 8

安装、配置和使用裸机置备(Ironic)

OpenStack Documentation Team

摘要

本指南提供在 Red Hat OpenStack Platform 环境的 Overcloud 中安装、配置和使用裸机置备的步骤。

前言

本文档提供有关在 overcloud 中安装和配置裸机置备(ironic)作为 OpenStack 服务的说明,以及使用服务为最终用户提供和管理物理计算机。配置此服务后,用户可以像启动虚拟机实例一样在物理机上启动实例。

Red Hat OpenStack Platform director 也使用裸机置备组件,作为 undercloud 的一部分,以置备和管理组成 OpenStack 环境(overcloud)的裸机节点。如需有关 director 如何使用裸机置备的信息,请参阅 Director 安装和使用

注意

本文档论述了如何在已部署的 overcloud 上手动安装裸机置备。这个手动步骤与将裸机置备集成到以后的 Red Hat OpenStack Platform director 版本的不同。尝试升级带有此过程的 overcloud 不受支持,并且结果未定义。本文档应被视为一个指南,以预览将什么集成到 Red Hat OpenStack Platform director 中的后续版本中。

OpenStack Bare Metal Provisioning (ironic)提供了为最终用户调配和管理物理(裸机)机器所需的组件。overcloud 中的裸机置备与以下 OpenStack 服务交互:

  • OpenStack Compute (nova)为虚拟机实例管理提供调度、租户配额、IP 分配和面向用户的 API,而裸机调配则为硬件管理提供管理 API。选择单个专用 openstack-nova-compute 主机以使用裸机置备驱动程序并处理裸机置备请求。
  • OpenStack Identity (keystone)提供请求身份验证,并帮助裸机置备来查找其他 OpenStack 服务。
  • OpenStack Image 服务(glance)管理用于引导裸机的镜像和镜像元数据。
  • OpenStack Networking (neutron)为所需的裸机置备网络提供 DHCP 和网络配置。

裸机调配使用 PXE 调配物理计算机。下图显示了用户在启动新的裸机虚拟机时,OpenStack 服务在置备过程中如何交互。

The PXE Provisioning Process

1.1. 要求

本章概述了设置裸机置备的要求,包括安装假设、硬件要求和网络要求。

1.1.1. 裸机置备安装声明

裸机置备是可配置为在同一节点上或独立节点上运行的组件集合。本指南中的配置示例在单个节点上安装并配置所有裸机置备组件。本指南假定 OpenStack Identity、OpenStack 镜像、OpenStack Compute 和 OpenStack 网络的服务已经安装并配置。裸机置备还需要以下外部服务,该服务必须安装并配置为先决条件:

  • 用于存储硬件信息和状态的数据库服务器。本指南假定为 Red Hat OpenStack Platform 环境配置了 MariaDB 数据库服务。
  • 消息传递服务.本指南假定为环境配置了 RabbitMQ。

如果您使用 director 部署 OpenStack 环境,则数据库和消息传递服务将安装到 overcloud 的控制器节点上。

Red Hat OpenStack Platform 需要运行 Red Hat Enterprise Linux 7 的 Compute 节点上的 iptables 而不是 firewalld。本文档中的防火墙规则使用 iptables 设置。

注意

硬件内省(ironic-inspector)使用 iptables 将 ironic 节点的 MAC 地址列入黑名单。如果另一个进程在 ironic-inspector 尝试进行修改时锁定了 iptablesironic-inspector 使用 iptables-w 标志,其中支持 iptables -w 标志(版本 1.4.21 或更高版本)。

1.1.2. 裸机置备硬件要求

运行所有裸机置备组件的节点需要以下硬件:

  • 支持 Intel 64 或 AMD64 CPU 扩展的 64 位 x86 处理器。
  • 至少 6 GB RAM。
  • 最少具有 40GB 可用磁盘空间。
  • 至少两个 1 Gbps 网络接口卡。但是,对于裸机置备网络流量,建议使用 10 Gbps 接口,特别是在置备大量裸机时。
  • Red Hat Enterprise Linux 7.2 (或更新版本)作为主机操作系统安装。

或者,在专用的 openstack-nova-compute 节点上安装和配置裸机置备组件;请参阅 Director 安装和使用指南中的 计算节点要求。https://access.redhat.com/documentation/en/red-hat-openstack-platform/8/single/director-installation-and-usage/#sect-Compute_Node_Requirements

1.1.3. 裸机置备网络要求

裸机置备至少需要两个网络:

  • provisioning 网络:这是一个专用网络,裸机置备用于置备和管理裸机。裸机置备网络提供 DHCP 和 PXE 引导功能,以帮助发现裸机系统。理想情况下,这个网络应该在中继接口上使用原生 VLAN,以便裸机置备提供 PXE 引导和 DHCP 请求。这也是用于通过要置备的裸机中带外驱动程序来控制电源管理的网络。
  • 外部网络:用于远程连接的单独的网络。连接到此网络的接口需要可路由的 IP 地址,可以是静态定义的,或者通过外部 DHCP 服务动态定义。

1.1.4. 裸机机器要求

置备的裸机需要以下内容:

  • 两个 NIC:一个用于裸机置备网络,另一个用于外部连接。
  • 连接到裸机置备网络的电源管理接口(如 IPMI)。如果您使用 SSH 用于测试目的,则不需要这样做。
  • 在系统引导顺序顶部的裸机置备网络上 PXE 引导,在硬盘和 CD/DVD 驱动器前面。在系统的所有其他 NIC 中禁用 PXE 引导。

将置备的裸机的其他要求因您要安装的操作系统而异。对于 Red Hat Enterprise Linux 7,请参阅 Red Hat Enterprise Linux 7 安装指南。对于 Red Hat Enterprise Linux 6,请参阅 Red Hat Enterprise Linux 6 安装指南

1.2. 为裸机置备服务配置 OpenStack

每个 OpenStack 服务都有一个用户名和密码,用于与身份服务进行身份验证。每个服务也需要通过 OpenStack Identity 服务定义,并且具有与之关联的端点 URL,以进行内部、管理和公共连接。

从 director 节点配置裸机置备服务:

  1. 获取 overcloudrc 文件:

    # source ~stack/overcloudrc
    Copy to Clipboard Toggle word wrap
  2. 创建 OpenStack Bare Metal Provisioning 用户:

    # openstack user create --password IRONIC_PASSWORD --enable IRONIC_USER
    # openstack role add --project service --user IRONIC_USER admin
    Copy to Clipboard Toggle word wrap

    在这里,IRONIC_USER 是裸机置备服务的用户,IRONIC_PASSWORD 是密码。

  3. 创建 OpenStack Bare Metal Provisioning 服务:

    # openstack service create --name ironic --description "Ironic bare metal provisioning service" baremetal
    Copy to Clipboard Toggle word wrap
  4. 验证其他 OpenStack 服务是否正在使用的虚拟 IP (VIP)地址:

    # openstack endpoint list -c "Service Name" -c "PublicURL" --long
    Copy to Clipboard Toggle word wrap

    此命令的输出列出了服务及其 公共 URL,它们通常都位于同一服务器上,并且使用相同的 IP 地址。

  5. 获取您要在其中安装裸机置备服务的 Compute 节点的内部 API 网络地址:

    # route -n
    Copy to Clipboard Toggle word wrap

    此命令的输出列出了 IP 路由表,其中包含 IP 地址和每个 IP 地址的接口。

    然后,使用内部 API 网络地址创建服务端点。

  6. 您可以检查用于 Internal 和 Admin URL 的 NIC 关联的 IP 地址,如下所示:

    # ifconfig INTERFACE
    Copy to Clipboard Toggle word wrap
  7. 创建服务端点:

    # openstack endpoint create --publicurl http://VIP:6385 --internalurl http://COMPUTE_INTERNAL_API_IP:6385 --adminurl http://COMPUTE_INTERNAL_API_IP:6385 --region regionOne SERVICE_ID
    Copy to Clipboard Toggle word wrap

    在这里,VIP 是 HAProxy 中配置的虚拟 IP 地址,COMPUTE_INTERNAL_API_IP 是运行连接到内部 API 网络的裸机置备服务的 Compute 节点的 IP 地址,SERVICE_ID 是使用 service create 命令创建的 Bare Metal Provisioning 服务的 ID。

接下来,您必须配置 HAProxy,以确保收到您在上一步中创建的端点的公共 URL 的请求。要配置 HAProxy 值,请确保您以 root 用户身份登录控制器节点上的 root。

  1. 编辑 /etc/haproxy/haproxy.cfg 文件,并在文件末尾添加以下行:

    listen ironic
    
      bind VIP:6385 transparent
      server SERVER_NAME COMPUTE_INTERNAL_API_IP:6385 check fall 5 inter 2000 rise 2
    Copy to Clipboard Toggle word wrap

    在本例中:

    • VIP 是虚拟 IP 地址。
    • SERVER_NAME 是安装并运行裸机置备服务的 Compute 服务器的 HAProxy 识别名称。
    • COMPUTE_INTERNAL_API_IP 是安装并运行裸机置备服务的 Compute 服务器的内部 API IP 地址。
    • 透明地 允许 HAProxy 绑定 IP 地址,即使它存在于 Controller 节点上,以便在集群环境中,虚拟 IP 地址可以在控制器之间移动。
    • 检查 2000 间的 5 个增加 2 指的是后端服务器上的以下健康检查:

      • 回退 5 - 服务器在连续 5 个连续失败的健康检查后被视为不可用。
      • 2000 年间,健康检查之间的间隔为 2000 毫秒或 2 秒。
      • 增长 2 - 服务器在连续 2 个成功健康检查后被视为可用。
  2. 重启 HAProxy 以确保更改生效:

    # systemctl restart haproxy.service
    Copy to Clipboard Toggle word wrap

    您可以获取以下消息,说明后端服务器不可用: haproxy[4249]: proxy ironic 没有 server available!。现在,可以忽略此消息,因为您尚未安装或配置了服务。

1.3. 为裸机置备服务配置 Controller 节点

需要将以下步骤以 root 用户身份在 Red Hat OpenStack Platform 部署中的所有控制器节点上执行,但 Create the Bare Metal Provisioning Database 部分除外。您必须在一个控制器上执行该流程,因为它们共享数据库。

在 Controller 节点上,您需要确保裸机置备网络连接到 Open vSwitch,以便 OpenStack 部署可以访问它。

  1. 将网桥添加到 Open vSwitch 中:

    # ovs-vsctl add-br br-ironic
    # ovs-vsctl add-port br-ironic IRONIC_PROVISIONING_NIC
    # ovs-vsctl show
    Copy to Clipboard Toggle word wrap

    此处 br-ironic 是网桥的名称,IRONIC_PROVISIONING_NIC 是连接到裸机置备网络的 NIC。

    使用 ovs-vsctl show 命令,您可以看到创建了一个具有关联端口的新网桥,但您会注意到 br-int 集成网桥缺少对新网桥的补丁。

  2. 要获取添加到集成网桥中的新网桥,您需要更新以下插件文件:

    1. 更新 ML2 配置文件 /etc/neutron/plugins/ml2/ml2_conf.ini,如下所示:

      • 对于 type_drivers 参数,请确保在驱动程序中列出了 flat,例如 type_drivers = vxlan,vlan,flat,gre。这是以逗号分隔的列表。
      • 对于 mechanism_drivers 参数,请确保 openvswitch 选项列在驱动程序中,例如 mechanism_drivers =openvswitch。这是以逗号分隔的列表。
      • 对于 flat_networks 参数,创建一个名称来引用裸机置备网络,如 ironicnet。确保此名称列在列出的 flat_networks 中,如 flat_networks =datacentre,ironicnet。这是以逗号分隔的列表。
      • 如果您将 VLAN 用于裸机置备网络,请添加 network_vlan_ranges 参数,其格式为: ironicnet:VLAN_START:VLAN_END,如 network_vlan_ranges =datacentre:1:1000。这是以逗号分隔的列表。
      • enable_security_group 参数应该已经启用。但是,如果没有设置,请将值更改为 True,例如 enable_security_group = True
    2. /etc/neutron/plugins/ml2/openvswitch_agent.ini 文件中,找到 bridge_mappings 参数并更新如下:

      bridge_mappings =datacentre:br-ex,ironicnet:br-ironic
      Copy to Clipboard Toggle word wrap

      此逗号分隔的键值对的值将裸机置备网络的名称映射到连接到网络的物理设备。

  3. 重启 neutron-openvswitch-agent.service,以查看 br-ironic 网桥作为集成网桥的一部分:

    # systemctl restart neutron-openvswitch-agent.service
    Copy to Clipboard Toggle word wrap
  4. 重启 neutron-server.service,以便它检测到新连接:

    # systemctl restart neutron-server.service
    Copy to Clipboard Toggle word wrap
    注意

    如果不执行此步骤,尝试在 OpenStack Networking 服务中创建裸机置备网络会失败,并显示请求的扁平网络不存在的消息。

1.3.1. 创建裸机置备数据库

创建裸机置备使用的数据库和数据库用户。此流程中的所有步骤都必须在数据库服务器上执行,同时以 root 用户身份登录。

创建裸机置备数据库

  1. 连接到数据库服务:

    # mysql -u root
    Copy to Clipboard Toggle word wrap
  2. 创建 ironic 数据库:

    mysql> CREATE DATABASE ironic CHARACTER SET utf8;
    Copy to Clipboard Toggle word wrap
  3. 创建 ironic 数据库用户,并授予用户 ironic 数据库的访问权限:

    mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' IDENTIFIED BY 'PASSWORD';
    mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' IDENTIFIED BY 'PASSWORD';
    Copy to Clipboard Toggle word wrap

    PASSWORD 替换为将使用此用户身份与数据库服务器进行身份验证的安全密码。

  4. 清除数据库权限以确保它们立即生效:

    mysql> FLUSH PRIVILEGES;
    Copy to Clipboard Toggle word wrap
  5. 退出 mysql 客户端:

    mysql> quit
    Copy to Clipboard Toggle word wrap

1.3.2. 为裸机置备配置 OpenStack Compute 服务

为裸机置备驱动程序配置 Compute 服务。使用这个驱动程序可让 Compute 使用置备虚拟机的相同 API 置备物理机器。每个 openstack-nova-compute 节点只能指定一个驱动程序;具有裸机置备驱动程序的节点只能置备物理计算机。建议您分配一个 openstack-nova-compute 节点,以使用裸机置备驱动程序置备所有裸机节点。以下流程中的所有步骤都必须在所选计算节点上执行,同时以 root 用户身份登录。

为裸机置备配置 OpenStack Compute

  1. 将 Compute 设置为使用裸机置备调度程序主机管理器:

    # openstack-config --set /etc/nova/nova.conf \
       DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager
    Copy to Clipboard Toggle word wrap
  2. 禁止计算调度程序跟踪实例中的更改:

    # openstack-config --set /etc/nova/nova.conf DEFAULT scheduler_tracks_instance_changes false
    Copy to Clipboard Toggle word wrap
  3. 设置默认过滤器,如下所示:

    # openstack-config --set /etc/nova/nova.conf DEFAULT baremetal_scheduler_default_filters AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter
    Copy to Clipboard Toggle word wrap
  4. 将 Compute 设置为使用默认裸机置备调度过滤器:

    # openstack-config --set /etc/nova/nova.conf \
       DEFAULT scheduler_use_baremetal_filters True
    Copy to Clipboard Toggle word wrap
  5. 设置 Compute 以为裸机置备使用正确的身份验证详情:

    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_username ironic
    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_password PASSWORD
    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_url http://IDENTITY_IP:35357/v2.0
    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_tenant_name service
    # openstack-config --set /etc/nova/nova.conf \
       ironic api_endpoint http://IRONIC_API_IP:6385/v1
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • PASSWORD 替换为裸机置备用来与身份进行身份验证的密码。
    • IDENTITY_IP 替换为托管身份的服务器的 IP 地址或主机名。
    • IRONIC_API_IP 替换为托管裸机置备 API 服务的服务器的 IP 地址或主机名。
  6. ironic Compute 节点上设置 nova 数据库凭证:

    # openstack-config --set /etc/nova/nova.conf database connection "mysql+pymysql://nova:NOVA_DB_PASSWORD@DB_IP/nova"
    Copy to Clipboard Toggle word wrap
  7. 重启 Compute 控制器节点上的 Compute 调度程序服务:

    # systemctl restart openstack-nova-scheduler.service
    Copy to Clipboard Toggle word wrap
  8. 重启计算节点上的 compute 服务:

    # systemctl restart openstack-nova-compute.service
    Copy to Clipboard Toggle word wrap

来自 iPXE 的 OpenStack 网络 DHCP 请求需要有一个名为 ipxe 的 DHCP 标签,以便 DHCP 服务器知道客户端需要执行 HTTP 操作来获取 boot.ipxe 脚本。您可以通过在 OpenStack 网络 DHCP 代理服务使用的 dnsmasq 配置文件中添加 dhcp-userclass 条目来完成此操作。

  1. 在 overcloud 控制器上,验证 DHCP 代理使用哪个 dnsmasq 文件:

    # grep ^dnsmasq_config_file /etc/neutron/dhcp_agent.ini
    
    dnsmasq_config_file =/etc/neutron/dnsmasq-neutron.conf
    Copy to Clipboard Toggle word wrap
  2. 编辑此文件并在文件末尾添加以下行:

    # Create the "ipxe" tag if request comes from iPXE user class
    
    dhcp-userclass=set:ipxe,iPXE
    Copy to Clipboard Toggle word wrap
  3. 保存文件并重启 OpenStack Networking DHCP Agent 服务:

    # systemctl restart neutron-dhcp-agent.service
    Copy to Clipboard Toggle word wrap

1.4. 为裸机置备配置 Compute 节点

以下说明 只适用于 还运行裸机置备服务的 Compute 节点。您需要以 root 用户身份在 Compute 节点上执行这些步骤。

在 Compute 节点上,您有裸机置备 NIC,如 eth6。此流程的目标如下:

  1. 要将裸机 Provisioning NIC ( 本例中为 eth6) 连接到 Open vSwitch。
  2. 要在这个连接上分配 IP 地址,因为裸机服务器需要在 iPXE 过程中从裸机节点中拉取引导镜像。

eth6 连接到 Open vSwitch

  1. 第 1.3 节 “为裸机置备服务配置 Controller 节点” 中的 Controller 节点一样,在运行裸机置备服务的 Compute 节点上创建一个桥接:

    # ovs-vsctl add-br br-ironic
    # ovs-vsctl add-port br-ironic IRONIC_PROVISIONING_NIC
    Copy to Clipboard Toggle word wrap

    在这里,br-ironic 是网桥的名称,IRONIC_PROVISIONING NIC 是连接到裸机置备网络的 NIC,如 eth6

    注意

    此和 第 1.3 节 “为裸机置备服务配置 Controller 节点” 之间的唯一区别在于您不会在 Compute 节点上重启 OpenStack 网络服务。

    这会将网桥和端口添加到 Open vSwitch,您可以使用 ovs-vsctl show 命令来验证。但是,它不会将它连接到集成网桥(br-int),供 OpenStack 使用。

  2. 要创建连接,您需要更新 OpenStack 网络插件文件,如下所示:

    1. 更新 ML2 配置文件 /etc/neutron/plugins/ml2/ml2_conf.ini,如下所示:

      • 对于 type_drivers 参数,请确保在驱动程序中列出了 flat,例如 type_drivers = vxlan,vlan,flat,gre。这是以逗号分隔的列表。
      • 对于 mechanism_drivers 参数,请确保 openvswitch 选项列在驱动程序中,例如 mechanism_drivers =openvswitch。这是以逗号分隔的列表。
      • 对于 flat_networks 参数,创建一个名称来引用裸机置备网络,如 ironicnet。确保此名称列在列出的 flat_networks 中,如 flat_networks =datacentre,ironicnet。这是以逗号分隔的列表。
      • 如果您将 VLAN 用于裸机置备网络,请添加 network_vlan_ranges 参数,其格式为: ironicnet:VLAN_START:VLAN_END,如 network_vlan_ranges =datacentre:1:1000。这是以逗号分隔的列表。
      • enable_security_group 参数应该已经启用。但是,如果没有设置,请将值更改为 True,例如 enable_security_group = True
    2. /etc/neutron/plugins/ml2/openvswitch_agent.ini 文件中,找到 bridge_mappings 参数并更新如下:

      bridge_mappings =datacentre:br-ex,ironicnet:br-ironic
      Copy to Clipboard Toggle word wrap

      此逗号分隔的键值对的值将裸机置备网络的名称映射到连接到网络的物理设备。

  3. 重启 OpenStack 网络 Open vSwitch 代理服务:

    # systemctl restart neutron-openvswitch-agent.service
    Copy to Clipboard Toggle word wrap

现在,您已从此流程中实现了您的第一个目标。接下来,您需要为 br-ironic 网桥分配一个 IP 地址,并确保它在重启后保留。

为裸机服务器分配 IP 地址

  1. /etc/sysconfig/network-scripts 位置创建标准配置文件。您可以复制租户网络中已可用的 ifcfg* 文件,并编辑以下值: deviceipaddrovs_bridge、网桥名称和 MAC 地址,用于 br-ironiceth6。当您完成更新新文件后,它们应具有以下值:

    ifcfg-br-ironic

    DEVICE=br-ironic
    ONBOOT=yes
    HOTPLUG=no
    NM_CONTROLLED=no
    PEERDNS=no
    DEVICETYPE=ovs
    TYPE=OVSBridge
    BOOTPROTO=static
    IPADDR=BARE_METAL_PROVISIONING_IP
    NETMASK=255.255.255.0
    OVS_EXTRA="set bridge br-ironic other-config:hwaddr=MAC_ADDRESS"
    Copy to Clipboard Toggle word wrap

    ifcfg-eth6

    DEVICE=eth6
    ONBOOT=yes
    HOTPLUG=no
    NM_CONTROLLED=no
    PEERDNS=no
    DEVICETYPE=ovs
    TYPE=OVSPort
    OVS_BRIDGE=br-ironic
    BOOTPROTO=none
    Copy to Clipboard Toggle word wrap
  2. 重新启动网桥,使您的 IP 地址可以 ping 通。

    # ifup br-ironic
    Copy to Clipboard Toggle word wrap
    注意

    如果您在重启网络服务时从节点断开连接,请重新引导服务器。

1.4.1. 订阅所需的频道

要安装裸机置备软件包,您必须使用 Red Hat Subscription Manager 注册服务器或服务器,并订阅所需的频道。如果要在计算节点上安装裸机置备,您的服务器可能已经适当订阅。运行 yum repolist 以检查以下流程中的频道是否已启用。

订阅所需的频道

  1. 使用 Content Delivery Network 注册您的系统,在提示时输入您的客户门户网站用户名和密码:

    # subscription-manager register
    Copy to Clipboard Toggle word wrap
  2. 找到包含安装裸机置备所需的频道的权利池:

    # subscription-manager list --available | grep -A13 "Red Hat Enterprise Linux Server"
    # subscription-manager list --available | grep -A13 "Red Hat OpenStack Platform"
    Copy to Clipboard Toggle word wrap
  3. 使用上一步中的池标识符来附加 Red Hat Enterprise Linux 7 服务器和 Red Hat OpenStack Platform 权利:

    # subscription-manager attach --pool=POOL_ID
    Copy to Clipboard Toggle word wrap
  4. 启用所需的频道:

    # subscription-manager repos --enable=rhel-7-server-rpms \
    --enable=rhel-7-server-openstack-8-rpms \
    --enable=rhel-7-server-rh-common-rpms --enable=rhel-7-server-optional-rpms \
    --enable=rhel-7-server-openstack-8-optools-rpms
    Copy to Clipboard Toggle word wrap

1.4.2. 安装裸机置备软件包

裸机置备需要以下软件包:

openstack-ironic-api

提供裸机置备 API 服务。

openstack-ironic-conductor

提供裸机置备编排器服务。编排器允许添加、编辑和删除节点,使用 IPMI 或 SSH 打开或关闭节点,以及置备、部署和停用裸机节点。

python-ironicclient

提供用于与裸机置备服务交互的命令行界面。

安装软件包:

# yum install openstack-ironic-api openstack-ironic-conductor python-ironicclient ipxe-bootimgs
Copy to Clipboard Toggle word wrap

1.4.3. 配置 iPXE

  1. 为 iPXE、map-files 创建所需的目录,并将 undionly.kpxe 引导镜像、iPXE 和 map-file 复制到位:

    # mkdir /httpboot
    # mkdir /tftpboot
    # echo 'r ([/]) /tftpboot/\1' > /tftpboot/map-file
    # echo 'r ^(/tftpboot/) /tftpboot/\2' >> /tftpboot/map-file
    # cp /usr/share/ipxe/undionly.kpxe /tftpboot/
    # chown -R ironic:ironic /httpboot
    # chown -R ironic:ironic /tftpboot
    Copy to Clipboard Toggle word wrap
  2. 默认情况下,director 部署的 Compute 节点以 Enforcing 模式运行 SELinux。为了避免在尝试 iPXE 引导时获得权限错误,请确保在这些目录中设置适当的标签。要应用这些标签,请以 root 用户身份运行以下命令:

    # semanage fcontext -a -t httpd_sys_content_t "/httpboot(/.*)?"
    # restorecon -Rv /httpboot
    # semanage fcontext -a -t tftpdir_t "/tftpboot(/.*)?"
    # restorecon -Rv /tftpboot
    Copy to Clipboard Toggle word wrap
  3. 配置 HTTP,以便它可以提供镜像的请求。httpd 软件包已经安装,因此创建适当的虚拟主机条目并启动服务至关重要。

    注意

    /etc/httpd/conf.d 包含多个文件。由于红帽将单个 overcloud 完整镜像用于所有节点,因此它将在所有节点上包括这些文件,即使它仅在 Controller 节点上使用。您可以删除 /etc/httpd/conf.d 的内容,或者在其它位置复制它们,因为它们没有被使用。

    在 中为 iPXE 配置创建一个新文件。您可以命名此文件,确保该文件采用 .conf 格式,并包含以下内容:

    # cat 10-ipxe_vhost.conf
    Listen 8088
    <VirtualHost *:8088>
        DocumentRoot "/httpboot"
        <Directory "/httpboot">
            Options Indexes FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
            Require all granted
        </Directory>
    
        ## Logging
        ErrorLog "/var/log/httpd/ironic_error.log"
        ServerSignature Off
        CustomLog "/var/log/httpd/ironic_access.log" combined
    </VirtualHost>
    Copy to Clipboard Toggle word wrap

    以上虚拟主机配置将 HTTPD 配置为在端口 8088 上列出的所有地址,并为该端口的所有请求设置文档根目录以转至 /httpboot

  4. 保存此文件并在 Compute 节点上启用和重启 HTTPD 服务:

    # systemctl enable httpd.service
    # systemctl start httpd.service
    Copy to Clipboard Toggle word wrap

1.4.4. 配置裸机置备服务

在本节中,您将对 /etc/ironic/ironic.conf 文件进行必要的更改。

1.4.4.1. 配置裸机置备与数据库服务器的比较

设置连接配置键的值:

# openstack-config --set /etc/ironic/ironic.conf \
database connection mysql+pymysql://ironic:PASSWORD@IP/ironic
Copy to Clipboard Toggle word wrap

在这里,PASSWORD 是数据库服务器的密码,IP 是数据库服务器的 IP 地址或主机名。

重要

在连接配置密钥中指定的 IP 地址或主机名必须与在 第 1.3.1 节 “创建裸机置备数据库” 中创建裸机置备数据库时为裸机置备数据库被授予访问权限的 IP 地址或主机名匹配。此外,如果数据库托管在本地,并且您在创建数据库时为 localhost 授予权限,则必须输入 localhost

1.4.4.2. 配置裸机置备身份验证

配置裸机置备以使用 Identity 进行身份验证。此流程中的所有步骤都必须在托管裸机置备的服务器或服务器上执行,同时以 root 用户身份登录。

配置裸机置备以通过身份认证

  1. 设置裸机置备必须使用的 Identity public 和 admin 端点:

    # openstack-config --set /etc/ironic/ironic.conf \
       keystone_authtoken auth_uri http://IP:5000/v2.0
    # openstack-config --set /etc/ironic/ironic.conf \
       keystone_authtoken identity_uri http://IP:35357/
    Copy to Clipboard Toggle word wrap

    使用身份服务器的 IP 地址或主机名替换 IP。

  2. 设置裸机置备以作为 服务 租户进行身份验证:

    # openstack-config --set /etc/ironic/ironic.conf \
       keystone_authtoken admin_tenant_name service
    Copy to Clipboard Toggle word wrap
  3. 设置裸机置备,以使用 ironic 管理用户帐户进行身份验证:

    # openstack-config --set /etc/ironic/ironic.conf \
       keystone_authtoken admin_user ironic
    Copy to Clipboard Toggle word wrap
  4. 设置裸机置备,以使用正确的 ironic 管理用户帐户密码:

    # openstack-config --set /etc/ironic/ironic.conf \
       keystone_authtoken admin_password PASSWORD
    Copy to Clipboard Toggle word wrap

    PASSWORD 替换为创建 ironic 用户时设定的密码。

1.4.4.3. 为裸机置备配置 RabbitMQ 消息代理设置

RabbitMQ 是默认的(和推荐)消息代理。RabbitMQ 消息传递服务由 rabbitmq-server 软件包提供。以下流程中的所有步骤都必须在 Controller 或 Compute 节点上执行,同时以 root 用户身份登录。

此流程假设 RabbitMQ 消息传递服务已经安装并配置,并且托管消息传递服务的服务器上已创建了 ironic 用户和相关密码。

配置裸机置备以使用 RabbitMQ 消息代理

  1. 将 RabbitMQ 设置为 RPC 后端:

    # openstack-config --set /etc/ironic/ironic.conf \
       DEFAULT rpc_backend ironic.openstack.common.rpc.impl_kombu
    Copy to Clipboard Toggle word wrap
  2. 设置裸机置备以连接到 RabbitMQ 主机:

    # openstack-config --set /etc/ironic/ironic.conf \
       oslo_messaging_rabbit rabbit_host RABBITMQ_HOST
    Copy to Clipboard Toggle word wrap

    RABBITMQ_HOST 替换为托管消息代理的服务器的 IP 地址或主机名。

  3. 将消息代理端口设置为 5672 :

    # openstack-config --set /etc/ironic/ironic.conf \
       oslo_messaging_rabbit rabbit_port 5672
    Copy to Clipboard Toggle word wrap
  4. 在配置了 RabbitMQ 时,设置为裸机置备创建的 RabbitMQ 用户名和密码:

    # openstack-config --set /etc/ironic/ironic.conf \
       oslo_messaging_rabbit rabbit_userid guest
    # openstack-config --set /etc/ironic/ironic.conf \
       oslo_messaging_rabbit rabbit_password RABBIT_GUEST_PASSWORD
    Copy to Clipboard Toggle word wrap

    RABBIT_GUEST_PASSWORD 替换为 guest 用户的 RabbitMQ 密码。

  5. 启动 RabbitMQ 后,guest 用户被授予对所有资源的读写权限:特别是通过虚拟主机。配置裸机置备以连接到此虚拟主机:

    # openstack-config --set /etc/ironic/ironic.conf \
       oslo_messaging_rabbit rabbit_virtual_host /
    Copy to Clipboard Toggle word wrap
1.4.4.4. 配置裸机置备驱动程序

裸机置备支持多个驱动程序,用于部署和管理裸机服务器。有些驱动程序有硬件要求,且需要额外的配置或软件包安装。详情请查看 附录 A, 裸机置备驱动程序。驱动程序的前半名称指定其部署方法(如 PXE),第二个半指定其电源管理方法(如 IPMI)。

配置裸机置备驱动程序

  1. 指定用于置备裸机服务器的驱动程序或驱动程序。使用以逗号分隔的列表指定多个驱动程序:

    # openstack-config --set /etc/ironic/ironic.conf \
       DEFAULT enabled_drivers DRIVER1,DRIVER2
    Copy to Clipboard Toggle word wrap

    支持以下驱动程序:

    • 带有 PXE 部署的 IPMI

      • pxe_ipmitool
    • 具有 PXE 部署的 DRAC

      • pxe_drac
    • 带有 PXE 部署的 iLO

      • pxe_ilo
    • 具有 PXE 部署的 SSH

      • pxe_ssh
    • iRMC 使用 PXE

      • pxe_irmc
  2. 重启裸机编排器服务:

    # systemctl restart openstack-ironic-conductor.service
    Copy to Clipboard Toggle word wrap
1.4.4.5. 将裸机置备服务配置为使用 PXE
  1. 将裸机置备服务设置为使用 PXE 模板:

    # openstack-config --set /etc/ironic/ironic.conf \
    pxe pxe_config_template \$pybasedir/drivers/modules/ipxe_config.template
    Copy to Clipboard Toggle word wrap
  2. 将裸机置备服务设置为使用 tftp_server

    # openstack-config --set /etc/ironic/ironic.conf \
    pxe tftp_server BARE_METAL_PROVISIONING_NETWORK_IP
    Copy to Clipboard Toggle word wrap
  3. 设置 PXE tftp_root

    # openstack-config --set /etc/ironic/ironic.conf \
    pxe tftp_root /tftpboot
    Copy to Clipboard Toggle word wrap
  4. 设置 PXE 引导文件名:

    # openstack-config --set /etc/ironic/ironic.conf \
    pxe pxe_bootfile_name undionly.kpxe
    Copy to Clipboard Toggle word wrap
  5. 启用裸机置备服务以使用 iPXE:

    # openstack-config --set /etc/ironic/ironic.conf \
    pxe ipxe_enabled true
    Copy to Clipboard Toggle word wrap
  6. http 服务器设置 URL:

    # openstack-config --set /etc/ironic/ironic.conf deploy http_url http://BARE_METAL_PROVISIONING_IP:8088
    Copy to Clipboard Toggle word wrap
  7. 重启裸机编排器服务:

    # systemctl restart openstack-ironic-conductor.service
    Copy to Clipboard Toggle word wrap

裸机调配使用 OpenStack 网络进行 DHCP 和网络配置,并使用镜像服务来管理用于启动物理计算机的镜像。配置裸机置备以连接到 OpenStack 网络和镜像服务并进行通信。此流程中的所有步骤都必须在托管裸机置备的服务器上执行,同时以 root 用户身份登录。

配置裸机置备以与 OpenStack 网络和 OpenStack 镜像比较

  1. 设置裸机置备以使用 OpenStack 网络端点:

    # openstack-config --set /etc/ironic/ironic.conf \
       neutron url http://NEUTRON_IP:9696
    Copy to Clipboard Toggle word wrap

    NEUTRON_IP 替换为托管 OpenStack 网络的服务器的 IP 地址或主机名。

  2. 设置裸机置备以与镜像服务通信:

    # openstack-config --set /etc/ironic/ironic.conf \
       glance glance_host GLANCE_IP
    Copy to Clipboard Toggle word wrap

    使用托管镜像服务的服务器的 IP 地址或主机名替换 GLANCE_IP

  3. 启动裸机置备 API 服务,并将其配置为在引导时启动:

    # systemctl start openstack-ironic-api.service
    # systemctl enable openstack-ironic-api.service
    Copy to Clipboard Toggle word wrap
  4. 创建裸机置备数据库表:

    # ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema
    Copy to Clipboard Toggle word wrap
  5. 启动裸机置备编排器服务,并将其配置为在引导时启动:

    # systemctl restart openstack-ironic-conductor.service
    # systemctl enable openstack-ironic-conductor.service
    Copy to Clipboard Toggle word wrap

1.4.5. 配置 OpenStack Compute 以使用裸机置备服务

在本节中,您将更新 /etc/nova/nova.conf 文件,以将 Compute 服务配置为使用裸机置备服务:

配置 OpenStack Compute 以使用裸机置备

  1. 将 Compute 设置为使用集群计算管理器:

    # openstack-config --set /etc/nova/nova.conf \
       DEFAULT compute_manager ironic.nova.compute.manager.ClusteredComputeManager
    Copy to Clipboard Toggle word wrap
  2. 将虚拟 RAM 设置为物理 RAM 分配比率:

    # openstack-config --set /etc/nova/nova.conf \
       DEFAULT ram_allocation_ratio 1.0
    Copy to Clipboard Toggle word wrap
  3. 设置要为主机保留的磁盘空间量(以 MB 为单位):

    # openstack-config --set /etc/nova/nova.conf \
       DEFAULT reserved_host_memory_mb 0
    Copy to Clipboard Toggle word wrap
  4. 设置 Compute 以使用裸机置备驱动程序:

    # openstack-config --set /etc/nova/nova.conf \
       DEFAULT compute_driver nova.virt.ironic.IronicDriver
    Copy to Clipboard Toggle word wrap
  5. 设置 Compute 以为裸机置备使用正确的身份验证详情:

    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_username ironic
    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_password PASSWORD
    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_url http://IDENTITY_IP:35357/v2.0
    # openstack-config --set /etc/nova/nova.conf \
       ironic admin_tenant_name service
    # openstack-config --set /etc/nova/nova.conf \
       ironic api_endpoint http://IRONIC_API_IP:6385/v1
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • PASSWORD 替换为裸机置备用来与身份进行身份验证的密码。
    • IDENTITY_IP 替换为托管身份的服务器的 IP 地址或主机名。
    • IRONIC_API_IP 替换为托管裸机置备 API 服务的服务器的 IP 地址或主机名。
  6. 重启 Compute 控制器节点上的 Compute 调度程序服务:

    # systemctl restart openstack-nova-scheduler.service
    Copy to Clipboard Toggle word wrap
  7. 重启计算节点上的 compute 服务:

    # systemctl restart openstack-nova-compute.service
    Copy to Clipboard Toggle word wrap

第 2 章 配置裸机部署

配置裸机置备、镜像服务和 Compute,以在 OpenStack 环境中启用裸机部署。以下小节概述了成功部署裸机节点所需的额外配置步骤。

2.1. 为裸机置备服务创建 OpenStack 配置

2.1.1. 配置 OpenStack 网络配置

配置 OpenStack 网络,以针对 DHCP、PXE 引导和其他要求与裸机置备通信。以下流程为裸机上的单个扁平网络用例配置 OpenStack 网络。该配置使用 ML2 插件和 Open vSwitch 代理。

确保用于调配的网络接口与用于 OpenStack 网络节点上的远程连接的网络接口不同。此流程使用裸机置备网络接口创建一个桥接,并丢弃任何远程连接。

以下流程中的所有步骤都必须在托管 OpenStack 网络的服务器上执行,同时以 root 用户身份登录。

配置 OpenStack 网络与裸机置备的比较

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

    # source ~stack/overcloudrc
    Copy to Clipboard Toggle word wrap
  2. 创建扁平网络,以置备裸机实例:

    # neutron net-create --tenant-id TENANT_ID sharednet1 --shared \
    --provider:network_type flat --provider:physical_network PHYSNET
    Copy to Clipboard Toggle word wrap

    TENANT_ID 替换为要在其上创建网络的租户的唯一标识符。将 PHYSNET 替换为物理网络的名称。

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

    # neutron subnet-create sharednet1 NETWORK_CIDR --name SUBNET_NAME \
    --ip-version 4 --gateway GATEWAY_IP --allocation-pool \
    start=START_IP,end=END_IP --enable-dhcp
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • NETWORK_CIDR 替换为子网所代表的 IP 地址块的无类别域间路由(CIDR)表示。由 START_IP 启动的范围指定的 IP 地址块,由 END_IP 结束,必须由 NETWORK_CIDR 指定的 IP 地址块内。
    • SUBNET_NAME 替换为子网的名称。
    • GATEWAY_IP 替换为将充当新子网的网关的系统的 IP 地址或主机名。此地址必须位于由 NETWORK_CIDR 指定的 IP 地址块内,但由 START_IP 启动的范围指定为 IP 地址块,由 END_IP 结束。
    • START_IP 替换为 IP 地址,该地址表示要从中分配浮动 IP 地址的新子网中的 IP 地址范围。
    • END_IP 替换为 IP 地址,该地址表示要从中分配浮动 IP 地址的新子网中 IP 地址范围的末尾。
  4. 将网络和子网附加到路由器,以确保元数据请求由 OpenStack 网络服务提供。

    # neutron router-create ROUTER_NAME
    Copy to Clipboard Toggle word wrap

    ROUTER_NAME 替换为路由器的名称。

  5. 将 Bare Metal 子网添加为此路由器上的接口:

    # neutron router-interface-add ROUTER_NAME BAREMETAL_SUBNET
    Copy to Clipboard Toggle word wrap

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

  6. 更新运行裸机置备服务的 Compute 节点上的 /etc/ironic/ironic.conf 文件,以将相同的网络用于清理服务。登录到运行裸机置备服务的 Compute 节点,并以 root 用户身份执行以下操作:

    # openstack-config --set /etc/ironic/ironic.conf neutron cleaning_network_uuid NETWORK_UUID
    Copy to Clipboard Toggle word wrap

    NETWORK_UUID 替换为前面步骤中创建的裸机置备网络的 ID。

  7. 重启裸机置备服务:

    # systemctl restart openstack-ironic-conductor.service
    Copy to Clipboard Toggle word wrap

2.1.2. 创建裸机置备类别

您需要创建一个类别来用作部署的一部分,其规格(内存、CPU 和磁盘)应等于或小于您的裸机节点提供的内容。

  1. 列出现有类别:

    # openstack flavor list
    Copy to Clipboard Toggle word wrap
  2. 为裸机置备服务创建新类别:

    # openstack flavor create --id auto --ram RAM --vcpus VCPU --disk DISK --public baremetal
    Copy to Clipboard Toggle word wrap

    RAM 替换为 RAM 内存,VCPU 替换为 vCPU 的数量,DISK 替换为磁盘存储值。

  3. 将类别设置为从本地磁盘启动,否则将使用默认的 netboot 方法。

    # openstack flavor set --property capabilities:boot_option='local' baremetal
    Copy to Clipboard Toggle word wrap
  4. 验证新类别是否已创建有对应值:

    # openstack flavor list
    Copy to Clipboard Toggle word wrap

2.1.3. 创建裸机镜像

裸机置备部署需要两组镜像 - 部署镜像 和用户 镜像。部署镜像 是一个基本镜像,它只需要引导节点,并将 用户 镜像复制到裸机置备节点上。在部署镜像加载到镜像服务后,您可以更新裸机置备节点以将其设置为将 部署镜像 用作引导镜像。您不必 创建部署镜像,因为它已在 undercloud 部署 overcloud 时使用。部署镜像 可分为两个部分 - 内核和 ramdisk,如下所示:

ironic-python-agent.kernel
ironic-python-agent.initramfs
Copy to Clipboard Toggle word wrap

如果您没有删除这些镜像,则这些镜像应位于 ~/stack/images 目录中。如果没有,并且您仍然安装了 rhosp-director-images-ips 软件包,则这些镜像将位于 /usr/share/rhosp-director-images/ironic-python-agent*.el7ost.tar 文件中。

提取镜像并将其加载到镜像服务中:

# openstack image create --container-format aki --disk-format aki --public --file ./ironic-python-agent.kernel bm-deploy-kernel
# openstack image create --container-format ari --disk-format ari --public --file ./ironic-python-agent.initramfs bm-deploy-ramdisk
Copy to Clipboard Toggle word wrap

您需要的最终镜像是在裸机置备节点上部署的实际镜像。例如,您可以下载 Red Hat Enterprise Linux KVM 镜像,因为它已具有 cloud-init

将镜像加载到镜像服务中:

# openstack image create --container-format bare --disk-format qcow2 --public --file ./IMAGE_FILE rhel
Copy to Clipboard Toggle word wrap

2.1.4. 将裸机置备节点添加到裸机置备服务

要将裸机置备节点添加到裸机置备服务中,请复制用于实例化云的 instackenv.json 文件的 部分,并根据您的需要进行修改。

  1. 查找 overcloudrc 文件并导入 .json 文件:

    # source ~stack/overcloudrc
    # openstack baremetal import --json ./baremetal.json
    Copy to Clipboard Toggle word wrap
  2. 更新裸机置备服务中的裸机节点,通过在节点的 driver_info 部分中指定 deploy_kerneldeploy_ramdisk 来使用部署的镜像作为初始引导镜像:

    # ironic node-update NODE_UUID add driver_info/deploy_kernel=DEPLOY_KERNEL_ID driver_info/deploy_ramdisk=DEPLOY_RAMDISK_ID
    Copy to Clipboard Toggle word wrap

NODE_UUID 替换为裸机节点的 UUID。您可以通过在 director 节点上执行 ironic node-list 命令来获取这个值。将 DEPLOY_KERNEL_ID 替换为部署内核镜像的 ID。您可以通过在 director 节点上执行 glance image-list 命令获取这个值。将 DEPLOY_RAMDISK_ID 替换为部署 ramdisk 镜像的 ID。您可以通过在 director 节点上执行 glance image-list 命令获取这个值。

2.1.5. 部署裸机置备节点

使用 nova boot 命令部署裸机置备节点:

# nova  boot --image BAREMETAL_USER_IMAGE --flavor BAREMETAL_FLAVOR --nic net-id=IRONIC_NETWORK_ID --key default MACHINE_HOSTNAME
Copy to Clipboard Toggle word wrap

BAREMETAL_USER_IMAGE 替换为已加载到镜像服务的镜像,BAREMETAL_FLAVOR 替换为裸机部署的类别,IRONIC_NETWORK_ID 替换为 OpenStack 网络服务中裸机置备网络的 ID,MACHINE_HOSTNAME 替换为部署它的计算机的主机名。

2.2. 配置硬件内省

硬件内省允许裸机置备来发现节点上的硬件信息。内省还会为发现的以太网 MAC 地址创建端口。另外,您可以手动为每个节点添加硬件详情 ; 如需更多信息,请参阅 第 2.3.2 节 “手动添加节点”。以下流程中的所有步骤都必须在托管裸机置备编排器服务的服务器上执行,同时以 root 用户身份登录。

使用以下驱动程序支持硬件内省:

  • pxe_drac
  • pxe_ipmitool
  • pxe_ssh

配置硬件内省

  1. 获取用于通过 PXE 引导进行裸机系统发现的 Ironic Python Agent 内核和 ramdisk 镜像。这些镜像位于标记为 Ironic Python Agent Image for RHOSP director 8.0 的 TAR 存档中,地址为 https://access.redhat.com/downloads/content/191/ver=8/rhel---7/8/x86_64/product-software。下载 TAR 存档,从中提取镜像文件(ironic-python-agent.kernelironic-python-agent.initramfs),并将其复制到 TFTP 服务器上的 /tftpboot 目录中。
  2. 在托管硬件内省服务的服务器上,为 RHEL 7 (RPMs)频道启用 Red Hat OpenStack Platform 8 director

    # subscription-manager repos --enable=rhel-7-server-openstack-8-director-rpms
    Copy to Clipboard Toggle word wrap
  3. 安装 openstack-ironic-inspector 软件包:

    # yum install openstack-ironic-inspector
    Copy to Clipboard Toggle word wrap
  4. ironic.conf 文件中启用内省:

    # openstack-config --set /etc/ironic/ironic.conf \
       inspector enabled True
    Copy to Clipboard Toggle word wrap
  5. 如果硬件内省服务托管在单独的服务器上,请在托管编排器服务的服务器上设置其 URL:

    # openstack-config --set /etc/ironic/ironic.conf \
       inspector service_url http://INSPECTOR_IP:5050
    Copy to Clipboard Toggle word wrap

    INSPECTOR_IP 替换为托管硬件内省服务的服务器的 IP 地址或主机名。

  6. 使用身份验证凭证提供硬件内省服务:

    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken identity_uri http://IDENTITY_IP:35357
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken auth_uri http://IDENTITY_IP:5000/v2.0
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken admin_user ironic
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken admin_password PASSWORD
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken admin_tenant_name services
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_auth_url http://IDENTITY_IP:5000/v2.0
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_username ironic
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_password PASSWORD
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_tenant_name service
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       firewall dnsmasq_interface br-ironic
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       database connection sqlite:////var/lib/ironic-inspector/inspector.sqlite
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • IDENTITY_IP 替换为身份服务器的 IP 地址或主机名。
    • PASSWORD 替换为裸机置备用来与身份进行身份验证的密码。
  7. 另外,还可设置硬件内省服务以存储 ramdisk 的日志:

    # openstack-config --set /etc/ironic-inspector/inspector.conf \
    processing ramdisk_logs_dir /var/log/ironic-inspector/ramdisk
    Copy to Clipboard Toggle word wrap
  8. (可选)启用附加数据处理插件,以使用多个本地磁盘收集裸机块设备并公开根设备。ramdisk_error,root_disk_selection,scheduler, 和 validate_interfaces 默认启用,不应禁用。以下命令在列表中添加 root_device_hint

    # openstack-config --set /etc/ironic-inspector/inspector.conf \
    processing processing_hooks '$default_processing_hooks,root_device_hint'
    Copy to Clipboard Toggle word wrap
  9. 生成初始 ironic 检查器 数据库:

    # ironic-inspector-dbsync --config-file /etc/ironic-inspector/inspector.conf upgrade
    Copy to Clipboard Toggle word wrap
  10. 更新检查器数据库文件,使其归 ironic-inspector 所有:

    # chown ironic-inspector /var/lib/ironic-inspector/inspector.sqlite
    Copy to Clipboard Toggle word wrap
  11. 在文本编辑器中打开 /etc/ironic-inspector/dnsmasq.conf 文件,并为 openstack-ironic-inspector-dnsmasq 服务配置以下 PXE 引导设置:

    port=0
    interface=br-ironic
    bind-interfaces
    dhcp-range=START_IP,END_IP
    enable-tftp
    tftp-root=/tftpboot
    dhcp-boot=pxelinux.0
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • INTERFACE 替换为裸机置备网络接口的名称。
    • START_IP 替换为 IP 地址,该地址表示要从中分配浮动 IP 地址的 IP 地址范围。
    • END_IP 替换为 IP 地址,该地址表示要从中分配浮动 IP 地址的 IP 地址范围。
  12. syslinux 引导装载程序 复制到 tftp 目录中:

    # cp /usr/share/syslinux/pxelinux.0 /tftpboot/pxelinux.0
    Copy to Clipboard Toggle word wrap
  13. 另外,您还可以配置硬件内省服务,将元数据存储在 /etc/ironic-inspector/inspector.conf 文件的 swift 部分中。

    [swift]
    username = ironic
    password = PASSWORD
    tenant_name = service
    os_auth_url = http://IDENTITY_IP:5000/v2.0
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • IDENTITY_IP 替换为身份服务器的 IP 地址或主机名。
    • PASSWORD 替换为裸机置备用来与身份进行身份验证的密码。
  14. 在文本编辑器中打开 /tftpboot/pxelinux.cfg/default 文件,并配置以下选项:

    default discover
    
    label discover
    kernel ironic-python-agent.kernel
    append initrd=ironic-python-agent.initramfs \
    ipa-inspection-callback-url=http://INSPECTOR_IP:5050/v1/continue
    ipa-api-url=http://IRONIC_API_IP:6385
    
    ipappend 3
    Copy to Clipboard Toggle word wrap

    INSPECTOR_IP 替换为托管硬件内省服务的服务器的 IP 地址或主机名。请注意,来自 附加到 /continue 的文本必须位于一行上,如上面的块中的 \ 表示。

  15. 重置 /tftpboot/ 目录及其文件的安全上下文:

    # restorecon -R /tftpboot/
    Copy to Clipboard Toggle word wrap

    此步骤可确保目录具有正确的 SELinux 安全标签,并且 dnsmasq 服务可以访问该目录。

  16. 启动硬件内省服务和 dnsmasq 服务,并将它们配置为在引导时启动:

    # systemctl start openstack-ironic-inspector.service
    # systemctl enable openstack-ironic-inspector.service
    # systemctl start openstack-ironic-inspector-dnsmasq.service
    # systemctl enable openstack-ironic-inspector-dnsmasq.service
    Copy to Clipboard Toggle word wrap

    在通过裸机置备注册后,硬件内省可以在节点上使用。

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

将作为要调配实例的物理计算机的节点添加,并确认 Compute 可以查看可用的硬件。计算不会立即通知新资源,因为计算的资源跟踪器定期同步。在下一个定期任务运行后,更改将可见。这个值 scheduler_driver_task_period 可以在 /etc/nova/nova.conf 中更新。默认周期为 60 秒。

在系统注册为裸机节点后,可以使用硬件内省来发现硬件详细信息,或者手动添加。

2.3.1. 使用硬件内省添加节点

将物理计算机注册为裸机节点,然后使用 openstack-ironic-inspector 检测节点的硬件详细信息,并为其每个以太网 MAC 地址创建端口。以下流程中的所有步骤都必须在托管裸机置备编排器服务的服务器上执行,同时以 root 用户身份登录。

使用硬件内省添加节点

  1. 设置 shell,以使用 Identity 作为管理用户:

    # source ~/keystonerc_admin
    Copy to Clipboard Toggle word wrap
  2. 添加新节点:

    # ironic node-create -d DRIVER_NAME
    Copy to Clipboard Toggle word wrap

    DRIVER_NAME 替换为裸机置备用于置备此节点的驱动程序的名称。您必须在 /etc/ironic/ironic.conf 文件中启用了此驱动程序。要创建节点,必须至少指定驱动程序名称。

    重要

    请注意节点的唯一标识符。

  3. 您可以通过逻辑名称或 UUID 引用节点。(可选)为节点分配逻辑名称:

    # ironic node-update NODE_UUID add name=NAME
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。使用节点的逻辑名称替换 NAME

  4. 确定驱动程序所需的节点信息,然后更新节点驱动程序信息,以允许裸机置备来管理节点:

    # ironic driver-properties DRIVER_NAME
    # ironic node-update NODE_UUID add \
       driver_info/PROPERTY=VALUE \
       driver_info/PROPERTY=VALUE
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • DRIVER_NAME 替换为要显示属性的驱动程序的名称。除非已在 /etc/ironic/ironic.conf 文件中启用了驱动程序,否则不会返回这些信息。
    • NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。
    • PROPERTY 替换为 ironic driver-properties 命令返回的必要属性。
    • 使用该属性的有效值替换 VALUE
  5. 为节点驱动程序指定部署内核和部署 ramdisk:

    # ironic node-update NODE_UUID add \
      driver_info/deploy_kernel=KERNEL_UUID \
      driver_info/deploy_ramdisk=INITRAMFS_UUID
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。
    • KERNEL_UUID 替换为上传到镜像服务的 .kernel 镜像的唯一标识符。
    • INITRAMFS_UUID 替换为上传到镜像服务的 .initramfs 镜像的唯一标识符。
  6. 将节点配置为在从节点磁盘中安装的本地引导加载程序(而非通过 PXE 或虚拟介质)进行初始部署后重新引导。还必须对用于调配节点的类别上设置本地引导功能。要启用本地引导,用于部署该节点的镜像必须包含 grub2。配置本地引导:

    # ironic node-update NODE_UUID add \
       properties/capabilities="boot_option:local"
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。

  7. 将裸机节点移到 manageable 状态:

    # ironic node-set-provision-state NODE_UUID manage
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。

  8. 开始内省:

    # openstack baremetal introspection start NODE_UUID --discoverd-url http://overcloud IP:5050
    Copy to Clipboard Toggle word wrap
    • NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。节点发现和内省过程必须运行才能完成,然后才能调配节点。要检查节点内省的状态,请运行 ironic node-list,再查找 Provision State。在成功内省后,节点将处于 available 状态。
    • overcloud IP 替换为之前在 ironic.conf 中设置的 service_url 值。
  9. 验证节点的设置:

    # ironic node-validate NODE_UUID
    +------------+--------+----------------------------+
    | Interface  | Result | Reason                     |
    +------------+--------+----------------------------+
    | console    | None   | not supported              |
    | deploy     | True   |                            |
    | inspect    | True   |                            |
    | management | True   |                            |
    | power      | True   |                            |
    +------------+--------+----------------------------+
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。以上命令的输出应该为每个接口报告 TrueNone。标记为 None 的接口是您尚未配置的接口,或者您的驱动程序不支持的接口。

2.3.2. 手动添加节点

将物理计算机注册为裸机节点,然后手动添加其硬件详细信息并为每个以太网 MAC 地址创建端口。以下流程中的所有步骤都必须在托管裸机置备编排器服务的服务器上执行,同时以 root 用户身份登录。

添加没有硬件内省的节点

  1. 设置 shell,以使用 Identity 作为管理用户:

    # source ~/keystonerc_admin
    Copy to Clipboard Toggle word wrap
  2. 添加新节点:

    # ironic node-create -d DRIVER_NAME
    Copy to Clipboard Toggle word wrap

    DRIVER_NAME 替换为裸机置备用于置备此节点的驱动程序的名称。您必须在 /etc/ironic/ironic.conf 文件中启用了此驱动程序。要创建节点,必须至少指定驱动程序名称。

    重要

    请注意节点的唯一标识符。

  3. 您可以通过逻辑名称或 UUID 引用节点。(可选)为节点分配逻辑名称:

    # ironic node-update NODE_UUID add name=NAME
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。使用节点的逻辑名称替换 NAME

  4. 确定驱动程序所需的节点信息,然后更新节点驱动程序信息,以允许裸机置备来管理节点:

    # ironic driver-properties DRIVER_NAME
    # ironic node-update NODE_UUID add \
       driver_info/PROPERTY=VALUE \
       driver_info/PROPERTY=VALUE
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • DRIVER_NAME 替换为要显示属性的驱动程序的名称。除非已在 /etc/ironic/ironic.conf 文件中启用了驱动程序,否则不会返回这些信息。
    • NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。
    • PROPERTY 替换为 ironic driver-properties 命令返回的必要属性。
    • 使用该属性的有效值替换 VALUE
  5. 为节点驱动程序指定部署内核和部署 ramdisk:

    # ironic node-update NODE_UUID add \
      driver_info/deploy_kernel=KERNEL_UUID \
      driver_info/deploy_ramdisk=INITRAMFS_UUID
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。
    • KERNEL_UUID 替换为上传到镜像服务的 .kernel 镜像的唯一标识符。
    • INITRAMFS_UUID 替换为上传到镜像服务的 .initramfs 镜像的唯一标识符。
  6. 更新节点的属性以匹配节点上的硬件规格:

    # ironic node-update NODE_UUID add \
       properties/cpus=CPU \
       properties/memory_mb=RAM_MB \
       properties/local_gb=DISK_GB \
       properties/cpu_arch=ARCH
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。
    • 使用要使用的 CPU 数量替换 CPU。
    • RAM_MB 替换为要使用的 RAM (以 MB 为单位)。
    • DISK_GB 替换为要使用的磁盘大小(以 GB 为单位)。
    • 使用要使用的构架类型替换 ARCH
  7. 将节点配置为在从节点磁盘中安装的本地引导加载程序(而非通过 PXE 或虚拟介质)进行初始部署后重新引导。还必须对用于调配节点的类别上设置本地引导功能。要启用本地引导,用于部署该节点的镜像必须包含 grub2。配置本地引导:

    # ironic node-update NODE_UUID add \
       properties/capabilities="boot_option:local"
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。

  8. 告知裸机在节点上置备网络接口卡。创建一个带有每个 NIC 的 MAC 地址的端口:

    # ironic port-create -n NODE_UUID -a MAC_ADDRESS
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。将 MAC_ADDRESS 替换为节点上 NIC 的 MAC 地址。

  9. 验证节点的设置:

    # ironic node-validate NODE_UUID
    +------------+--------+----------------------------+
    | Interface  | Result | Reason                     |
    +------------+--------+----------------------------+
    | console    | None   | not supported              |
    | deploy     | True   |                            |
    | inspect    | None   | not supported              |
    | management | True   |                            |
    | power      | True   |                            |
    +------------+--------+----------------------------+
    Copy to Clipboard Toggle word wrap

    NODE_UUID 替换为节点的唯一标识符。或者,使用节点的逻辑名称。以上命令的输出应该为每个接口报告 TrueNone。标记为 None 的接口是您尚未配置的接口,或者您的驱动程序不支持的接口。

2.4. 使用主机聚合来 9 月物理和虚拟机置备

OpenStack Compute 使用主机聚合来分区可用性区域,并将具有特定共享属性的节点分组在一起。键值对在主机聚合和实例类型上设置,以定义这些属性。在调配实例时,计算的调度程序将类别上的键值对与分配给主机聚合的键值对进行比较,并确保实例在正确的聚合和正确的主机上调配:在物理机或 openstack-nova-compute 节点上作为虚拟机。

如果您的 Red Hat OpenStack Platform 环境设置为置备裸机和虚拟机,请使用主机聚合来直接生成实例作为物理机或虚拟机。以下流程为裸机主机创建主机聚合,并添加键值对,指定主机类型是 baremetal。在此聚合中分组的任何裸机节点都会继承这个键值对。然后,相同的键值对添加到用于调配实例的类别中。

如果您用来置备裸机的镜像或镜像上传到设置了 hypervisor_type=ironic 属性的镜像服务,调度程序也会在其调度决策中使用该密钥对值。为确保在镜像属性无法应用的情况下有效调度,除了设置镜像属性外,还要设置主机聚合。有关构建和上传镜像的更多信息,请参阅 第 2.1.3 节 “创建裸机镜像”

为裸机置备创建主机聚合

  1. 在默认 nova 可用区中为 baremetal 创建主机聚合:

    # nova aggregate-create baremetal nova
    Copy to Clipboard Toggle word wrap
  2. baremetal 聚合中设置元数据,用于分配添加到 hypervisor_type=ironic 属性中的主机:

    # nova aggregate-set-metadata baremetal hypervisor_type=ironic
    Copy to Clipboard Toggle word wrap
  3. 将带有裸机置备驱动程序的 openstack-nova-compute 节点添加到 baremetal 聚合中:

    # nova aggregate-add-host baremetal COMPUTE_HOSTNAME
    Copy to Clipboard Toggle word wrap

    COMPUTE_HOSTNAME 替换为托管 openstack-nova-compute 服务的系统的主机名。应使用单个专用计算主机来处理所有裸机置备请求。

  4. ironic hypervisor 属性添加到您为置备裸机节点创建的类别或类型:

    # nova flavor-key FLAVOR_NAME set hypervisor_type="ironic"
    Copy to Clipboard Toggle word wrap

    FLAVOR_NAME 替换为类别的名称。

  5. 将以下 Compute 过滤器调度程序添加到 /etc/nova/nova.conf 中的 scheduler_default_filters 下的现有列表中:

    AggregateInstanceExtraSpecsFilter
    Copy to Clipboard Toggle word wrap

    此过滤器确保计算调度程序处理分配给主机聚合的键值对。

2.5. 示例:使用 SSH 和 Virsh 测试裸机置备

通过在充当单一物理主机上的两个虚拟机上部署实例,测试裸机置备设置。这两个虚拟机都使用 libvirtvirsh 进行虚拟化。

重要

SSH 驱动程序仅用于测试和评估目的。不建议用于 Red Hat OpenStack Platform 企业环境。

这个场景需要以下资源:

  • 在 overcloud 节点上配置了裸机置备服务的 Red Hat OpenStack Platform 环境。您必须已完成本指南中的所有步骤。
  • 安装了 Red Hat Enterprise Linux 7.2 和 libvirt 虚拟化工具的一个裸机机器。此系统充当包含虚拟化裸机节点的主机。
  • 在裸机置备节点和包含虚拟化裸机节点的主机之间有一个网络连接。此网络充当裸机置备网络。

2.5.1. 创建虚拟化裸机节点

在测试场景中创建用作裸机节点的两个虚拟机。节点将被称为 Node1Node2

创建虚拟化裸机节点

  1. libvirt 主机访问虚拟机管理器。
  2. 使用以下配置创建两个虚拟机:

    • 1 vCPU
    • 2048 MB 内存
    • 网络引导(PXE)
    • 20 GB 存储
    • Network source:Host device eth0: macvtap and Source mode:Bridge.选择 macvtap 可设置虚拟机以共享主机的以太网网络接口。这样,裸机置备节点可以直接访问虚拟化节点。
  3. 关闭两个虚拟机。

2.5.2. 创建 SSH 密钥对

创建 SSH 密钥对,它将允许裸机置备节点连接到 libvirt 主机。

创建 SSH 密钥对

  1. 在裸机置备节点上,创建一个新的 SSH 密钥:

    # ssh-keygen -t rsa -b 2048 -C "user@domain.com" -f ./virtkey
    Copy to Clipboard Toggle word wrap

    使用标识此密钥的电子邮件地址或其他注释替换 user@domain.com。当命令提示您输入密码短语时,按 Enter 键在没有密码短语的情况下继续。命令创建两个文件:私钥(virtkey)和公钥(virtkey.pub)。

  2. 将公钥的内容复制到 libvirt 主机的 root 用户的 /root/.ssh/authorized_keys 文件中:

    # ssh-copy-id -i virtkey root@LIBVIRT_HOST
    Copy to Clipboard Toggle word wrap

    LIBVIRT_HOST 替换为 libvirt 主机的 IP 地址或主机名。

在注册节点时使用私钥(virtkey)。

2.5.3. 将 Virtualized 节点添加为裸机节点

将作为节点添加,您要在其上调配实例。在本例中,手动提供驱动程序详细信息,节点详细信息则使用硬件内省来发现。节点详情也可以逐个节点手动添加。请参阅 第 2.3.2 节 “手动添加节点” 了解更多信息。

将虚拟化节点添加为裸机节点

  1. 在裸机置备编排器服务节点上,启用 pxe_ssh 驱动程序:

    # openstack-config --set /etc/ironic/ironic.conf \
       DEFAULT enabled_drivers pxe_ssh
    Copy to Clipboard Toggle word wrap

    如果要将 pxe_ssh 添加到现有驱动程序列表中,打开 文件,并将驱动程序添加到 enabled_drivers 中的列表中,用逗号分隔。

  2. 设置 shell,以使用 Identity 作为管理用户:

    # source ~/keystonerc_admin
    Copy to Clipboard Toggle word wrap
  3. 添加第一个节点,并为 libvirt 主机注册 SSH 详情:

    # ironic node-create -d pxe_ssh -n Node1 \
       -i ssh_virt_type=virsh \
       -i ssh_username=root \
       -i ssh_key_filename=VIRTKEY_FILE_PATH \
       -i ssh_address=LIBVIRT_HOST_IP \
       -i deploy_kernel=KERNEL_UUID \
       -i deploy_ramdisk=INITRAMFS_UUID
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • VIRTKEY_FILE_PATH 替换为 virtkey SSH 私钥文件的绝对路径。
    • LIBVIRT_HOST_IP 替换为 libvirt 主机的 IP 地址或主机名。
    • KERNEL_UUID 替换为上传到镜像服务的 .kernel 镜像的唯一标识符。
    • INITRAMFS_UUID 替换为上传到镜像服务的 .initramfs 镜像的唯一标识符。
  4. 使用与以上相同的命令添加第二节点,并将 Node1 替换为 Node2
  5. 将节点配置为在从节点磁盘中安装的本地引导加载程序(而非通过 PXE 或虚拟介质)进行初始部署后重新引导。本地引导功能还必须在用于调配节点的类别上设置。要启用本地引导,用于部署该节点的镜像必须包含 grub2。配置本地引导:

    # ironic node-update Node1 add \
       properties/capabilities="boot_option:local"
    # ironic node-update Node2 add \
       properties/capabilities="boot_option:local"
    Copy to Clipboard Toggle word wrap
  6. 将节点移到 manageable 状态:

    # ironic node-set-provision-state Node1 manage
    # ironic node-set-provision-state Node2 manage
    Copy to Clipboard Toggle word wrap
  7. 启动节点上的内省:

    # ironic node-set-provision-state Node1 inspect
    # ironic node-set-provision-state Node2 inspect
    Copy to Clipboard Toggle word wrap

    节点发现和内省过程必须运行才能完成,然后才能调配节点。要检查节点内省的状态,请运行 ironic node-list,再查找 Provision State。节点在成功完成内省后将处于 available 状态。

  8. 验证节点的设置:

    # ironic node-validate Node1
    # ironic node-validate Node2
    +------------+--------+----------------------------+
    | Interface  | Result | Reason                     |
    +------------+--------+----------------------------+
    | console    | None   | not supported              |
    | deploy     | True   |                            |
    | inspect    | True   |                            |
    | management | True   |                            |
    | power      | True   |                            |
    +------------+--------+----------------------------+
    Copy to Clipboard Toggle word wrap

    以上命令的输出应该为每个接口报告 TrueNone。标记为 None 的接口是您尚未配置的接口,或者您的驱动程序不支持的接口。

  9. 成功添加节点后,使用 第 3 章 启动裸机实例 启动两个实例。

第 3 章 启动裸机实例

在注册的裸机节点上置备物理机器。实例可以从命令行或 OpenStack 控制面板中启动。

3.1. 使用命令行界面部署实例

使用 nova 命令行界面部署裸机实例。

在命令行中部署实例

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

    # source ~/keystonerc_admin
    Copy to Clipboard Toggle word wrap
  2. 部署实例:

    # nova boot --nic net-id=NETWORK_UUID --flavor FLAVOR_NAME --image IMAGE_UUID INSTANCE_NAME
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • NETWORK_UUID 替换为为用于裸机置备而创建的网络的唯一标识符。
    • FLAVOR_NAME 替换为为节点创建的类别的名称。
    • IMAGE_UUID 替换为上传到镜像服务的磁盘镜像的唯一标识符。
    • INSTANCE_NAME 替换为裸机实例的名称。
  3. 检查实例的状态:

    # nova list
    Copy to Clipboard Toggle word wrap

3.2. 使用仪表板部署实例

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

在控制面板中部署实例

  1. 登录到位于 https://DASHBOARD_IP/dashboard 的仪表板。
  2. Project > Compute > Instances
  3. 单击 Launch Instance
  4. Details 选项卡中,填写以下字段:

    • 指定 实例名称
    • 选择为裸机节点创建的 Flavor
    • Instance Count 列表中选择 1
    • Instance Boot Source 列表中选择 Boot from image
    • Image Name 列表中选择操作系统磁盘镜像。
  5. Networking 选项卡中,将所需的网络从 Available Networks 拖放到 Selected Networks。确保此处选择了为裸机置备创建的共享网络。
  6. 点击 Launch

3.3. 创建 Whole Windows 镜像

此流程为 Windows Server 2012 创建部署镜像。在 Red Hat Enterprise Linux 系统中执行以下步骤:

  1. 下载 virtio-win 驱动程序。有关 所需步骤,请参阅红帽客户门户。

    因此,virtio-win .iso 文件被下载到 /usr/share/virtio-win/ 中。例如: /usr/share/virtio-win/virtio-win-1.8.0.iso

  2. 使用 virt-manager 创建 Windows Server 2012 模板虚拟机:

    • 确定 Windows 模板的虚拟硬件要求。这个示例使用 1 个 x CPU、4GB RAM、10GB HDD、2 x NIC 和 2 x 虚拟 CD-ROM 驱动器。
    • 将磁盘创建为 qcow2 文件。
    • 将虚拟 HDD 和 NIC 驱动程序设置为 virtio
    • 将 2x 虚拟 CD-ROM 驱动器附加到 Windows Server 2012 R2 .iso 文件和 virtio-win-1.8.0.iso 文件。需要两个虚拟 CD-ROM 以便在 Windows 安装过程中安装 virtio-win 驱动程序。
  3. 从 ISO 镜像手动安装 Windows:

    • 从 Windows Server 2012 R2 的评估 .iso 镜像开始安装 Windows。
    • 当授予选择 HDD 驱动程序的机会时,请从包含 virtio-win-1.8.0.iso 文件的第二个虚拟 CD-ROM 中选择驱动程序。
  4. 执行安装后 Windows 检查:

    打开 设备管理器,并确认所有设备都已正确识别,并且没有 问号 警告。特别是,检查 NIC、串行和气球驱动程序是否使用 VirtIO 驱动程序。如果任何设备没有被正确识别,请应用 virtio-win 驱动程序磁盘中的驱动程序。

  5. 运行 sysprep

    Sysprep 会导致 Windows 安装变得通用,删除特定于之前执行的单个安装的安装信息。这可让您将虚拟机的虚拟硬盘用作多个安装到其他系统的模板。

    1. C:\Windows\System32\sysprep\sysprep.exe启动 Sysprep
    2. 在 Sysprep 工具中输入以下信息:

      • 对于 System Cleanup Action,请选择 Enter System Out-of-Experience (OOBE)
      • 选择 Generalize 复选框
      • 关闭选项下,选择 Shutdown
    3. 单击确定以 完成 sysprep 过程。虚拟机将在完成后自动关闭。
  6. 在 Image Service (glance)中注册 Windows 镜像:此步骤在 glance 中注册 Windows 安装的 qcow2 HDD。这个示例使用磁盘文件: /root/win2012r2.qcow2

    $ glance image-create --file /root/win2012r2.qcow2 --disk-format qcow2 --container-format bare --name win2012r2 --is-public True --progress
    [=============================>] 100%
    Copy to Clipboard Toggle word wrap

3.3.1. 将 Windows 部署到物理服务器

  1. 通过指定硬件组件,在 ironic 中注册物理节点。例如:

    # ironic node-create -d fake_pxe -p cpus=1 -p memory_mb=1024 -p local_gb=15 -p cpu_arch=amd64
    Copy to Clipboard Toggle word wrap
  2. 检索新节点的 UUID:

    # ironic node-list
    Copy to Clipboard Toggle word wrap
  3. 为与物理 Windows 节点的 MAC 地址匹配的节点创建一个端口。

    # ironic port-create -n [NODE_UUID] -a [NIC_MAC]
    Copy to Clipboard Toggle word wrap

    例如:

    # ironic port-create -n 3b3d3fd4-4621-427f-a78d-054a1ef17a0a -a 52:54:00:85:76:53
    Copy to Clipboard Toggle word wrap
  4. 把节点设为维护模式:

    # ironic node-set-maintenance [NODE_UUID] true
    # ironic node-set-provision-state [NODE_UUID] manage
    Copy to Clipboard Toggle word wrap
  5. 执行新节点的内省:

    # openstack baremetal introspection start [NODE_UUID] --discoverd-url http://[KEYSTONE_URL]:5050
    Copy to Clipboard Toggle word wrap
    • [KEYSTONE_URL] 替换为 keystone 服务的 IP 地址。

      注意: 如果使用 FAKE_PXE 驱动程序,请在 ironic node-list 状态变为 部署 wait-callback 后手动打开节点。

  6. 内省完成后,关闭维护模式:

    # ironic node-set-maintenance [NODE UUID] false
    # ironic node-set-provision-state [NODE UUID] provide
    Copy to Clipboard Toggle word wrap
  7. 创建用于实例身份验证的密钥对:

    # nova keypair-add --pub_key ~/.ssh/id_rsa.pub [KEY_NAME]
    Copy to Clipboard Toggle word wrap
  8. 为节点启用本地引导:

    # ironic node-update [NODE_UUID] add properties/capabilities="boot_option:local"
    Copy to Clipboard Toggle word wrap
  9. 使用 nova 引导节点:

    # nova boot --nic net-id=[NETWORK_UUID] --flavor [FLAVOR_NAME] --image [IMAGE_UUID/IMAGE_NAME] --keyname [INSTANCE_NAME]
    Copy to Clipboard Toggle word wrap

    替换以下值:

    • [NETWORK_UUID] 替换为为用于裸机置备而创建的网络的唯一标识符。
    • [FLAVOR_NAME] 替换为为节点创建的类别的名称。
    • [IMAGE_UUID] 替换为上传到镜像服务的磁盘镜像的唯一标识符。
    • [INSTANCE_NAME] 替换为裸机实例的名称。
  10. 检索实例密码:

    # nova get-password [INSTANCE_NAME]  /path/to/your/keypairs/private/key
    Copy to Clipboard Toggle word wrap
  11. 检查实例的状态:

    # nova list
    Copy to Clipboard Toggle word wrap

您可以通过在仪表板中使用控制台访问实例来进一步测试这一点。

3.3.2. 启用远程桌面访问

  1. 添加一条安全组规则,以允许在 TCP/UDP 3389 上进行 远程桌面 流量。
  2. 使用 nova 命令检索安全密钥:

    # nova get-password [INSTANCE_NAME] /path/to/your/keypairs/private/key
    Copy to Clipboard Toggle word wrap
    • [INSTANCE_NAME] 替换为裸机实例的名称。

第 4 章 对裸机置备进行故障排除

以下小节包含诊断裸机置备设置中问题的信息和步骤。

带有内省的裸机置备使用四个服务: openstack-ironic-apiopenstack-ironic-conductoropenstack-ironic-inspectoropenstack-ironic-inspector-dnsmasq。大多数 OpenStack 组件的日志都可在 /var/log 目录中找到。

4.1. 对 PXE 引导错误进行故障排除

权限拒绝 错误

如果您在裸机置备节点的控制台上收到权限被拒绝的错误,请确保将适当的 SELinux 内容应用到 /httpboot/tftpboot 目录,如下所示:

# semanage fcontext -a -t httpd_sys_content_t "/httpboot(/.*)?"
# semanage fcontext -a -t tftpdir_t "/tftpboot(/.*)?"
Copy to Clipboard Toggle word wrap

引导过程 Freezes 位于 /pxelinux.cfg/XX-XX-XX-XX

在节点的控制台中,如果您想获取 IP 地址,则进程会停止,如下所示:

PXE Process Freezes During Boot

这表示您可能在 ironic.conf 文件中使用错误的 PXE 自定义模板。

# grep ^pxe_config_template ironic.conf
pxe_config_template=$pybasedir/drivers/modules/ipxe_config.template
Copy to Clipboard Toggle word wrap

默认模板是 pxe_config.template,因此很容易错过 i 来将它转换为 ipxe_config.template

当您尝试在节点的控制台中,使用您在配置步骤中设置的 root 密码登录时,但无法这样做,但它表示您没有引导至部署的镜像。您可能一直停留在 deploy-kernel/deploy-ramdisk 镜像中,并且系统已经获取正确的镜像。

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

注意

裸机置备节点唯一了解的网络是裸机置备网络。如果其中一个端点不在网络上,端点将无法作为引导过程的一部分访问裸机置备节点。

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

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=pxe_ssh boot_mode=bios initrd=deploy_ramdisk coreos.configdrive=0 || goto deploy
Copy to Clipboard Toggle word wrap
Expand
上例 内核行 中的值对应的信息

http://192.168.200.2:8088

/etc/ironic/ironic.conf 文件中的参数 http_url。此 IP 地址必须在裸机置备网络中。

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 地址必须在裸机置备网络中。

pxe_ssh

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

deploy_ramdisk

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

如果其中任何这些值在 /httpboot/pxelinux.cfg/MAC_ADDRESSironic.conf 文件之间没有对应,您需要在 ironic.conf 文件中更新它们,并重启 Bare Metal Provisioning 服务,然后重新部署裸机置备节点。

如果您的裸机置备系统没有获得正确的主机名,这意味着 cloud-init 失败。若要修复该问题,请将裸机置备子网连接到 OpenStack 网络服务中的路由器。现在,对 meta-data 代理的请求应该被正确路由。

如果您在对 Identity 服务进行身份验证时遇到问题,请检查 ironic.conf 文件中的 identity_uri 参数,并确保从 keystone AdminURL 中删除 /v2.0。例如,identity_uri 应该设置为 http://IP:PORT

4.5. 对硬件注册进行故障排除

注册硬件的问题可能是因为节点注册不正确而造成的。确保正确输入属性名称和值。错误或错误输入的属性名称将成功添加到节点的详细信息,但将被忽略。

更新节点的详细信息。这个示例将节点注册到 2 GB 的内存量更新为 2 GB:

# ironic node-update NODE_UUID replace properties/memory_mb=2048
Copy to Clipboard Toggle word wrap

4.6. 对 No Valid Host Errors 进行故障排除

如果计算调度程序找不到合适的裸机置备节点,在其上引导实例时可在 /var/log/nova/nova-conductor.log 中看到 NoValidHost 错误,或者在仪表板中启动失败时立即看到 NoValidHost 错误。这通常是由于资源 Compute 期望和裸机置备节点提供的资源不匹配造成的。

  1. 检查可用的 hypervisor 资源:

    # nova hypervisor-stats
    Copy to Clipboard Toggle word wrap

    此处报告的资源应与裸机置备节点提供的资源匹配。

  2. 检查 Compute 是否将裸机置备节点识别为虚拟机监控程序:

    # nova hypervisor-list
    Copy to Clipboard Toggle word wrap

    由 UUID 标识的节点应当会显示在列表中。

  3. 检查裸机置备节点的详情:

    # ironic node-list
    # ironic node-show NODE_UUID
    Copy to Clipboard Toggle word wrap

    验证节点的详细信息是否与计算报告的不同。

  4. 检查所选类别是否不超过裸机置备节点的可用资源:

    nova flavor-show FLAVOR_NAME
    Copy to Clipboard Toggle word wrap
  5. 检查 ironic node-list 的输出,以确保 Bare Metal Provisioning 节点没有处于维护模式。如果需要,删除维护模式:

    # ironic node-set-maintenance NODE_UUID off
    Copy to Clipboard Toggle word wrap
  6. 检查 ironic node-list 的输出,以确保 Bare Metal Provisioning 节点处于 available 状态。如果需要,将节点移至 可用

    # ironic node-set-provision-state NODE_UUID provide
    Copy to Clipboard Toggle word wrap

4.7. 对硬件内省进行故障排除

硬件内省在处于 available provision 状态的裸机置备节点上可能会失败。

  1. 检查所有节点的置备状态:

    # ironic node-list
    Copy to Clipboard Toggle word wrap
  2. 在开始内省前,将节点从 available 移到 manageable

    # ironic node-set-provision-state NODE_UUID manage
    Copy to Clipboard Toggle word wrap

附录 A. 裸机置备驱动程序

裸机置备可以配置为使用多个驱动程序之一。每个驱动程序都由一个调配方法和一个电源管理类型组成。有些驱动程序需要额外的配置。本节中描述的每个驱动程序都使用 PXE 进行调配;驱动程序通过其电源管理类型列出。要为裸机置备启用驱动程序或驱动程序,请参阅 第 1.4.4.4 节 “配置裸机置备驱动程序”

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

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

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

A.2. Dell Remote Access Controller (DRAC)

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

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

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

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

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

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

  1. ironic.conf 中启用 sensor 方法:

    # openstack-config --set /etc/ironic/ironic.conf \
       irmc sensor_method METHOD
    Copy to Clipboard Toggle word wrap

    METHOD 替换为 scciipmitool

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

    # yum install python-scciclient
    Copy to Clipboard Toggle word wrap
  3. 重启裸机置备编排器服务:

    # systemctl restart openstack-ironic-conductor.service
    Copy to Clipboard Toggle word wrap
注意

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

A.4. Integrated Lights-Out (iLO)

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

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

您还必须安装 python-proliantutils 软件包并重启裸机置备编排器服务:

# yum install python-proliantutils
# systemctl restart openstack-ironic-conductor.service
Copy to Clipboard Toggle word wrap
注意

HP 节点必须具有 2015 固件版本才能成功内省。

A.5. SSH 和 Virsh

裸机置备可以访问运行 libvirt 的主机,并使用虚拟机作为节点。virsh 控制节点的电源管理。

重要

SSH 驱动程序仅用于测试和评估目的。不建议用于 Red Hat OpenStack Platform 企业环境。

要使用此电源管理类型,裸机置备必须具有对设置虚拟节点的主机上的 libvirt 环境具有完全访问权限的帐户的 SSH 访问权限。启用 pxe_ssh 驱动程序,并在节点的 driver_info 中设置以下信息:

  • ssh_virt_type - 将此选项设置为 virsh
  • ssh_address - virsh 主机的 IP 地址。
  • ssh_username - SSH 用户名。
  • ssh_key_contents - 裸机置备编排器节点上 SSH 私钥的内容。必须将匹配的公钥复制到 virsh 主机。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat