裸机置备
安装、配置和使用 Bare Metal Service (ironic)
摘要
前言
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
使用直接文档反馈(DDF)功能
使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。
- 以 Multi-page HTML 格式查看文档。
- 请确定您看到文档右上角的 反馈 按钮。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点 添加反馈。
- 使用您的评论 完成 Add feedback 字段。
- 可选:添加您的电子邮件地址,以便文档团队可以联系您的问题。
- 点 Submit。
第 1 章 裸机置备服务
裸机置备服务(ironic)提供了可用于为最终用户置备和管理物理机器的组件。overcloud 中的裸机置备服务与以下 OpenStack 服务交互:
- OpenStack Compute (nova)提供调度、租户配额、IP 分配以及面向虚拟机实例管理的 API,而裸机恢复调配服务提供适用于硬件管理的管理 API。
- OpenStack Identity (keystone)提供请求身份验证,并帮助裸机恢复调配服务定位其他 OpenStack 服务。
- OpenStack Image 服务(glance)管理镜像和镜像元数据。
- OpenStack Networking (neutron)提供 DHCP 和网络配置。
- OpenStack Object Storage (swift)为某些驱动程序公开临时镜像 URL。
裸机恢复调配服务使用 iPXE 来调配物理计算机。下图显示了在使用默认驱动程序启动新机器时 OpenStack 服务在置备过程中如何交互。
您可以在 overcloud 中配置裸机置备服务(ironic),为最终用户置备和管理物理机器。
Red Hat OpenStack Platform (RHOSP) director 还使用 Bare Metal Provisioning 服务组件作为 undercloud 的一部分来置备和管理组成 OpenStack 环境的裸机节点(overcloud)。有关 director 如何使用裸机置备服务的更多信息,请参阅 Director 安装和使用 指南。
第 2 章 裸机置备先决条件
在开始置备裸机前,请确保您的环境包括必要的安装、硬件和网络配置。
- 有关安装要求的详情请参考 第 2.1 节 “安装要求”。
- 有关硬件要求的详情请参考 第 2.2 节 “硬件要求”。
- 有关网络要求的详情请参考 第 2.3 节 “网络要求”。
2.1. 安装要求
- 您已在 undercloud 节点上安装了 director。有关安装 director 的更多信息,请参阅安装 Undercloud。
- 已准备好使用其余 overcloud 安装裸机恢复调配服务。
overcloud 中的裸机置备服务是为可信租户环境设计的,因为裸机节点可以直接访问 Red Hat OpenStack Platform (RHOSP)安装的 control plane 网络。您还可以在 overcloud 中为 Ironic 服务实施自定义可组合网络,以便用户不需要访问 control plane。
2.2. 硬件要求
Overcloud 要求
使用裸机置备服务对 overcloud 的硬件要求与标准 overcloud 相同。有关更多信息,请参阅 Director 安装和使用 指南中的 Overcloud 要求。
裸机机器要求
您要置备的裸机的硬件要求会因您要安装的操作系统而异。
- 对于 Red Hat Enterprise Linux 8,请参阅 Red Hat Enterprise Linux 8 执行标准 RHEL 安装 。
- 如需 Red Hat Enterprise Linux 7,请参阅 Red Hat Enterprise Linux 7 安装指南。
- 有关 Red Hat Enterprise Linux 6,请参阅 Red Hat Enterprise Linux 6 安装指南。
要置备的所有裸机都需要以下内容:
- 要连接到裸机网络的 NIC。
-
一个电源管理接口(如 IPMI),它连接到
ironic-conductor
服务可访问的网络。默认情况下,ironic-conductor
在所有 Controller 节点上运行,除非您使用可组合角色并在其他位置运行ironic-conductor
。 - PXE 在裸机网络上启动。禁用部署中的其他 NIC 的 PXE 引导。
2.3. 网络要求
裸机网络:
这是裸机置备服务用于以下操作的专用网络:
- overcloud 上裸机的置备和管理。
- 在部署前和间清理裸机节点。
- 租户访问裸机节点。
裸机网络提供 DHCP 和 PXE 引导功能来发现裸机系统。此网络必须在中继接口上使用原生 VLAN,以便裸机置备服务能够提供 PXE 引导和 DHCP 请求。
您可以通过两种方式配置裸机网络:
- 为 Ironic Conductor 服务使用扁平裸机网络。此网络必须路由到 control plane 上的 Ironic 服务。如果定义了隔离的裸机网络,则裸机节点无法 PXE 引导。
- 使用自定义可组合网络在 overcloud 中实施裸机恢复调配服务。
overcloud 中的裸机置备服务是为可信租户环境设计的,因为裸机节点可以直接访问 Red Hat OpenStack Platform (RHOSP)安装的 control plane 网络。您还可以在 overcloud 中为 Ironic 服务实施自定义可组合网络,以便用户不需要访问 control plane。
网络标记:
- control plane 网络(director 置备网络)始终被取消标记。
- 裸机网络必须取消标记用于置备,还必须有权访问 Ironic API。
- 其他网络可以加上标记。
overcloud 控制器:
托管裸机置备服务的 Controller 节点必须有权访问裸机网络。
裸机节点:
裸机节点配置为 PXE 引导的 NIC 必须有权访问裸机网络。
2.3.1. 默认裸机网络
在这个架构中,裸机网络与 control plane 网络分开。裸机网络是一个扁平网络,它也充当租户网络。
- 裸机网络由 OpenStack 操作器创建。此网络需要路由到 director 置备网络。
- 裸机置备服务用户有权访问公共 OpenStack API 和裸机网络。裸机网络路由到 director 置备网络,因此用户也可以间接访问 control plane。
- 裸机置备服务使用裸机置备网络进行节点清理。
默认裸机网络架构图
2.3.2. 自定义可组合裸机网络
在这个架构中,裸机网络是一个自定义的可组合网络,无法访问 control plane。如果要限制对 control plane 的访问,您可以创建一个自定义的可组合网络:
- 自定义可组合裸机网络由 OpenStack 操作器创建。
- Ironic 用户有权访问公共 OpenStack API,也可访问自定义的可组合裸机网络。
- Ironic 将自定义可组合裸机网络用于节点清理。
第 3 章 使用裸机置备服务部署 IPv4 overcloud
如果使用 OVN,则裸机置备服务(ironic)仅支持 ironic-overcloud.yaml
文件中的 neutron DHCP 代理。OVN 上内置的 DHCP 服务器无法置备裸机节点,或为置备网络提供 DHCP。Chainbooting iPXE 需要标记(dnsmasq 中的-dhcp-match),在 OVN DHCP 服务器中不支持它。
以下流程包括特定于裸机置备服务(ironic)的部署步骤。有关使用 director 部署 overcloud 的更多信息,请参阅 Director 安装和使用 指南。
前提条件
- 您的环境满足最低要求。更多信息请参阅 第 2 章 裸机置备先决条件。
3.1. 创建裸机模板
使用环境文件,通过启用裸机恢复调配服务部署 overcloud。您可以使用位于 /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml
的 director 节点上的示例模板。
前提条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 指南。
完成模板
您可以在提供的模板或附加 yaml 文件中指定额外的配置,如 ~/templates/ironic.yaml
。
对于带有裸机和虚拟实例的混合部署,您必须将
AggregateInstanceExtraSpecsFilter
添加到NovaSchedulerDefaultFilters
列表中。如果您没有在任何位置设置NovaSchedulerDefaultFilters
,您可以在ironic.yaml
中这样做。例如,请参阅 示例模板。注意如果使用 SR-IOV,则
tripleo-heat-templates/environments/neutron-sriov.yaml
中已经设置了NovaSchedulerDefaultFilters
。将AggregateInstanceExtraSpecsFilter
附加到此列表中。-
清理类型,在部署之前和间由
Ironic 清理DiskErase
进行设置。默认情况下,部署/ironic/ironic-conductor-container-puppet.yaml
设置为full
。您可以将其设置为元数据
来显著加快进程速度,因为它只清理分区表。但是,由于在多租户环境中部署的安全性较低,因此仅在可信租户环境中完成此操作。 -
您可以使用
IronicEnabledHardwareTypes
参数添加驱动程序。默认情况下启用ipmi
和redfish
。
有关配置参数的完整列表,请参阅 Overcloud 参数 指南中的 裸机。
3.1.1. 模板示例
以下是模板文件示例。此文件可能无法满足环境的要求。在使用此示例前,请确保不会影响环境中任何现有配置。这个示例包含以下配置:
-
AggregateInstanceExtraSpecsFilter
允许虚拟和裸机实例进行混合部署。 - 磁盘清理在部署前和之间仅由分区表(元数据)执行一次。
~/templates/ironic.yaml
parameter_defaults: NovaSchedulerDefaultFilters: - AggregateInstanceExtraSpecsFilter - AvailabilityZoneFilter - ComputeFilter - ComputeCapabilitiesFilter - ImagePropertiesFilter IronicCleaningDiskErase: metadata
parameter_defaults:
NovaSchedulerDefaultFilters:
- AggregateInstanceExtraSpecsFilter
- AvailabilityZoneFilter
- ComputeFilter
- ComputeCapabilitiesFilter
- ImagePropertiesFilter
IronicCleaningDiskErase: metadata
3.2. 网络配置
如果使用默认的扁平裸机网络,您必须为裸机置备服务(ironic)创建网桥 br-baremetal
。您可以在额外模板中指定此网桥:
~/templates/network-environment.yaml
parameter_defaults: NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal NeutronFlatNetworks: datacentre,baremetal
parameter_defaults:
NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
NeutronFlatNetworks: datacentre,baremetal
您可以在控制器的 provisioning 网络(control plane)中配置此桥接,以便可以重复使用这个网络作为裸机网络,或添加专用网络。配置要求相同,但裸机网络无法被 VLAN 标记,因为它用于置备。
~/templates/nic-configs/controller.yaml
network_config: - type: ovs_bridge name: br-baremetal use_dhcp: false members: - type: interface name: eth1
network_config:
-
type: ovs_bridge
name: br-baremetal
use_dhcp: false
members:
-
type: interface
name: eth1
overcloud 中的裸机置备服务是为可信租户环境设计的,因为裸机节点可以直接访问 Red Hat OpenStack Platform (RHOSP)安装的 control plane 网络。
3.2.1. 配置自定义 IPv4 置备网络
默认扁平调配网络可以在客户环境中引入安全问题,因为租户可能会干扰 undercloud 网络。要防止这种风险,您可以为没有 control plane 的 ironic 服务配置自定义的可组合裸机置备网络。
前提条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 指南。
流程
配置 shell 以作为管理用户身份访问 Identity 服务(keystone):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/stackrc
$ source ~/stackrc
复制
network_data.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml .
(undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml .
编辑新的
network_data.yaml
文件并为 IPv4 overcloud 置备添加新网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow custom network for overcloud provisioning
# custom network for overcloud provisioning - name: OcProvisioning name_lower: oc_provisioning vip: true vlan: 205 ip_subnet: '172.23.3.0/24' allocation_pools: [{'start': '172.23.3.10', 'end': '172.23.3.200'}]
更新
network_environments.yaml
和nic-configs/controller.yaml
文件,以使用新的网络。在
network_environments.yaml
文件中,重新 map Ironic 网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceNetMap: IronicApiNetwork: oc_provisioning IronicNetwork: oc_provisioning
ServiceNetMap: IronicApiNetwork: oc_provisioning IronicNetwork: oc_provisioning
在
nic-configs/controller.yaml
文件中,添加一个接口和所需参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow $network_config: - type: vlan vlan_id: get_param: OcProvisioningNetworkVlanID addresses: - ip_netmask: get_param: OcProvisioningIpSubnet
$network_config: - type: vlan vlan_id: get_param: OcProvisioningNetworkVlanID addresses: - ip_netmask: get_param: OcProvisioningIpSubnet
复制
roles_data.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml .
(undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml .
编辑新的
roles_data.yaml
,并为控制器添加新网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow networks: ... OcProvisioning: subnet: oc_provisioning_subnet
networks: ... OcProvisioning: subnet: oc_provisioning_subnet
在 deploy 命令中包含新的
network_data.yaml
和roles_data.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -n /home/stack/network_data.yaml \ -r /home/stack/roles_data.yaml \
-n /home/stack/network_data.yaml \ -r /home/stack/roles_data.yaml \
3.3. 在 overcloud 中启用裸机内省
要启用裸机内省,请在部署命令中包括以下两个文件:
- 对于使用
OVN
的部署 -
ironic-overcloud.yaml
-
ironic-inspector.yaml
-
spine-leaf 路由部署可能需要在 ToR 路由器上进行 DHCP 转发,或者每个子网的 DHCP 代理。元数据服务必须具有到元数据服务器的静态路由。OVN 默认在裸机节点上不提供此路由。
- 对于使用
OVS
的部署 -
ironic.yaml
-
ironic-inspector.yaml
-
您可以在 /usr/share/openstack-tripleo-heat-templates/environments/services
目录中找到这些文件。使用以下示例包含与您的环境对应的 ironic inspector 的配置详情:
parameter_defaults: IronicInspectorSubnets: - ip_range: <ip_range> IPAImageURLs: '["http://<ip_address>:<port>/agent.kernel", "http://<ip_address>:<port>/agent.ramdisk"]' IronicInspectorInterface: 'br-baremetal'
parameter_defaults:
IronicInspectorSubnets:
- ip_range: <ip_range>
IPAImageURLs: '["http://<ip_address>:<port>/agent.kernel", "http://<ip_address>:<port>/agent.ramdisk"]'
IronicInspectorInterface: 'br-baremetal'
IronicInspectorSubnets
这个参数可以包含多个范围,并可用于 spine 和 leaf。
IPAImageURLs
这个参数包含有关 IPA 内核和 ramdisk 的详细信息。在大多数情况下,您可以使用 undercloud 中使用的相同镜像。如果省略此参数,则必须在每个控制器中包含 alternatives。
IronicInspectorInterface
使用这个参数指定裸机网络接口。
如果您使用可组合 Ironic 或 IronicConductor 角色,您必须将 IronicInspector
服务包含在您的角色文件中。
ServicesDefault: OS::TripleO::Services::IronicInspector
ServicesDefault:
OS::TripleO::Services::IronicInspector
3.4. 部署 overcloud
要启用裸机置备服务,请在部署或重新部署 overcloud 时包括带有 -e
选项的 ironic 环境文件,以及剩余的 overcloud 配置。使用以下示例作为指南:
openstack overcloud deploy \ --templates \ -e ~/templates/node-info.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e ~/templates/network-environment.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml \ -e ~/templates/ironic.yaml \
$ openstack overcloud deploy \
--templates \
-e ~/templates/node-info.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
-e ~/templates/network-environment.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml \
-e ~/templates/ironic.yaml \
其他资源
- 有关部署 overcloud 的更多信息,请参阅 Director 安装和使用 指南中的 部署命令选项 和更改环境文件。https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.1/html-single/director_installation_and_usage/#ref_including-environment-files-in-an-overcloud-deployment_deploying-ipv4-overcloud
- 有关通过 IPv6 部署 overcloud 的更多信息,请参阅 Overcloud 的 IPv6 网络指南中的 设置您的环境 并创建 overcloud。
3.5. 测试裸机置备服务
您可以使用 OpenStack Integration Test Suite 来验证 Red Hat OpenStack 部署。如需更多信息,请参阅 OpenStack Integration Test Suite 指南。
裸机置备服务的其他验证方法:
配置 shell 以以管理用户身份访问身份:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
检查
nova-compute
服务是否在 Controller 节点上运行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack compute service list -c Binary -c Host -c Status
$ openstack compute service list -c Binary -c Host -c Status
如果您更改了默认的 ironic 驱动程序,请确保启用了所需的驱动程序:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal driver list
$ openstack baremetal driver list
确保列出了 ironic 端点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack catalog list
$ openstack catalog list
第 4 章 使用裸机置备服务部署 IPv6 overcloud
如果使用 OVN,则裸机置备服务(ironic)仅支持 ironic-overcloud.yaml
文件中的 neutron DHCP 代理。OVN 上内置的 DHCP 服务器无法置备裸机节点,或为置备网络提供 DHCP。Chainbooting iPXE 需要标记(dnsmasq 中的-dhcp-match),在 OVN DHCP 服务器中不支持它。
以下流程包括特定于裸机置备服务(ironic)的部署步骤。有关使用 director 部署 overcloud 的更多信息,请参阅 Director 安装和使用 指南。
前提条件
- 您的环境满足最低要求。更多信息请参阅 第 2 章 裸机置备先决条件。
4.1. 创建裸机模板
使用环境文件,通过启用裸机恢复调配服务部署 overcloud。您可以使用位于 /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml
的 director 节点上的示例模板。
前提条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 指南。
完成模板
您可以在提供的模板或附加 yaml 文件中指定额外的配置,如 ~/templates/ironic.yaml
。
对于带有裸机和虚拟实例的混合部署,您必须将
AggregateInstanceExtraSpecsFilter
添加到NovaSchedulerDefaultFilters
列表中。如果您没有在任何位置设置NovaSchedulerDefaultFilters
,您可以在ironic.yaml
中这样做。例如,请参阅 示例模板。注意如果使用 SR-IOV,则
tripleo-heat-templates/environments/neutron-sriov.yaml
中已经设置了NovaSchedulerDefaultFilters
。将AggregateInstanceExtraSpecsFilter
附加到此列表中。-
清理类型,在部署之前和间由
Ironic 清理DiskErase
进行设置。默认情况下,部署/ironic/ironic-conductor-container-puppet.yaml
设置为full
。您可以将其设置为元数据
来显著加快进程速度,因为它只清理分区表。但是,由于在多租户环境中部署的安全性较低,因此仅在可信租户环境中完成此操作。 -
您可以使用
IronicEnabledHardwareTypes
参数添加驱动程序。默认情况下启用ipmi
和redfish
。
有关配置参数的完整列表,请参阅 Overcloud 参数 指南中的 裸机。
4.1.1. 模板示例
以下是模板文件示例。此文件可能无法满足环境的要求。在使用此示例前,请确保不会影响环境中任何现有配置。这个示例包含以下配置:
-
AggregateInstanceExtraSpecsFilter
允许虚拟和裸机实例进行混合部署。 - 磁盘清理在部署前和之间仅由分区表(元数据)执行一次。
~/templates/ironic.yaml
parameter_defaults: NovaSchedulerDefaultFilters: - AggregateInstanceExtraSpecsFilter - AvailabilityZoneFilter - ComputeFilter - ComputeCapabilitiesFilter - ImagePropertiesFilter IronicCleaningDiskErase: metadata
parameter_defaults:
NovaSchedulerDefaultFilters:
- AggregateInstanceExtraSpecsFilter
- AvailabilityZoneFilter
- ComputeFilter
- ComputeCapabilitiesFilter
- ImagePropertiesFilter
IronicCleaningDiskErase: metadata
4.2. 为使用 IPv6 的裸机置备配置 undercloud
如果有使用 IPv6 的节点和基础架构,您可以将 undercloud 和置备网络配置为使用 IPv6 而不是 IPv4,以便 director 能够在 IPv6 节点上置备和部署 Red Hat OpenStack Platform。但是,有一些注意事项:
- 双堆栈 IPv4/6 不可用。
- Tempest 验证可能无法正确执行。
- 在升级过程中,无法进行 IPv4 到 IPv6 的迁移。
修改 undercloud.conf
文件,以便在 Red Hat OpenStack Platform 中启用 IPv6 置备。
先决条件
- undercloud 上的 IPv6 地址。如需更多信息,请参阅 Overcloud 的 IPv6 网络指南中的在 undercloud 上配置 IPv6 地址。
步骤
-
复制示例
undercloud.conf
文件,或修改现有的undercloud.conf
文件。 在
undercloud.conf
文件中设置以下参数值:-
如果您的 NIC 支持 Red Hat OpenStack Platform 的有状态 DHCPv 6,则将
ipv6_address_mode
设置为dhcpv6-stateless
或dhcpv6-stateful
。 -
如果您不希望 undercloud 在 provisioning 网络上创建路由器,请将
enable_routed_networks
设置为true
。在这种情况下,数据中心路由器必须提供路由器公告。否则,将此值设置为false
。 -
将
local_ip
设置为 undercloud 的 IPv6 地址。 -
将 IPv6 寻址用于 undercloud 接口参数
undercloud_public_host
和undercloud_admin_host
。 当您使用有状态寻址模型、固件、链加载器和操作系统时,可能会使用不同的算法生成 DHCP 服务器跟踪的 ID。DHCPv6 不会按 MAC 跟踪地址,如果来自请求者的标识符值,则不会提供相同的地址,但 MAC 地址保持不变。如果要使用有状态 DHCPv6,请使用
ironic_enabled_network_interfaces
参数来指定 neutron 接口。您还可以使用ironic_default_network_interface
参数,将 neutron 接口设置为裸机节点的默认网络接口:-
ironic_enabled_network_interfaces = neutron,flat
-
ironic_default_network_interface = neutron
-
在
[ctlplane-subnet]
部分,在以下参数中使用 IPv6 寻址:-
cidr
-
dhcp_start
-
dhcp_end
-
gateway
-
inspection_iprange
-
在
[ctlplane-subnet]
部分,在dns_nameservers
参数中为子网设置 IPv6 名称服务器。Copy to Clipboard Copied! Toggle word wrap Toggle overflow [DEFAULT] ipv6_address_mode = dhcpv6-stateless enable_routed_networks: false local_ip = <ipv6-address> ironic_enabled_network_interfaces = neutron,flat ironic_default_network_interface = neutron undercloud_admin_host = <ipv6-address> undercloud_public_host = <ipv6-address> [ctlplane-subnet] cidr = <ipv6-address>::<ipv6-mask> dhcp_start = <ipv6-address> dhcp_end = <ipv6-address> dns_nameservers = <ipv6-dns> gateway = <ipv6-address> inspection_iprange = <ipv6-address>,<ipv6-address>
[DEFAULT] ipv6_address_mode = dhcpv6-stateless enable_routed_networks: false local_ip = <ipv6-address> ironic_enabled_network_interfaces = neutron,flat ironic_default_network_interface = neutron undercloud_admin_host = <ipv6-address> undercloud_public_host = <ipv6-address> [ctlplane-subnet] cidr = <ipv6-address>::<ipv6-mask> dhcp_start = <ipv6-address> dhcp_end = <ipv6-address> dns_nameservers = <ipv6-dns> gateway = <ipv6-address> inspection_iprange = <ipv6-address>,<ipv6-address>
-
如果您的 NIC 支持 Red Hat OpenStack Platform 的有状态 DHCPv 6,则将
4.3. 网络配置
如果使用默认的扁平裸机网络,您必须为裸机置备服务(ironic)创建网桥 br-baremetal
。您可以在额外模板中指定此网桥:
~/templates/network-environment.yaml
parameter_defaults: NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal NeutronFlatNetworks: datacentre,baremetal
parameter_defaults:
NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
NeutronFlatNetworks: datacentre,baremetal
您可以在控制器的 provisioning 网络(control plane)中配置此桥接,以便可以重复使用这个网络作为裸机网络,或添加专用网络。配置要求相同,但裸机网络无法被 VLAN 标记,因为它用于置备。
~/templates/nic-configs/controller.yaml
network_config: - type: ovs_bridge name: br-baremetal use_dhcp: false members: - type: interface name: eth1
network_config:
-
type: ovs_bridge
name: br-baremetal
use_dhcp: false
members:
-
type: interface
name: eth1
overcloud 中的裸机置备服务是为可信租户环境设计的,因为裸机节点可以直接访问 Red Hat OpenStack Platform (RHOSP)安装的 control plane 网络。
4.3.1. 配置自定义 IPv6 置备网络
创建自定义 IPv6 置备网络,以在 IPv6 上置备和部署 overcloud。
流程
配置 shell 以以管理用户身份访问身份:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/stackrc
$ source ~/stackrc
复制
network_data.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml .
$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml .
编辑新的
network_data.yaml
文件并为 overcloud 置备添加新网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow custom network for IPv6 overcloud provisioning
# 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_MASK' ipv6_allocation_pools: [{'start': '$IPV6_START_ADDRESS', 'end': '$IPV6_END_ADDRESS'}] gateway_ipv6: '$IPV6_GW_ADDRESS'
-
将
$IPV6_ADDRESS
替换为 IPv6 子网的 IPv6 地址。 -
将
$IPV6_MASK
替换为 IPv6 子网的 IPv6 网络掩码。 -
将
$IPV6_START_ADDRESS
和$IPV6_END_ADDRESS
替换为您要用于地址分配的 IPv6 范围。 -
将
$IPV6_GW_ADDRESS
替换为网关的 IPv6 地址。
-
将
创建新文件
network-environment.yaml
并为 provisioning 网络定义 IPv6 设置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow touch /home/stack/network-environment.yaml`
$ touch /home/stack/network-environment.yaml`
重新映射 ironic 网络以使用新的 IPv6 置备网络:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceNetMap: IronicApiNetwork: oc_provisioning_ipv6 IronicNetwork: oc_provisioning_ipv6
ServiceNetMap: IronicApiNetwork: oc_provisioning_ipv6 IronicNetwork: oc_provisioning_ipv6
将
IronicIpVersion
参数设置为6
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: IronicIpVersion: 6
parameter_defaults: IronicIpVersion: 6
将
RabbitIPv6
、MysqlIPv6
和RedisIPv6
参数设置为True
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: RabbitIPv6: True MysqlIPv6: True RedisIPv6: True
parameter_defaults: RabbitIPv6: True MysqlIPv6: True RedisIPv6: True
在
nic-configs/controller.yaml
文件中添加接口和必要参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow $network_config: - type: vlan vlan_id: get_param: OcProvisioningIPv6NetworkVlanID addresses: - ip_netmask: get_param: OcProvisioningIPv6IpSubnet
$network_config: - type: vlan vlan_id: get_param: OcProvisioningIPv6NetworkVlanID addresses: - ip_netmask: get_param: OcProvisioningIPv6IpSubnet
复制
roles_data.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml .
(undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml .
编辑新的
roles_data.yaml
,并为控制器添加新网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow networks: ... - OcProvisioningIPv6
networks: ... - OcProvisioningIPv6
部署 overcloud 时,使用 -n
和 -r
选项在部署命令中包括新的 network_data.yaml
和 roles_data
文件,并使用 .yaml
-e
选项:
sudo openstack overcloud deploy --templates \ ...
$ sudo openstack overcloud deploy --templates \
...
-n /home/stack/network_data.yaml \
-r /home/stack/roles_data.yaml \
-e /home/stack/network-environment.yaml
...
有关 IPv6 网络配置的更多信息,请参阅 Overcloud 的 IPv6 网络指南中的配置网络。https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.1/html-single/ipv6_networking_for_the_overcloud/index#configuring_the_network
4.4. 在 overcloud 中启用裸机内省
要启用裸机内省,请在部署命令中包括以下两个文件:
- 对于使用
OVN
的部署 -
ironic-overcloud.yaml
-
ironic-inspector.yaml
-
spine-leaf 路由部署可能需要在 ToR 路由器上进行 DHCP 转发,或者每个子网的 DHCP 代理。元数据服务必须具有到元数据服务器的静态路由。OVN 默认在裸机节点上不提供此路由。
- 对于使用
OVS
的部署 -
ironic.yaml
-
ironic-inspector.yaml
-
您可以在 /usr/share/openstack-tripleo-heat-templates/environments/services
目录中找到这些文件。使用以下示例包含与您的环境对应的 ironic inspector 的配置详情:
parameter_defaults: IronicInspectorSubnets: - ip_range: <ip_range> IPAImageURLs: '["http://<ip_address>:<port>/agent.kernel", "http://<ip_address>:<port>/agent.ramdisk"]' IronicInspectorInterface: 'br-baremetal'
parameter_defaults:
IronicInspectorSubnets:
- ip_range: <ip_range>
IPAImageURLs: '["http://<ip_address>:<port>/agent.kernel", "http://<ip_address>:<port>/agent.ramdisk"]'
IronicInspectorInterface: 'br-baremetal'
IronicInspectorSubnets
这个参数可以包含多个范围,并可用于 spine 和 leaf。
IPAImageURLs
这个参数包含有关 IPA 内核和 ramdisk 的详细信息。在大多数情况下,您可以使用 undercloud 中使用的相同镜像。如果省略此参数,则必须在每个控制器中包含 alternatives。
IronicInspectorInterface
使用这个参数指定裸机网络接口。
如果您使用可组合 Ironic 或 IronicConductor 角色,您必须将 IronicInspector
服务包含在您的角色文件中。
ServicesDefault: OS::TripleO::Services::IronicInspector
ServicesDefault:
OS::TripleO::Services::IronicInspector
4.5. 部署 overcloud
要启用裸机置备服务,请在部署或重新部署 overcloud 时包括带有 -e
选项的 ironic 环境文件,以及剩余的 overcloud 配置。使用以下示例作为指南:
openstack overcloud deploy \ --templates \ -e ~/templates/node-info.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e ~/templates/network-environment.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml \ -e ~/templates/ironic.yaml \
$ openstack overcloud deploy \
--templates \
-e ~/templates/node-info.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
-e ~/templates/network-environment.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml \
-e ~/templates/ironic.yaml \
其他资源
- 有关部署 overcloud 的更多信息,请参阅 Director 安装和使用 指南中的 部署命令选项 和更改环境文件。https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.1/html-single/director_installation_and_usage/#ref_including-environment-files-in-an-overcloud-deployment_deploying-ipv6-overcloud
- 有关通过 IPv6 部署 overcloud 的更多信息,请参阅 Overcloud 的 IPv6 网络指南中的 设置您的环境 并创建 overcloud。
4.6. 测试裸机置备服务
您可以使用 OpenStack Integration Test Suite 来验证 Red Hat OpenStack 部署。如需更多信息,请参阅 OpenStack Integration Test Suite 指南。
裸机置备服务的其他验证方法:
配置 shell 以以管理用户身份访问身份:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
检查
nova-compute
服务是否在 Controller 节点上运行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack compute service list -c Binary -c Host -c Status
$ openstack compute service list -c Binary -c Host -c Status
如果您更改了默认的 ironic 驱动程序,请确保启用了所需的驱动程序:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal driver list
$ openstack baremetal driver list
确保列出了 ironic 端点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack catalog list
$ openstack catalog list
第 5 章 部署后配置裸机置备服务
使用裸机置备服务(ironic)部署 overcloud 后,您可能需要完成一些额外的配置,以便为裸机工作负载准备您的环境:
- 配置网络.
- 配置节点清理。
- 为裸机节点创建裸机类别和镜像。
- 配置部署接口。
- 配置虚拟介质启动。
- 分隔虚拟机和物理机调配。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
5.1. 配置 OpenStack 网络
配置 OpenStack 网络,以便与用于 DHCP、PXE 引导和其他要求的裸机恢复调配服务通信。您可以通过两种方式配置裸机网络:
- 为 Ironic Conductor 服务使用扁平裸机网络。此网络必须路由到 control plane 网络上的 Ironic 服务。
- 使用自定义可组合网络在 overcloud 中实施 Ironic 服务。
按照本节中的步骤为单个平面网络配置 OpenStack 网络,以便在裸机上进行置备,或者配置不依赖于未使用隔离网络或扁平网络的新可组合网络。配置使用 ML2 插件和 Open vSwitch 代理。
5.1.1. 配置 OpenStack 网络,以在扁平裸机网络中与裸机部署服务通信
在托管 OpenStack 网络服务的服务器上,以 root
用户身份执行以下步骤。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
配置 shell 以以管理用户身份访问身份:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
创建扁平网络来置备裸机实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack network create \ --provider-network-type flat \ --provider-physical-network baremetal \ --share NETWORK_NAME
$ openstack network create \ --provider-network-type flat \ --provider-physical-network baremetal \ --share NETWORK_NAME
用这个网络的名称替换 NETWORK_NAME。您实施虚拟网络的物理网络名称(本例中为
baremetal
)已在~/templates/network-environment.yaml
文件中设置,参数NeutronBridgeMappings
。在扁平网络中创建子网:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 替换为您在上一步中创建的置备网络的名称。
- 使用子网所代表的 IP 地址块的无类别域间路由(CIDR)表示替换 NETWORK_CIDR。从 START_IP 开始并以 END_IP 开头的 IP 地址块,且以 END_IP 结尾的 IP 地址块必须是 NETWORK_CIDR 指定的 IP 地址块。
- 将 GATEWAY_IP 替换为作为新子网的网关的路由器接口的 IP 地址或主机名。此地址必须位于 NETWORK_CIDR 指定的 IP 地址块内,但除以 START_IP 开头的 IP 地址块之外,范围从 START_IP 开始,并以 END_IP 结尾。
- 将 START_IP 替换为 IP 地址,该地址表示要从中分配浮动 IP 地址的新子网中 IP 地址起点。
- 将 END_IP 替换为 IP 地址,该地址表示要从中分配浮动 IP 地址的新子网中 IP 地址的范围。
为网络和子网创建路由器,以确保 OpenStack 网络服务提供元数据请求:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack router create ROUTER_NAME
$ openstack router create ROUTER_NAME
将
ROUTER_NAME
替换为路由器的名称。将子网附加到新路由器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack router add subnet ROUTER_NAME BAREMETAL_SUBNET
$ openstack router add subnet ROUTER_NAME BAREMETAL_SUBNET
将 ROUTER_NAME 替换为路由器的名称,将 BAREMETAL_SUBNET 替换为之前创建的子网的 ID 或名称。这允许提供来自
cloud-init
的元数据请求,并配置了节点。
5.1.2. 配置 OpenStack 网络,以在自定义可组合裸机网络中与裸机服务通信
在托管 OpenStack 网络服务的服务器上,以 root
用户身份执行以下步骤。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
创建一个带有 VlanID 的 vlan 网络,它与您在部署期间创建的
OcProvisioning
网络匹配。指出新网络置备
以匹配清理网络的默认名称。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack network create \ --share \ --provider-network-type vlan \ --provider-physical-network datacentre \ --provider-segment 205 provisioning
(overcloud) [stack@host01 ~]$ openstack network create \ --share \ --provider-network-type vlan \ --provider-physical-network datacentre \ --provider-segment 205 provisioning
如果没有
置备 overcloud 网络的名称
,登录到控制器并运行以下命令来重命名和重启网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow heat-admin@overcloud-controller-0 ~]$ sudo vi /var/lib/config-data/puppet-generated/ironic/etc/ironic/ironic.conf
heat-admin@overcloud-controller-0 ~]$ sudo vi /var/lib/config-data/puppet-generated/ironic/etc/ironic/ironic.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow heat-admin@overcloud-controller-0 ~]$ sudo podman restart ironic_conductor
heat-admin@overcloud-controller-0 ~]$ sudo podman restart ironic_conductor
5.2. 配置节点清理
默认情况下,Bare Metal Provisioning 服务使用名为 provisioning
的网络来用于节点清理。但是,OpenStack 网络中的网络名称不是唯一的,因此租户可能会创建具有相同名称的网络,这会导致与裸机置备服务冲突。要避免冲突,请使用网络 UUID。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
要配置节点清理,在托管裸机置备服务的控制器上提供提供商网络 UUID:
~/templates/ironic.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: IronicCleaningNetwork: <UUID>
parameter_defaults: IronicCleaningNetwork: <UUID>
将
<
;UUID> 替换为您在前面的步骤中创建的裸机网络的 UUID。您可以使用
openstack network show
命令找到 UUID:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack network show NETWORK_NAME -f value -c id
openstack network show NETWORK_NAME -f value -c id
注意您必须在初始 overcloud 部署后执行此配置,因为网络的 UUID 事先不可用。
-
若要应用这些更改,请使用
openstack overcloud deploy
重新部署 overcloud。有关部署命令的更多信息,请参阅 第 3.4 节 “部署 overcloud”。
5.2.1. 手动清理节点
要手动启动节点清理,节点必须处于 manageable
状态。
节点清理有两种模式:
仅元数据清理 - 从给定节点上的所有磁盘中删除分区。这是一个更快速的整个周期,但的安全性会降低,因为它只擦除分区表。仅在可信租户环境中使用此模式。
full clean - 使用 ATA secure erase 或shredding 从所有磁盘中删除所有数据。这可能要花费几个小时才能完成。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
启动 元数据
清理:
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_metadata"}]'
启动 完整
清理:
openstack baremetal node clean _UUID_ \ --clean-steps '[{"interface": "deploy", "step": "erase_devices"}]'
$ openstack baremetal node clean _UUID_ \
--clean-steps '[{"interface": "deploy", "step": "erase_devices"}]'
使用您要 清理的节点的 UUID 替换 UUID。
成功清理后,节点状态返回到 manageable
。如果状态 清理失败
,请检查 last_error
字段是否有故障原因。
5.3. 创建裸机类别和资源类
您必须创建 flavor 和资源类,用于为特定工作负载标记裸机节点。
流程
提供 overcloud 凭据文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
为裸机节点创建新实例类别:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack flavor create --id auto \ --ram <ram_size_mb> --disk <disk_size_gb> \ --vcpus <no_vcpus> baremetal
(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 数量。注意这些属性不可用于调度实例。但是,计算调度程序使用磁盘大小来确定根分区大小。
-
将
检索节点列表来识别它们的 UUID:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node list
(overcloud)$ openstack baremetal node list
使用自定义裸机资源类标记每个裸机节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set \ --resource-class baremetal.<CUSTOM> <node>
(overcloud)$ openstack baremetal node set \ --resource-class baremetal.<CUSTOM> <node>
-
将
<CUSTOM
> 替换为标识资源类用途的字符串。例如,设置为GPU
以创建一个自定义 GPU 资源类,您可以使用这些类标记您要为 GPU 工作负载指定的裸机节点。 -
将
<node
> 替换为裸机节点的 ID。
-
将
将裸机节点的新实例类别与自定义资源类关联:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack flavor set \ --property resources:CUSTOM_BAREMETAL_<CUSTOM>=1 \ baremetal
(overcloud)$ openstack flavor set \ --property resources:CUSTOM_BAREMETAL_<CUSTOM>=1 \ baremetal
要确定与 Bare Metal 服务节点的资源类型对应的自定义资源类的名称,请将资源类转换为大写,将每个 punctuation 标记替换为下划线,并使用
CUSTOM_
前缀。注意类别只能请求一个裸机资源类实例。
设置以下类别属性,以防止计算调度程序使用裸机类别属性来调度实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack flavor set \ --property resources:VCPU=0 \ --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 baremetal
(overcloud)$ openstack flavor set \ --property resources:VCPU=0 \ --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 baremetal
验证新类别是否具有正确的值:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack flavor list
(overcloud)$ openstack flavor list
5.4. 创建裸机镜像
包括裸机置备服务(ironic)的 overcloud 需要两组镜像。在部署过程中,裸机置备服务从部署镜像引导裸机节点,并将用户镜像复制到节点上。
- 部署镜像
-
裸机恢复调配服务使用部署镜像引导裸机节点,并将用户镜像复制到裸机节点上。部署镜像
由内核
镜像和ramdisk
镜像组成。 - 用户镜像
用户镜像是您部署到裸机节点中的镜像。用户镜像还包含
内核
镜像和ramdisk
镜像,但也有用户镜像包含主
镜像。主镜像是根分区,也可以是整个磁盘镜像。- 全磁盘镜像 是一个包含分区表和引导装载程序的镜像。裸机置备服务不控制后续使用完整磁盘镜像部署的节点重新引导,节点支持 localboot。
- root 分区镜像只包含操作系统的根分区。如果使用根分区,在将镜像加载到镜像服务后,您可以在节点属性中将部署镜像设置为节点引导镜像。后续重启节点使用 netboot 来拉取用户镜像。
本节中的示例使用 root 分区镜像置备裸机节点。
5.4.1. 准备部署镜像
您不必创建部署镜像,因为它已经在 undercloud 部署 overcloud 时创建。部署镜像由两个镜像(内核镜像和 ramdisk 镜像)组成:
/tftpboot/agent.kernel /tftpboot/agent.ramdisk
/tftpboot/agent.kernel
/tftpboot/agent.ramdisk
这些镜像通常位于主目录中,除非您被删除或将其解除在其他位置。如果它们不在主目录中,并且您仍然安装了 rhosp-director-images-ipa
软件包,则这些镜像位于 /usr/share/rhosp-director-images/ironic-python-agent*.tar
文件中。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
提取镜像并将其上传到镜像服务:
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
$ 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
5.4.2. 准备用户镜像
您需要的最终镜像是您将部署到裸机节点上的用户镜像。用户镜像还具有内核和 ramdisk,以及主镜像。要下载并安装这些软件包,您必须首先配置完整磁盘镜像环境变量以满足您的要求。
5.4.2.1. 磁盘镜像环境变量
在构建磁盘镜像的过程中,director 需要基础镜像和注册详情,以获取新 overcloud 镜像的软件包。使用以下 Linux 环境变量定义这些属性。
镜像构建过程会利用红帽订阅暂时注册镜像,并在完成构建后取消注册系统。
要构建磁盘镜像,请根据您的环境和要求来设置 Linux 环境变量:
- DIB_LOCAL_IMAGE
- 设置您要用作完整磁盘镜像基础的本地镜像。
- REG_ACTIVATION_KEY
- 使用激活码代替登录详细信息作为注册过程的一部分。
- REG_AUTO_ATTACH
- 定义是否自动附加最兼容的订阅。
- REG_BASE_URL
-
包含镜像软件包的内容交付服务器的基本 URL。默认的客户门户网站订阅管理(Subscription Management)会使用
https://cdn.redhat.com
。如果您使用 Red Hat Satellite 6 服务器,则将此参数设置为 Satellite 服务器的基本 URL。 - REG_ENVIRONMENT
- 注册到机构的内部环境中。
- REG_METHOD
-
设置注册方法。使用
portal
可将系统注册到红帽客户门户网站。使用satellite
可将系统注册到红帽 Satellite 6。 - REG_ORG
- 您想注册镜像的组织。
- REG_POOL_ID
- 产品订阅信息的池 ID。
- REG_PASSWORD
- 为注册镜像的用户帐户设置密码。
- REG_RELEASE
-
设置 Red Hat Enterprise Linux 次要发行版本。您必须将其与
REG_AUTO_ATTACH
或REG_POOL_ID
环境变量结合使用。 - REG_REPOS
-
包括以逗号分隔的软件仓库名称的字符串。这个字符串中的各个软件仓库会通过
subscription-manager
启用。 - REG_SAT_URL
- 注册 overcloud 节点的 Satellite 服务器的基本 URL。此参数需要使用 Satellite 的 HTTP URL 而不是 HTTPS URL。例如,使用 http://satellite.example.com 而不使用 https://satellite.example.com。
- REG_SERVER_URL
-
设置要使用的订阅服务的主机名。默认主机名是红帽客户门户网站(其网址为
subscription.rhn.redhat.com
)。如果您使用 Red Hat Satellite 6 服务器,则将此参数设置为 Satellite 服务器的主机名。 - REG_USER
- 为注册镜像的帐户设置用户名。
5.4.3. 安装用户镜像
配置用户镜像,然后将镜像上传到镜像服务(glance)。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
- 从客户门户网站下载 Red Hat Enterprise Linux KVM 客户机镜像。
将
DIB_LOCAL_IMAGE
定义为下载的镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow export DIB_LOCAL_IMAGE=rhel-8.0-x86_64-kvm.qcow2
$ export DIB_LOCAL_IMAGE=rhel-8.0-x86_64-kvm.qcow2
设置您的注册信息。如果使用红帽客户门户网站,您必须配置以下信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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)
$ 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,您必须配置以下信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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>
$ 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 定义为本地存储库配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export DIB_YUM_REPO_CONF=<path-to-local-repository-config-file>
$ export DIB_YUM_REPO_CONF=<path-to-local-repository-config-file>
使用
diskimage-builder
工具创建用户镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow disk-image-create rhel8 baremetal -o rhel-image
$ disk-image-create rhel8 baremetal -o rhel-image
此命令将内核提取为
rhel-image.vmlinuz
和初始 ramdisk 作为rhel-image.initrd
。将镜像上传到镜像服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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
5.5. 配置部署接口
当您置备裸机节点时,overcloud 上的裸机置备服务(ironic)会将基础操作系统镜像写入裸机节点上的磁盘。默认情况下,部署接口将镜像挂载到 iSCSI 挂载上,然后将镜像复制到每个节点上的磁盘。或者,您可以使用直接部署,将 HTTP 位置的磁盘镜像直接写入裸机节点上的磁盘。
部署接口在置备过程中具有重要角色。部署接口编配部署,并定义将镜像传送到目标磁盘的机制。
前提条件
-
依赖在运行
ironic-conductor
的裸机服务节点上配置的软件包。 - 将 OpenStack Compute (nova)配置为使用裸机服务端点。
- 为可用的硬件创建类别,nova 必须从正确的类别引导新节点。
镜像必须在镜像服务(glance)中提供:
- bm-deploy-kernel
- bm-deploy-ramdisk
- user-image
- user-image-vmlinuz
- user-image-initrd
- 用于注册 Ironic API 服务的硬件。
工作流
使用以下示例工作流来了解标准部署流程。根据您使用的 ironic 驱动程序接口,一些步骤可能会有所不同:
- Nova 调度程序从 Nova API 接收引导实例请求。
- Nova 调度程序标识相关的虚拟机监控程序,并确定目标物理节点。
- Nova 计算管理器将声明所选虚拟机监控程序的资源。
- Nova 计算管理器根据 nova 引导请求指定的网络接口在网络服务中创建未绑定租户虚拟接口(VIFs)。
Nova 计算从 Nova 计算 virt 层调用
driver.spawn
,以创建含有所有必要信息的 generate 任务。在生成过程中,virt 驱动程序完成以下步骤。- 使用部署镜像、实例 UUID、请求的功能和类别属性的信息,更新目标 ironic 节点。
- 调用 ironic API,以验证目标节点的电源和部署接口。
- 将 VIFs 附加到节点。每个 neutron 端口可以附加到任何 ironic 端口或组。端口组的优先级高于端口。
- 生成配置驱动器。
- Nova ironic virt 驱动程序使用 Ironic API 对裸机节点的服务,使用 Ironic API 部署请求。
- 虚拟接口插入,Neutron API 会更新 DHCP 来配置 PXE/TFTP 选项。
- ironic 节点引导接口准备(i) PXE 配置,并缓存部署内核和 ramdisk。
- ironic 节点管理接口发出命令,以启用节点的网络引导。
- 如果需要,ironic 节点部署接口会缓存实例镜像、内核和 ramdisk。
- ironic 节点电源接口指示节点电源。
- 节点启动部署 ramdisk。
- 使用 iSCSI 部署时,编排器将 iSCSI 上的镜像复制到物理节点。使用直接部署,部署 ramdisk 从临时 URL 下载镜像。这个 URL 必须是兼容 Swift API 的对象存储或 HTTP URL。
- 节点引导接口会切换 PXE 配置以引用实例镜像,并指示 ramdisk 代理软关闭节点。如果软电源失败,则裸机节点使用 IPMI/BMC 关闭。
- 部署接口指示网络接口删除所有调配端口,将租户端口绑定到节点,并打开节点电源。
新裸机节点的置备状态现在为 。
5.5.1. 在 overcloud 上配置直接部署接口
iSCSI 部署接口是默认部署接口。但是,您可以启用直接部署接口,将 HTTP 位置的镜像下载到目标磁盘。
您的 overcloud 节点内存 tmpfs
必须至少有 8GB RAM。
流程
创建或修改自定义环境文件
/home/stack/templates/direct_deploy.yaml
,并指定IronicEnabledDeployInterfaces
和IronicDefaultDeployInterface
参数。Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: IronicEnabledDeployInterfaces: direct IronicDefaultDeployInterface: direct
parameter_defaults: IronicEnabledDeployInterfaces: direct IronicDefaultDeployInterface: direct
如果您使用 iscsi 注册节点,请在
IronicEnabledDeployInterfaces
参数中保留iscsi
值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: IronicEnabledDeployInterfaces: direct,iscsi IronicDefaultDeployInterface: direct
parameter_defaults: IronicEnabledDeployInterfaces: direct,iscsi IronicDefaultDeployInterface: direct
默认情况下,每个节点上的 Bare Metal Provisioning 服务(ironic)代理都包含通过 HTTP 链接存储在对象存储服务(swift)中的镜像。或者,ironic 可以通过
ironic-conductor
HTTP 服务器将此镜像直接流传输到节点。要更改提供镜像的服务,请在/home/stack/templates/direct_deploy.yaml
文件中将IronicImageDownloadSource
设置为http
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: IronicEnabledDeployInterfaces: direct IronicDefaultDeployInterface: direct IronicImageDownloadSource: http
parameter_defaults: IronicEnabledDeployInterfaces: direct IronicDefaultDeployInterface: direct IronicImageDownloadSource: http
在您的 overcloud 部署中包含自定义环境:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack overcloud deploy \ --templates \ ...
$ openstack overcloud deploy \ --templates \ ... -e /usr/share/openstack-tripleo-heat-templates/environments/services/ironic.yaml \ -e /home/stack/templates/direct_deploy.yaml \ ...
等待部署完成。
如果您没有指定 IronicDefaultDeployInterface
或想要使用不同的部署接口,请在创建或更新节点时指定部署接口:
openstack baremetal node create --driver ipmi --deploy-interface direct openstack baremetal node set <NODE> --deploy-interface direct
$ openstack baremetal node create --driver ipmi --deploy-interface direct
$ openstack baremetal node set <NODE> --deploy-interface direct
5.6. 将物理计算机添加为裸机节点
注册裸机节点的方法有两种:
- 使用节点详情准备清单文件,将该文件导入到裸机置备服务,并使节点可用。
-
将物理计算机注册为裸机节点,然后手动添加其硬件详情并为其以太网 MAC 地址创建端口。您可以在具有
overcloudrc
文件的任何节点上执行这些步骤。
注册物理计算机后,计算不会立即通知新资源,因为计算资源跟踪程序定期同步。您可以在下一次定期任务运行后查看更改。您可以使用 /etc/nova/nova.conf
文件中的 scheduler_driver_task_period
更新定期任务的频率。默认周期为 60 秒。
5.6.1. 使用清单文件注册裸机节点
使用节点详情准备清单文件,将该文件导入到裸机置备服务(ironic)中,并使节点可用。
前提条件
- 包括裸机置备服务的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
创建包含节点详情的清单文件
overcloud-nodes.yaml
。您可以使用一个文件注册多个节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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>
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)。只有在机器有多个磁盘时才需要。 -
将
<
;serial> 替换为您要用于部署的磁盘的序列号。 -
将
<mac_address
> 替换为用于 PXE 引导的 NIC 的 MAC 地址。
-
将
将 shell 配置为以管理用户身份使用身份:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
将清单文件导入到裸机置备服务中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal create overcloud-nodes.yaml
$ openstack baremetal create overcloud-nodes.yaml
节点现在处于
注册
状态。指定部署内核并在每个节点中部署 ramdisk:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set <node> \ --driver-info deploy_kernel=<kernel_file> \ --driver-info deploy_ramdisk=<initramfs_file>
$ 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
。
-
将
可选:指定每个节点的 IPMI 密码套件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set <node> \ --driver-info ipmi_cipher_suite=<version>
$ openstack baremetal node set <node> \ --driver-info ipmi_cipher_suite=<version>
-
将
<node
> 替换为节点的名称或 ID。 将
<version
> 替换为节点上要使用的密码套件版本。设置为以下有效值之一:-
3
- 节点使用带有 SHA1 密码套件的 AES-128。 -
17
- 节点使用带有 SHA256 密码套件的 AES-128。
-
-
将
将节点的置备状态设置为
available
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node manage <node> openstack baremetal node provide <node>
$ openstack baremetal node manage <node> $ openstack baremetal node provide <node>
如果启用了节点清理,则裸机置备服务会清理节点。
在节点上设置本地引导选项:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set <node> --property capabilities="boot_option:local"
$ openstack baremetal node set <node> --property capabilities="boot_option:local"
检查节点是否已注册:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node list
$ openstack baremetal node list
注册节点及其显示的状态之间可能会有延迟。
5.7. 配置 Redfish 虚拟介质引导
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
您可以使用 Redfish 虚拟介质引导,向节点的 Baseboard Management Controller (BMC) 提供引导镜像,以便 BMC 可将镜像插入到其中一个虚拟驱动器中。然后,节点可以从虚拟驱动器引导到镜像中存在的操作系统。
Redfish 硬件类型支持通过虚拟介质引导部署、救援和用户镜像。裸机置备服务(ironic)使用与节点关联的内核和 ramdisk 镜像,在节点部署时为 UEFI 或 BIOS 引导模式构建可引导 ISO 镜像。虚拟介质引导的主要优点是可以消除 PXE 的 TFTP 镜像传输阶段,并使用 HTTP GET 或其他方法。
5.7.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 库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo yum install sushy
$ sudo yum install sushy
流程
将 Bare Metal 服务 (ironic) 引导接口设置为
redfish-virtual-media
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set --boot-interface redfish-virtual-media $NODE_NAME
$ openstack baremetal node set --boot-interface redfish-virtual-media $NODE_NAME
将
$NODE_NAME
替换为节点的名称。对于 UEFI 节点,将引导模式设置为
uefi
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set --property capabilities="boot_mode:uefi" $NODE_NAME
$ openstack baremetal node set --property capabilities="boot_mode:uefi" $NODE_NAME
将
$NODE_NAME
替换为节点的名称。注意对于 BIOS 节点,请不要完成此步骤。
对于 UEFI 节点,定义 EFI 系统分区 (ESP) 镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set --driver-info bootloader=$ESP $NODE_NAME
$ openstack baremetal node set --driver-info bootloader=$ESP $NODE_NAME
将
$ESP
替换为 glance 镜像 UUID 或 ESP 镜像的 URL,并将$NODE_NAME
替换为节点的名称。注意对于 BIOS 节点,请不要完成此步骤。
在裸机节点上创建一个端口,并将端口与裸机节点上 NIC 的 MAC 地址关联:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal port create --pxe-enabled True --node $UUID $MAC_ADDRESS
$ openstack baremetal port create --pxe-enabled True --node $UUID $MAC_ADDRESS
将
$UUID
替换为裸机节点的 UUID,并将$MAC_ADDRESS
替换为裸机节点上 NIC 的 MAC 地址。创建新的裸机服务器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server create \ --flavor baremetal \ --image $IMAGE \ --network $NETWORK \ test_instance
$ openstack server create \ --flavor baremetal \ --image $IMAGE \ --network $NETWORK \ test_instance
将
$IMAGE
和$NETWORK
替换为您要使用的镜像和网络的名称。
5.8. 使用主机聚合来分隔物理和虚拟置备
OpenStack 计算使用主机聚合来对可用性区域进行分区,并将具有特定共享属性的节点分组在一起。在调配实例时,计算调度程序将类别的属性与分配给主机聚合的属性进行比较,并确保实例在正确的聚合和正确的主机上置备,并在正确的主机上或作为虚拟机。
完成本节中的步骤以执行以下操作:
-
将属性
baremetal
添加到您的类别,并将它设为true
或false
。 -
使用匹配的
baremetal
属性为裸机主机和计算节点创建单独的主机聚合。分组到聚合的节点会继承此属性。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
在
baremetal
类别上,将 baremetal 属性设置为true
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack flavor set baremetal --property baremetal=true
$ openstack flavor set baremetal --property baremetal=true
在虚拟实例使用的类别上将
baremetal
属性设置为false
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack flavor set FLAVOR_NAME --property baremetal=false
$ openstack flavor set FLAVOR_NAME --property baremetal=false
创建名为
baremetal-hosts
的主机聚合:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack aggregate create --property baremetal=true baremetal-hosts
$ openstack aggregate create --property baremetal=true baremetal-hosts
将每个 Controller 节点添加到
baremetal-hosts
聚合中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack aggregate add host baremetal-hosts HOSTNAME
$ openstack aggregate add host baremetal-hosts HOSTNAME
注意如果您使用
NovaIronic
服务创建了可组合角色,请将具有此服务的所有节点添加到baremetal-hosts
聚合中。默认情况下,只有 Controller 节点具有NovaIronic
服务。创建名为
virtual-hosts
的主机聚合:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack aggregate create --property baremetal=false virtual-hosts
$ openstack aggregate create --property baremetal=false virtual-hosts
将每个 Compute 节点添加到
virtual-hosts
聚合中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack aggregate add host virtual-hosts HOSTNAME
$ openstack aggregate add host virtual-hosts HOSTNAME
如果在部署 overcloud 时没有添加以下计算过滤器调度程序,现在将其添加到
_/etc/nova/nova.conf_
文件中的scheduler_default_filters
下的现有列表中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow AggregateInstanceExtraSpecsFilter
AggregateInstanceExtraSpecsFilter
第 6 章 管理裸机节点
部署包含裸机置备服务(ironic)的 overcloud 后,您可以在注册的裸机节点上置备物理计算机,并在 overcloud 中启动裸机实例。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
6.1. 启动裸机实例
您可以从命令行或通过 OpenStack 仪表板启动实例。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
6.1.1. 使用命令行界面启动实例
使用 openstack
命令行界面部署裸机实例。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
配置 shell 以作为管理用户身份访问 Identity 服务(keystone):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
部署实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server create \ --nic net-id=NETWORK_UUID \ --flavor baremetal \ --image IMAGE_UUID \ INSTANCE_NAME
$ openstack server create \ --nic net-id=NETWORK_UUID \ --flavor baremetal \ --image IMAGE_UUID \ INSTANCE_NAME
替换以下值:
- 将 NETWORK_UUID 替换为您创建用于裸机置备服务的网络的唯一标识符。
- 将 IMAGE_UUID 替换为上传到镜像服务的磁盘镜像的唯一标识符。
- 将 INSTANCE_NAME 替换为裸机实例的名称。
要将实例分配到安全组,请包含
--security-group SECURITY_GROUP
,将 SECURITY_GROUP 替换为安全组的名称。重复此选项,将实例添加到多个组中。有关安全组管理的更多信息,请参阅 用户和身份管理指南。检查实例的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server list --name INSTANCE_NAME
$ openstack server list --name INSTANCE_NAME
6.1.2. 使用仪表板启动实例
使用仪表板图形用户界面部署裸机实例。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
- 登录到位于 http[s]://DASHBOARD_IP/dashboard 的仪表板。
- 点 Project > Compute > Instances
点 Launch Instance。
-
在 Details 选项卡中,指定 Instance Name 并选择
1
for Count。 -
在 Source 选项卡中,从 Select Boot Source 中选择镜像,然后单击
+(
加)符号来选择操作系统磁盘镜像。您选择的镜像将移至 Allocated。
-
在 Flavor 选项卡中,选择
baremetal
。 -
在 Networks 选项卡中,使用
+(
加号)和-
(minus)按钮将所需的网络从 Available 移动到 已分配。在此处选择了您为 Bare Metal Provisioning 服务创建的共享网络。 - 如果要将实例分配到安全组,在 Security Groups 选项卡中,使用箭头将组移到 分配。
-
在 Details 选项卡中,指定 Instance Name 并选择
- 点 Launch Instance。
6.2. 在裸机置备服务中配置端口组
此发行版本中 作为技术预览提供 裸机节点的端口组功能,因此红帽不支持。它应仅用于测试,不应在生产环境中部署。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
端口组(bond)提供了一种将多个网络接口聚合到单个"bonded"接口的方法。端口组配置始终优先于单个端口配置。
如果端口组具有物理网络,那么该端口组中的所有端口必须具有相同的物理网络。裸机恢复调配服务使用 configdrive
来支持实例中端口组的配置。
裸机置备服务 API 版本 1.26 支持端口组配置。
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
6.2.1. 手动在交换机中配置端口组
要在裸机部署中配置端口组,您必须手动在交换机上配置端口组。您必须确保交换机中的模式和属性与裸机中的模式和属性对应,因为命名在交换机上有所不同。
如果您需要使用 iPXE 引导部署,则无法使用端口组进行置备和清理。
使用端口组回退时,端口组中的所有端口在连接失败时都可以回退到独立的交换机端口。根据交换机是否支持端口组回退,您可以使用 --support-standalone-ports
和 --unsupport-standalone-ports
选项。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
6.2.2. 在裸机置备服务中配置端口组
创建一个端口组,将多个网络接口 整合到单一 绑定接口 中。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
通过指定其所属的节点、其名称、地址、模式、属性以及是否支持将端口回退到独立端口来创建端口组。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 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 端口,则端口组配置将失败。
在接口附加过程中,端口组的优先级高于端口,因此首先会使用它们。目前,无法指定接口附加请求中是否需要端口组还是端口。没有任何端口的 port 组将被忽略。
注意您必须在镜像中手动配置端口组,或者通过生成
configdrive
并将其添加到节点的instance_info
中。确保有cloud-init
版本 0.7.7 或更高版本,以便端口组配置正常工作。将端口与端口组关联:
在端口创建过程中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal port create --node NODE_UUID --address MAC_ADDRESS --port-group test
# openstack baremetal port create --node NODE_UUID --address MAC_ADDRESS --port-group test
在端口更新过程中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal port set PORT_UUID --port-group PORT_GROUP_UUID
# openstack baremetal port set PORT_UUID --port-group PORT_GROUP_UUID
通过提供具有
cloud-init
或支持绑定的镜像来引导实例。要检查端口组是否已正确配置,请运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /proc/net/bonding/bondX
# cat /proc/net/bonding/bondX
在这里,
X
是cloud-init
为每个配置的端口自动生成的数字,从0
开始,每配置的端口组中递增一。
6.3. 确定主机到 IP 地址映射
使用以下命令来确定将哪些 IP 地址分配给哪些主机和裸机节点。使用这些命令,您可以在不直接访问主机的情况下从 undercloud 查看主机到 IP 映射。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
运行以下命令显示每个主机的 IP 地址:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack stack output show overcloud HostsEntry --max-width 80
(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 | +--------------+---------------------------------------------------------------+
要过滤特定主机,请运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack stack output show overcloud HostsEntry -c output_value -f value | grep overcloud-controller-0
(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
要将主机映射到裸机节点,请运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node list --fields uuid name instance_info -f json
(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" } ]
6.4. 附加和分离虚拟网络接口
裸机恢复调配服务具有一个 API,可用于管理虚拟网络接口之间的映射。例如,OpenStack 网络服务和物理接口(NIC)中的接口。您可以为每个裸机置备节点配置这些接口,将虚拟网络接口(VIF)设置为物理网络接口(PIF)映射逻辑。要配置接口,请使用 openstack baremetal node vif*
命令。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
列出当前连接到裸机节点的 VIF ID:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node vif list baremetal-0
$ openstack baremetal node vif list baremetal-0 +--------------------------------------+ | ID | +--------------------------------------+ | 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16 | +--------------------------------------+
附加 VIF 后,裸机恢复调配服务使用物理端口的实际 MAC 地址更新 OpenStack 网络服务中的虚拟端口。检查此端口地址:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack port show 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16 -c mac_address -c fixed_ips
$ 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 | +-------------+-----------------------------------------------------------------------------+
在您创建
baremetal-0
节点的网络中创建一个新端口:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack port create --network baremetal --fixed-ip ip-address=192.168.24.24 baremetal-0-extra
$ openstack port create --network baremetal --fixed-ip ip-address=192.168.24.24 baremetal-0-extra
从实例中删除端口:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server remove port overcloud-baremetal-0 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16
$ openstack server remove port overcloud-baremetal-0 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16
检查列表中是否不再存在 IP 地址:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server list
$ openstack server list
检查是否有 VIFs 附加到节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node vif list baremetal-0 openstack port list
$ openstack baremetal node vif list baremetal-0 $ openstack port list
添加新创建的端口:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server add port overcloud-baremetal-0 baremetal-0-extra
$ openstack server add port overcloud-baremetal-0 baremetal-0-extra
验证新 IP 地址是否显示新端口:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server list
$ openstack server list +--------------------------------------+-------------------------+--------+------------------------+----------------+---------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+-------------------------+--------+------------------------+----------------+---------+ | 53095a64-1646-4dd1-bbf3-b51cbcc38789 | overcloud-controller-2 | ACTIVE | ctlplane=192.168.24.7 | overcloud-full | control | | 3a1bc89c-5d0d-44c7-a569-f2a3b4c73d65 | overcloud-controller-0 | ACTIVE | ctlplane=192.168.24.8 | overcloud-full | control | | 6b01531a-f55d-40e9-b3a2-6d02be0b915b | overcloud-controller-1 | ACTIVE | ctlplane=192.168.24.16 | overcloud-full | control | | c61cc52b-cc48-4903-a971-073c60f53091 | overcloud-novacompute-0overcloud-baremetal-0 | ACTIVE | ctlplane=192.168.24.24 | overcloud-full | compute | +--------------------------------------+-------------------------+--------+------------------------+----------------+---------+
检查 VIF ID 是新端口的 UUID:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node vif list baremetal-0
$ openstack baremetal node vif list baremetal-0 +--------------------------------------+ | ID | +--------------------------------------+ | 6181c089-7e33-4f1c-b8fe-2523ff431ffc | +--------------------------------------+
检查 OpenStack 网络端口 MAC 地址是否已更新,并与裸机置备服务端口之一匹配:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack port show 6181c089-7e33-4f1c-b8fe-2523ff431ffc -c mac_address -c fixed_ips
$ 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 | +-------------+------------------------------------------------------------------------------+
重新引导裸机节点,以便它识别新的 IP 地址:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server reboot overcloud-baremetal-0
$ openstack server reboot overcloud-baremetal-0
在分离或附加接口后,裸机操作系统会删除、添加或修改已更改的网络接口。当替换端口时,DHCP 请求会获取新的 IP 地址,但这可能需要一些时间,因为旧的 DHCP 租期仍然有效。要立即启动这些更改,请重新引导裸机主机。
6.5. 为裸机置备服务配置通知
您可以配置 Bare Metal Provisioning 服务(ironic)以显示服务内发生的不同事件的通知。外部服务将这些通知用于计费目的、监控数据存储和其他目的。要为裸机置备服务启用通知,您必须在 ironic.conf
配置文件中设置以下选项。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
-
[DEFAULT]
部分中的notification_level
选项决定了发送通知的最低优先级级别。您可以将此选项的值设置为debug
、info
、warning
、error
或critical
。如果将 选项设为warning
,则发送带有优先级级别警告、
错误或
关键
的所有通知,但不发送优先级为debug
或info
的通知。如果没有设置这个选项,则不会发送通知。每个可用通知的优先级级别记录在下方。 -
[oslo_messaging_notifications]
部分中的transport_url
选项决定发送通知时使用的消息总线。如果没有设置,则使用用于 RPC 的默认传输。
所有通知都会在消息总线的 ironic_versioned_notifications
主题上发出。通常,遍历消息总线的每个消息与描述消息内容的主题相关联。
6.6. 配置自动电源故障恢复
裸机置备服务(ironic)有一个字符串字段 错误
,用于记录电源、清理和救援中止节点失败。
故障 | Description |
---|---|
电源故障 | 该节点处于维护模式,因为电源同步失败超过重试次数。 |
清理失败 | 该节点处于维护模式,因为清理操作失败。 |
救援中止失败 | 由于在救援中止期间清理操作失败,节点处于维护模式。 |
none | 不存在错误。 |
编排器定期检查此字段的值。如果编排器检测到 电源失败
状态,并可成功将电源恢复到节点,则该节点将从维护模式中移除并恢复到操作。
如果运算符手动将节点置于维护模式,则编排器不会自动从维护模式中删除该节点。
默认间隔为 300 秒,但您可以使用 hieradata 将这个间隔配置为 director。
前提条件
- 包括裸机置备服务成功的 overcloud 部署。如需更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
流程
包含以下 hieradata 来配置自定义恢复间隔:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ironic::conductor::power_failure_recovery_interval
ironic::conductor::power_failure_recovery_interval
要禁用自动电源故障恢复,请将值设为
0。
6.7. 内省 overcloud 节点
执行 overcloud 节点的内省,以标识和存储节点规格到 director 中。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
overcloudrc
凭据文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
运行内省命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal introspection start [--wait] <NODENAME>
$ openstack baremetal introspection start [--wait] <NODENAME>
将 <NODENAME> 替换为您要检查的节点的名称或 UUID。
检查内省状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal introspection status <NODENAME>
$ openstack baremetal introspection status <NODENAME>
将 <NODENAME> 替换为节点的名称或 UUID。
后续步骤
提取内省数据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal introspection data save <NODE-UUID>
$ openstack baremetal introspection data save <NODE-UUID>
将 <NODENAME> 替换为节点的名称或 UUID。
Red Hat OpenStack Platform 16.1 使用 ipmitool
2.0。在某些硬件中,内省或常规电源控制操作可能会失败,并显示以下错误:
Error in open session response message : no matching cipher suite Error: Unable to establish IPMI v2 / RMCP+ session
Error in open session response message : no matching cipher suite
Error: Unable to establish IPMI v2 / RMCP+ session
在这种情况下,您必须将 IPMI 密码套件设置为版本 3,然后才能运行内省:
openstack baremetal node set <node-UUID> --driver-info ipmi_cipher_suite=3
$ openstack baremetal node set <node-UUID> --driver-info ipmi_cipher_suite=3
第 7 章 从 Cinder 卷引导
您可以在块存储服务(cinder)中创建卷,并将这些卷连接到使用 Bare Metal Provisioning 服务(ironic)创建的裸机实例。
7.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
内核参数。
7.2. 为 cinder 卷引导配置节点
您必须为每个裸机节点配置特定选项,以便成功从 Cinder 卷引导。
流程
-
以
stack
用户的身份登录 undercloud。 提供 overcloud 凭证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloudrc
$ source ~/overcloudrc
为所选节点将
iscsi_boot
功能设置为true
,将storage-interface
设置为cinder
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set --property capabilities=iscsi_boot:true --storage-interface cinder <NODEID>
$ openstack baremetal node set --property capabilities=iscsi_boot:true --storage-interface cinder <NODEID>
将
<NODEID
> 替换为所选节点的 ID。为节点创建 iSCSI 连接器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal volume connector create --node <NODEID> --type iqn --connector-id iqn.2010-10.org.openstack.node<NUM>
$ 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>
;,其中<NUM
> 是每个节点的递增数字。
7.3. 在引导磁盘中配置 iSCSI 内核参数
您必须在镜像上的内核中启用 iSCSI 引导。要实现这一目的,请在镜像上挂载 QCOW2 镜像并启用 iSCSI 组件。
前提条件
下载 Red Hat Enterprise Linux QCOW2 镜像,并将其复制到 undercloud 的
/home/stack/
目录中。您可以使用以下页面下载 QCOW2 格式的 Red Hat Enterprise Linux KVM 镜像:
流程
-
以
stack
用户的身份登录 undercloud。 挂载 QCOW2 镜像,并以
root
用户身份进行访问:加载
nbd
内核模块:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo modprobe nbd
$ sudo modprobe nbd
将 QCOW 镜像连接为
/dev/nbd0
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo qemu-nbd --connect=/dev/nbd0 <IMAGE>
$ sudo qemu-nbd --connect=/dev/nbd0 <IMAGE>
检查 NBD 上的分区:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo fdisk /dev/nbd0 -l
$ sudo fdisk /dev/nbd0 -l
新的 Red Hat Enterprise Linux QCOW2 镜像只包含一个分区,通常在 NBD 上命名
/dev/nbd0p1
。为镜像创建挂载点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir /tmp/mountpoint
mkdir /tmp/mountpoint
挂载镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo mount /dev/nbd0p1 /tmp/mountpoint/
sudo mount /dev/nbd0p1 /tmp/mountpoint/
挂载您的
dev
目录,以便镜像能够访问主机上的设备信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo mount -o bind /dev /tmp/mountpoint/dev
sudo mount -o bind /dev /tmp/mountpoint/dev
将根目录改为挂载点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo chroot /tmp/mountpoint /bin/bash
sudo chroot /tmp/mountpoint /bin/bash
在镜像中配置 iSCSI:
注意此步骤中的一些命令可能报告以下错误:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lscpu: cannot open /proc/cpuinfo: No such file or directory
lscpu: cannot open /proc/cpuinfo: No such file or directory
此错误不重要,您可以忽略这个错误。
将
resolv.conf
文件移动到临时位置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow mv /etc/resolv.conf /etc/resolv.conf.bak
# mv /etc/resolv.conf /etc/resolv.conf.bak
创建临时
resolv.conf
文件,以解决 Red Hat Content Delivery Network 的 DNS 请求。这个示例为名称服务器使用8.8.8.8
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo "nameserver 8.8.8.8" > /etc/resolv.conf
# echo "nameserver 8.8.8.8" > /etc/resolv.conf
将挂载的镜像注册到 Red Hat Content Delivery Network 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager register
# subscription-manager register
当命令提示您时,输入您的用户名和密码。
附加包含 Red Hat Enterprise Linux 的订阅:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager list --all --available subscription-manager attach --pool <POOLID>
# subscription-manager list --all --available # subscription-manager attach --pool <POOLID>
将 &
lt;POOLID
> 替换为订阅的池 ID。禁用默认软件仓库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --disable "*"
# subscription-manager repos --disable "*"
启用 Red Hat Enterprise Linux 软件仓库:
Red Hat Enterprise Linux 7:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable "rhel-7-server-rpms"
# subscription-manager repos --enable "rhel-7-server-rpms"
Red Hat Enterprise Linux 8:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable "rhel-8-for-x86_64-baseos-eus-rpms"
# subscription-manager repos --enable "rhel-8-for-x86_64-baseos-eus-rpms"
安装
iscsi-initiator-utils
软件包:Copy to Clipboard Copied! Toggle word wrap Toggle overflow yum install -y iscsi-initiator-utils
# yum install -y iscsi-initiator-utils
取消注册挂载的镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager unregister
# subscription-manager unregister
恢复原始
resolv.conf
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow mv /etc/resolv.conf.bak /etc/resolv.conf
# mv /etc/resolv.conf.bak /etc/resolv.conf
检查挂载的镜像中的内核版本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rpm -qa kernel
# rpm -qa kernel
例如,如果输出为
kernel-3.10.0-1062.el7.x86_64
,则内核版本是3.10.0-1062.el7.x86_64
。请注意此内核版本用于下一步。注意新的 Red Hat Enterprise Linux QCOW2 镜像仅安装了一个内核版本。如果安装了多个内核版本,请使用最新的内核版本。
将
network
和iscsi
dracut 模块添加到 initramfs 镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dracut --force --add "network iscsi" /boot/initramfs-<KERNELVERSION>.img <KERNELVERSION>
# dracut --force --add "network iscsi" /boot/initramfs-<KERNELVERSION>.img <KERNELVERSION>
将
<KERNELVERSION
> 替换为从rpm -qa 内核获取的版本号
。以下示例使用3.10.0-1062.el7.x86_64
作为内核版本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dracut --force --add "network iscsi" /boot/initramfs-3.10.0-1062.el7.x86_64.img 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
编辑
/etc/default/grub
配置文件并将rd.iscsi.firmware=1
添加到GRUB_CMDLINE_LINUX
参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow vi /etc/default/grub
# vi /etc/default/grub
以下示例显示了
GRUB_CMDLINE_LINUX
参数以及添加的rd.iscsi.firmware=1
内核参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200n8 no_timer_check net.ifnames=0 rd.iscsi.firmware=1"
GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200n8 no_timer_check net.ifnames=0 rd.iscsi.firmware=1"
保存更改。
注意不要在此步骤中重建
grub
菜单配置。此流程中的后续步骤会重建grub
菜单作为临时虚拟机。从挂载的镜像退出回您的主机操作系统:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow exit
# exit
卸载镜像:
从临时挂载点卸载
dev
目录:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo umount /tmp/mountpoint/dev
$ sudo umount /tmp/mountpoint/dev
从挂载点卸载镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo umount /tmp/mountpoint
$ sudo umount /tmp/mountpoint
从
/dev/nbd0/
断开 QCOW2 镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo qemu-nbd --disconnect /dev/nbd0
$ sudo qemu-nbd --disconnect /dev/nbd0
在镜像上重建
grub
菜单配置:安装
libguestfs-tools
软件包:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo yum -y install libguestfs-tools
$ sudo yum -y install libguestfs-tools
重要如果在 undercloud 上安装
libguestfs-tools
软件包,请禁用iscsid.socket
以避免与 undercloud 上的tripleo_iscsid
服务冲突:Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo systemctl disable --now iscsid.socket
$ sudo systemctl disable --now iscsid.socket
将
libguestfs
后端设置为直接使用 QEMU:Copy to Clipboard Copied! Toggle word wrap Toggle overflow export LIBGUESTFS_BACKEND=direct
$ export LIBGUESTFS_BACKEND=direct
更新镜像的 grub 配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow guestfish -a <IMAGE> -m /dev/sda1 sh "/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg"
$ guestfish -a <IMAGE> -m /dev/sda1 sh "/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg"
7.4. 在 cinder 中创建并使用引导卷
您必须将启用 iSCSI 的镜像上传到 OpenStack Image Storage (glance),并在 OpenStack Block Storage (cinder)中创建引导卷。
流程
-
以
stack
用户的身份登录 undercloud。 将启用 iSCSI 的镜像上传到 glance:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack image create --disk-format qcow2 --container-format bare --file rhel-server-7.7-x86_64-kvm.qcow2 rhel-server-7.7-iscsi
$ openstack image create --disk-format qcow2 --container-format bare --file rhel-server-7.7-x86_64-kvm.qcow2 rhel-server-7.7-iscsi
从镜像创建卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack volume create --size 10 --image rhel-server-7.7-iscsi --bootable rhel-test-volume
$ openstack volume create --size 10 --image rhel-server-7.7-iscsi --bootable rhel-test-volume
创建在 cinder 中使用引导卷的裸机实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server create --flavor baremetal --volume rhel-test-volume --key default rhel-test
$ openstack server create --flavor baremetal --volume rhel-test-volume --key default rhel-test
第 8 章 ML2 networking-ansible
您可以在 overcloud 上启用并配置 networking-ansible
ML2 驱动程序和网络服务(neutron),并将其与裸机置备服务(ironic)集成。
8.1. 模块第 2 层(ML2) networking-ansible
OpenStack Networking (neutron)包含 networking-ansible
,它是一个 ML2 驱动程序,它使用 Ansible Engine 网络来管理网络交换机。此驱动程序也与 OpenStack Bare Metal (ironic)集成,用于在裸机客户机的交换机端口上配置 VLAN。这意味着,任何使用 VLAN neutron 网络的裸机客户端都会导致这个驱动程序使用 Ansible Engine 网络配置物理交换机。
当前 networking-ansible
驱动程序包括以下功能:
- 在 Red Hat OpenStack Platform (RHOSP)中创建网络时在交换机上定义 VLAN
- 在 RHOSP 中创建或更新端口时,为交换机上的访问端口分配 VLAN
- 在删除 RHOSP 中的端口时,从交换机上的访问端口中删除 VLAN
8.2. networking-ansible 的网络要求
要启用 networking-ansible
功能,您的环境必须包含以下网络配置:
支持 Ansible Network Automation 的网络交换机:
-
Juniper Networks (
junos
) -
Arista Extensible Operating System (
eos
)
-
Juniper Networks (
本发行版本中提供了 Arista Extensible Operating System (eos
)支持,它还 是一个技术预览,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
网络交换机需要一个 SSH 用户,以便 Ansible Network Automation 可以与设备交互。此用户在交换机上需要以下权限:
- 访问模式
- 为端口分配 VLAN
- 创建 VLAN
为了安全起见,请不要为 SSH 用户提供交换机的管理员访问权限。
- 准备要使用的 VLAN。要准备 VLAN,请在交换机上创建每个 VLAN,然后删除每个 VLAN。
- 为裸机客户机保留的网络交换机端口最初需要配置才能连接到专用网络以进行内省。除此之外,这些端口不需要额外的配置。
8.3. networking-ansible
的 OpenStack Bare Metal (ironic)要求
networking-ansible
驱动程序与 Openstack Bare Metal (ironic)服务集成。为确保成功集成,请使用以下建议将 Bare Metal Provisioning 服务(ironic)部署到 overcloud 中:
overcloud 需要 provisioning 网络。使用以下选项之一:
- 适用于 ironic 服务的桥接网络。
- ironic 服务的自定义可组合网络。
有关配置 provisioning 网络的更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
overcloud 需要租户网络供裸机系统在置备过程后使用。本指南中的示例使用默认
baremetal
网络映射到名为br-baremetal
的网桥。此网络还需要一系列 VLAN ID。以下 heat 参数设置这些值以适合本指南中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: NeutronNetworkVLANRanges: baremetal:1200:1299 NeutronFlatNetworks: datacentre,baremetal NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
parameter_defaults: NeutronNetworkVLANRanges: baremetal:1200:1299 NeutronFlatNetworks: datacentre,baremetal NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
-
overcloud 使用内省服务自动识别某些硬件详细信息,并将它们映射以供其他服务使用。建议您启用 ironic 内省服务,以帮助映射要使用的
networking-ansible
的 interface-to-port 详情。您还可以手动完成此任务。
有关部署裸机置备服务(ironic)的更多信息,请参阅 第 3 章 使用裸机置备服务部署 IPv4 overcloud 或 第 4 章 使用裸机置备服务部署 IPv6 overcloud。
8.4. 启用 networking-ansible ML2 功能
要在 overcloud 中启用 networking-ansible
ML2 驱动程序,您必须在部署中添加两个环境文件:
/usr/share/openstack-tripleo-heat-templates/environments/neutron-ml2-ansible.yaml
-
此文件启用
networking-ansible
驱动程序,并将网络类型设置为vlan
。此文件已存在于核心 heat 模板集合中。 /home/stack/templates/ml2-ansible-hosts.yaml
- 包含交换机详情的文件。您可以手动创建这个文件。
流程
创建
/home/stack/templates/ml2-ansible-hosts.yaml
并添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: ML2HostConfigs:
parameter_defaults: ML2HostConfigs:
ML2HostConfigs
参数需要一个dict
值,其中包含有关您的交换机的详细信息。字典中的每个初始密钥
都是交换机的名称。此值在 OpenStack Networking (neutron) ML2 配置中定义一个特定的ansible:[switchname]
部分。每个切换名称键都需要自己的包含
实际交换机详情的字典。例如,要配置三个交换机,请添加三个切换键:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: ML2HostConfigs: switch1: [SWITCH DETAILS] switch2: [SWITCH DETAILS] switch3: [SWITCH DETAILS]
parameter_defaults: ML2HostConfigs: switch1: [SWITCH DETAILS] switch2: [SWITCH DETAILS] switch3: [SWITCH DETAILS]
每个切换都需要在
dict
ion 中需要特定的键值对:ansible_network_os
(必需)交换机的操作系统。选项包括
junos
和eos
。重要本发行版本中提供了 Arista Extensible Operating System (
eos
)支持,它还 是一个技术预览,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。ansible_host
- (必需)交换机的 IP 或主机名。
ansible_user
- (必需)Ansible 用来访问交换机的用户。
ansible_ssh_pass
- (必需)Ansible 用来访问交换机的 SSH 密码。
mac
-
网络设备的 chassis MAC ID。用于将链路层发现协议(LLDP) MAC 地址值映射到
ML2HostConfigs
配置中定义的交换机名称。这是使用内省执行自动端口配置时所需的值。 manage_vlans
-
一个布尔值变量,用于定义 OpenStack Networking (neutron)是否控制物理设备上的 VLAN 的创建和删除。此功能使得交换机能够创建和删除 ID 与其 Neutron 网络对应的 VLAN。如果您在交换机上预定义了这些 VLAN,且不需要 Neutron 在交换机上创建或删除 VLAN,则将此参数设置为
false
。默认值为true
。
以下示例演示了如何将这些值映射到完整
ML2HostConfigs
参数中对应的键:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: ML2HostConfigs: switch1: ansible_network_os: juno ansible_host: 10.0.0.1 ansible_user: ansible ansible_ssh_pass: "p@55w0rd!" mac: 01:23:45:67:89:AB manage_vlans: false
parameter_defaults: ML2HostConfigs: switch1: ansible_network_os: juno ansible_host: 10.0.0.1 ansible_user: ansible ansible_ssh_pass: "p@55w0rd!" mac: 01:23:45:67:89:AB manage_vlans: false
-
保存
/home/stack/templates/ml2-ansible-hosts.yaml
文件。 运行 overcloud 部署命令时,请使用
-e
选项包括/usr/share/openstack-tripleo-heat-templates/environments/neutron-ml2-ansible.yaml
和/home/stack/templates/ml2-ansible-hosts.yaml
文件。以下示例演示了如何包含这些文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack overcloud deploy --templates \ ...
$ openstack overcloud deploy --templates \ ... -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ml2-ansible.yaml \ -e /home/stack/templates/ml2-ansible-hosts.yaml \ ...
director 将驱动程序作为 neutron_api
容器上的 OpenStack Networking (neutron) API 的一部分启用。
8.5. 为 networking-ansible 配置网络
使用裸机置备和启用了 networking-ansible
驱动程序部署 overcloud 后,必须为裸机节点创建置备和租户网络。您还必须根据您的要求,在访问模式或中继模式中为裸机节点配置端口。
- 访问模式
- 在访问模式中,交换机端口只承载一个 VLAN 的流量,并在单个广播域上运行。到达端口的所有流量都属于分配给端口的 VLAN。
- 中继模式
在中继模式中,交换机端口可以属于多个 VLAN。您可以使用交换机端口以中继模式来传输 VLAN 组的流量,或者希望通过多个 VLAN 在多个交换机间交换流量。
重要该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
Bare Metal 服务(ironic)使用 networking-ansible
将裸机客户机的交换机端口分配给 ironic 置备网络,以便置备过程可以成功完成。完成调配后,ironic 将裸机客户机的交换机端口分配给网络服务(neutron)将分配给裸机客户机的租户网络的 VLAN。
8.5.1. 在访问模式中为 networking-ansible 配置网络
使用裸机置备和启用了 networking-ansible
驱动程序部署 overcloud 后,为裸机节点创建以下网络:
- Provisioning 网络
- 裸机系统使用此网络进行初始创建。
- 租户网络
- 裸机系统在置备后切换到这个网络,并使用此网络进行内部通信。
流程
- 创建调配网络和子网。这取决于您使用的置备网络的类型。有关配置 provisioning 网络的更多信息,请参阅 第 5 章 部署后配置裸机置备服务。
创建租户网络和子网:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack network create --provider-network-type vlan --provider-physical-network baremetal tenant-net openstack subnet create --network tenant-net --subnet-range 192.168.3.0/24 --allocation-pool start=192.168.3.10,end=192.168.3.20 tenant-subnet
$ openstack network create --provider-network-type vlan --provider-physical-network baremetal tenant-net $ openstack subnet create --network tenant-net --subnet-range 192.168.3.0/24 --allocation-pool start=192.168.3.10,end=192.168.3.20 tenant-subnet
确保将
--provider-network-type
选项设置为vlan
,以确保networking-ansible
功能。
8.5.2. 在访问模式中为裸机客户端配置端口
裸机客户端需要端口信息来连接到交换机。完成此操作有两种方法:
-
自动: 节点内省.要使用自动方法,将对应的交换机的
mac
值设置为ML2HostConfigs
参数的一部分。 - Manual: 设置 OpenStack Networking (neutron)端口配置。如果您的 overcloud 不包括裸机内省功能,请使用此方法。
流程
自动:
运行内省命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal introspection start [--wait] <NODENAME>
$ openstack baremetal introspection start [--wait] <NODENAME>
裸机节点在内省过程中获取交换机的 MAC 地址。
networking-ansible
ML2 驱动程序使用此 MAC 地址映射到您在ML2HostConfigs
参数中对应的交换机使用mac
参数定义的同一 MAC 地址。- 等待内省完成。
手动:
为裸机节点创建端口。使用以下示例命令创建端口:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal port create [NODE NIC MAC] --node [NODE UUID] \ --local-link-connection port_id=[SWICH PORT ID] \ --local-link-connection switch_info=[SWITCH NAME] \ --local-link-connection switch_id=[SWITCH MAC]
$ openstack baremetal port create [NODE NIC MAC] --node [NODE UUID] \ --local-link-connection port_id=[SWICH PORT ID] \ --local-link-connection switch_info=[SWITCH NAME] \ --local-link-connection switch_id=[SWITCH MAC]
将方括号中的下列值替换为您自己的环境详情:
[NODE NIC MAC]
- 连接到交换机的 NIC 的 MAC 地址。
--node [NODE UUID]
- 使用新端口的节点的 UUID。
--local-link-connection port_id=[SWITCH PORT ID]
- 连接到裸机节点的交换机上的端口 ID。
--local-link-connection switch_info=[SWITCH NAME]
-
连接到裸机节点的交换机名称。switch name 必须与
ML2HostConfigs
参数中定义的对应交换机名称匹配。 --local-link-connection switch_id=[SWITCH MAC]
-
交换机的 MAC 地址。这必须与
ML2HostConfigs
参数中的交换机配置中的对应的mac
值匹配。这是使用switch_info
的替代选项。
8.5.3. 以中继模式配置网络
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
使用裸机置备和启用了 networking-ansible
驱动程序部署 overcloud 后,为裸机节点创建以下网络:
- Provisioning 网络
- 裸机系统使用此网络进行初始创建。
- 租户网络
- 裸机系统在置备后切换到这个网络,并使用此网络进行内部通信。
流程
- 创建调配网络和子网。这取决于您使用的置备网络的类型。有关配置 provisioning 网络的更多信息,请参阅 第 5 章 部署后配置裸机置备服务。
创建主租户 VLAN 网络、二级租户网络和每个使用客户机附加到的物理网络的子网:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack network create --provider-network-type vlan --provider-physical-network baremetal primary-tenant-net openstack network create --provider-network-type vlan --provider-physical-network baremetal secondary-tenant-net openstack subnet create --network primary-tenant-net --subnet-range 192.168.3.0/24 --allocation-pool start=192.168.3.10,end=192.168.3.20 primary-tenant-subnet openstack subnet create --network secondary-tenant-net --subnet-range 192.168.7.0/24 --allocation-pool start=192.168.7.10,end=192.168.7.20 secondary-tenant-subnet
$ openstack network create --provider-network-type vlan --provider-physical-network baremetal primary-tenant-net $ openstack network create --provider-network-type vlan --provider-physical-network baremetal secondary-tenant-net $ openstack subnet create --network primary-tenant-net --subnet-range 192.168.3.0/24 --allocation-pool start=192.168.3.10,end=192.168.3.20 primary-tenant-subnet $ openstack subnet create --network secondary-tenant-net --subnet-range 192.168.7.0/24 --allocation-pool start=192.168.7.10,end=192.168.7.20 secondary-tenant-subnet
确保将
--provider-network-type
选项设置为vlan
,以确保networking-ansible
功能。
8.5.4. 以中继模式为裸机客户端配置端口
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
裸机客户端需要端口信息来连接交换机,以便您可以使用裸机置备服务(ironic)在多个网络上使用单一交换机端口部署。交换机端口配置为中继模式,它使用网络服务(neutron)从所提供的网络分配的 VLAN。
完成以下步骤,为裸机客户机配置中继端口。
流程
创建端口和中继,并将端口分配给中继作为父端口:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow port create --network primary-tenant-net primary-port network trunk create --parent-port primary-port my-trunk
$ port create --network primary-tenant-net primary-port $ network trunk create --parent-port primary-port my-trunk
为二级网络创建一个端口,并将新端口作为子端口添加到中继中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow port create --network secondary-tenant-net secondary-port network trunk set --subport port=secondary-port,segmentation-type=vlan,segmentation-id=1234 my-trunk
$ port create --network secondary-tenant-net secondary-port $ network trunk set --subport port=secondary-port,segmentation-type=vlan,segmentation-id=1234 my-trunk
8.6. 测试 networking-ansible ML2 功能
完成裸机节点的 networking-ansible
配置后,创建一个裸机工作负载来验证配置是否正确。
前提条件
- 具有 OpenStack Baremetal (ironic)服务的 overcloud。
-
启用
networking-ansible
ML2 驱动程序。 -
ML2HostConfigs
参数包含交换机访问详情。 - 注册的裸机节点。
- 用于在交换机上用于节点连接的对应裸机端口配置。这个端口可以是访问端口或中继端口。
- 在 OpenStack Networking (neutron)中定义的基于 VLAN 的 provisioning 网络来进行初始调配。
- 在 OpenStack Networking (neutron)中定义的基于 VLAN 的租户网络,用于内部通信。
- overcloud 中可用的磁盘映像和密钥对。
流程
创建裸机系统:
要创建使用访问端口的裸机系统,请运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server create --flavor baremetal --image overcloud-full --key default --network tenant-net test1
openstack server create --flavor baremetal --image overcloud-full --key default --network tenant-net test1
要创建使用中继端口的裸机系统,请运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack server create --flavor baremetal --image overcloud-full --port {primary-port-uuid} --key default test1
openstack server create --flavor baremetal --image overcloud-full --port {primary-port-uuid} --key default test1
overcloud 最初会在 provisioning 网络中创建裸机系统。创建完成后,network -ansible
驱动程序会更改交换机上的端口配置,以便裸机系统使用租户网络。
第 9 章 对裸机置备服务进行故障排除
诊断包含裸机置备服务(ironic)的环境中的问题。
9.1. PXE 引导错误
使用以下故障排除步骤来评估和补救您可能会在 PXE 引导时遇到问题。
权限 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
# 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
在节点的控制台中,如果看起来会收到 IP 地址,但然后停止进程,您可能在 ironic.conf
文件中使用错误的 PXE 引导镜像。
grep ^pxe_config_template ironic.conf
$ grep ^pxe_config_template ironic.conf
pxe_config_template=$pybasedir/drivers/modules/ipxe_config.template
默认模板是 pxe_config.template
,因此可以轻松地省略 i,并意外输入 ipxe_config.template
。
9.2. 裸机节点引导后的登录错误
当使用在配置期间设置的 root 密码时登录到节点失败,表示您不会被引导到部署的镜像。您可能已登录 deploy-kernel/deploy-ramdisk
镜像,系统尚未加载正确的镜像。
要解决这个问题,请验证 Compute 或 Bare Metal Provisioning 服务节点上 /httpboot/pxelinux.cfg/MAC_ADDRESS
中的 PXE 引导配置文件,并确保此文件中列出的所有 IP 地址都与 Bare Metal 网络上的 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=ipmi boot_mode=bios initrd=deploy_ramdisk coreos.configdrive=0 || goto deploy
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 |
在 |
5a6cdbe3-2c90-4a90-b3c6-85b449b30512 |
|
deploy_kernel |
这是镜像服务中的部署内核镜像,它被复制到 |
http://192.168.200.2:6385 |
|
ipmi | 此节点的裸机置备服务使用的 IPMI 驱动程序。 |
deploy_ramdisk |
这是在镜像服务中作为 |
如果 /httpboot/pxelinux.cfg/MAC_ADDRESS
和 ironic.conf
文件之间没有对应的值:
-
更新
ironic.conf
文件中的值 - 重启裸机置备服务
- 重新部署裸机实例
9.3. 部署的节点上的 Boot-to-disk 错误
在某些硬件中,您可能在进行连续引导操作期间,部署节点无法从磁盘引导的问题。这通常是因为 BMC 不遵循 director 在节点上请求的持久引导设置。相反,节点会从 PXE 目标引导。
在这种情况下,您必须在节点的 BIOS 中更新引导顺序。将 HDD 设置为第一个引导设备,然后作为后续选项 PXE,以便默认情况下从磁盘引导节点,但可以根据需要从网络引导。
这个错误主要适用于使用 LegacyBIOS 固件的节点。
9.4. 裸机置备服务没有收到正确的主机名
如果裸机置备服务没有收到正确的主机名,这意味着 cloud-init
失败。要解决此问题,请将裸机子网连接到 OpenStack 网络服务中的路由器。此配置可以正确地路由到 meta-data 代理的请求。
9.5. 执行裸机置备服务命令时的 OpenStack 身份服务凭证无效
如果您无法验证身份服务,请检查 ironic.conf
文件中的 identity_uri
参数,并确保从 Keystone AdminURL 中删除 /v2.0
。例如,将
identity_uri
设置为 http://IP:PORT
。
9.6. 硬件启用
不正确的节点注册详情可能会导致注册的硬件出现问题。确保正确输入属性名称和值。当您输入属性名称时,系统会错误地将属性添加到节点详情中,但忽略它们。
使用 openstack baremetal node set
命令更新节点详情。例如,将节点注册到 2 GB 的内存大小更新为 2 GB:
openstack baremetal node set --property memory_mb=2048 NODE_UUID
$ openstack baremetal node set --property memory_mb=2048 NODE_UUID
9.7. iDRAC 问题的故障排除
- Redfish 管理界面无法设置引导设备
当您使用带有特定 iDRAC 固件版本的
idrac-redfish
管理界面并尝试使用 UEFI 引导的裸机服务器中设置引导设备,iDRAC 会返回以下错误:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Unable to Process the request because the value entered for the parameter Continuous is not supported by the implementation.
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
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack baremetal node set --driver-info force_persistent_boot_device=Never ${node_uuid}
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
命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ironic::agent::rpc_response_timeout: 18
ironic::agent::rpc_response_timeout: 18
- 供应商透传超时
当 iDRAC 无法执行厂商透传命令时,这些命令需要太长且超时:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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)
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
命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ironic::default::rpc_response_timeout: 600
ironic::default::rpc_response_timeout: 600
9.8. 配置服务器控制台
overcloud 节点的控制台输出并不总是发送到服务器控制台。如果要在服务器控制台中查看此输出,您必须将 overcloud 配置为为您的硬件使用正确的控制台。使用以下方法之一执行此配置:
-
修改每个 overcloud 角色的
KernelArgs
heat 参数。 -
自定义 director 用于置备 overcloud 节点的
overcloud-full.qcow2
镜像。
前提条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 指南。
- overcloud 节点已准备好进行部署。
在部署过程中使用 heat 修改 KernelArgs
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
凭证文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow source stackrc
$ source stackrc
创建包含以下内容的环境文件
overcloud-console.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: <role>Parameters: KernelArgs: "console=<console-name>"
parameter_defaults: <role>Parameters: KernelArgs: "console=<console-name>"
将
<role
> 替换为您要配置的 overcloud 角色的名称,并将<console-name
> 替换为您要使用的控制台的 ID。例如,使用以下代码片段将默认角色中的所有 overcloud 节点配置为使用tty0
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: ControllerParameters: KernelArgs: "console=tty0" ComputeParameters: KernelArgs: "console=tty0" BlockStorageParameters: KernelArgs: "console=tty0" ObjectStorageParameters: KernelArgs: "console=tty0" CephStorageParameters: KernelArgs: "console=tty0"
parameter_defaults: ControllerParameters: KernelArgs: "console=tty0" ComputeParameters: KernelArgs: "console=tty0" BlockStorageParameters: KernelArgs: "console=tty0" ObjectStorageParameters: KernelArgs: "console=tty0" CephStorageParameters: KernelArgs: "console=tty0"
-
使用
-e
选项在部署命令中包含overcloud-console-tty0.yaml
文件。
修改 overcloud-full.qcow2
镜像
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
凭证文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow source stackrc
$ source stackrc
修改
overcloud-full.qcow2
镜像的内核参数,为您的硬件设置正确的控制台。例如,将控制台设置为tty0
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow virt-customize --selinux-relabel -a overcloud-full.qcow2 --run-command 'grubby --update-kernel=ALL --args="console=tty0"'
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --run-command 'grubby --update-kernel=ALL --args="console=tty0"'
将镜像导入 director:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack overcloud image upload --image-path overcloud-full.qcow2
$ openstack overcloud image upload --image-path overcloud-full.qcow2
- 部署 overcloud。
验证
从 undercloud 登录 overcloud 节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh heat-admin@<IP-address>
$ ssh heat-admin@<IP-address>
将
<IP-address
> 替换为 overcloud 节点的 IP 地址。检查
/proc/cmdline
文件的内容,并确保console=
参数设置为您要使用的控制台值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
[heat-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
第 10 章 裸机驱动程序
您可以将裸机节点配置为使用在裸机置备服务中启用的其中一个驱动程序。每个驱动程序都包括一个置备方法和电源管理类型。有些驱动程序需要额外的配置。本节中描述的每个驱动程序都使用 PXE 进行置备;驱动程序根据电源管理类型列出。
您可以通过在 ironic.yaml
文件中配置 IronicEnabledHardwareTypes
参数来添加驱动程序。默认情况下启用 ipmi
和 redfish
。
有关支持的插件和驱动程序的完整列表,请参阅 Red Hat OpenStack Platform 中的组件、插件和驱动程序支持。
10.1. 智能平台管理接口 (IPMI)
IPMI 是一个提供带外远程管理功能的接口,包括电源管理和服务器监控。要使用此电源管理类型,所有裸机置备服务节点都需要一个连接到共享的裸机恢复网络的 IPMI。启用 ipmi
驱动程序,并在节点的 driver_info
中设置以下信息:
-
ipmi_address
- IPMI NIC 的 IP 地址。 -
ipmi_username
- IPMI 用户名。 -
ipmi_password
- IPMI 密码。
Red Hat OpenStack Platform 16.1 使用 ipmitool
2.0。在某些硬件中,内省或常规电源控制操作可能会失败,并显示以下错误:
Error in open session response message : no matching cipher suite Error: Unable to establish IPMI v2 / RMCP+ session
Error in open session response message : no matching cipher suite
Error: Unable to establish IPMI v2 / RMCP+ session
在这种情况下,您必须将 IPMI 密码套件设置为版本 3,然后才能运行内省:
openstack baremetal node set <node-UUID> --driver-info ipmi_cipher_suite=3
$ openstack baremetal node set <node-UUID> --driver-info ipmi_cipher_suite=3
10.2. Redfish
由分布式管理任务组 (DMTF) 开发的,IT 基础架构的标准 RESTful API
-
redfish_username
- Redfish 用户名。 -
redfish_password
- Redfish 密码。 -
redfish_address
- Redfish 控制器的 IP 地址。 -
redfish_system_id
- 系统资源的规范路径。此路径必须包含系统的根服务、版本和路径/唯一 ID。例如:/redfish/v1/Systems/CX34R87
. -
redfish_verify_ca
- Either a Boolean value、CA_BUNDLE 文件的路径,或使用可信 CA 证书的目录。如果将此值设置为True
,则驱动程序将验证主机证书。如果将此值设置为False
,则驱动程序忽略验证 SSL 证书。如果将此值设置为路径,则驱动程序使用指定证书或 目录中的证书之一。默认值为True
。
10.3. Dell Remote Access Controller (DRAC)
DRAC 是一个提供带外的远程管理功能的接口,包括电源管理和服务器监控。要使用此电源管理类型,所有裸机置备服务节点都需要一个连接到共享裸机恢复网络的 DRAC。启用 idrac
驱动程序,并在节点的 driver_info
中设置以下信息:
-
drac_address
- DRAC NIC 的 IP 地址。 -
drac_username
- DRAC 用户名。 -
drac_password
- DRAC 密码。
10.4. 集成远程管理控制器(iRMC)
Fujitsu 的 iRMC 是一个提供带外的远程管理功能(包括电源管理和服务器监控)的接口。要在裸机置备服务节点上使用此电源管理类型,节点需要一个连接到共享 Bare Metal 网络的 iRMC 接口。启用 irmc
驱动程序,并在节点的 driver_info
中设置以下信息:
-
irmc_address
- iRMC 接口 NIC 的 IP 地址。 -
irmc_username
- iRMC 用户名。 -
irmc_password
- iRMC 密码。
要使用 IPMI 设置引导模式或 SCCI 来获取传感器数据,您必须完成以下附加步骤:
在
ironic.conf
文件中启用 sensor 方法:Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack-config --set /etc/ironic/ironic.conf \ irmc sensor_method METHOD
$ openstack-config --set /etc/ironic/ironic.conf \ irmc sensor_method METHOD
将 METHOD 替换为
scci
或ipmitool
。如果启用了 SCCI,请安装
python-scciclient
软件包:Copy to Clipboard Copied! Toggle word wrap Toggle overflow dnf install python-scciclient
# dnf install python-scciclient
重启裸机编排器服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl restart openstack-ironic-conductor.service
# systemctl restart openstack-ironic-conductor.service
要使用 iRMC 驱动程序,需要 iRMC S4 或更高版本。
10.5. Integrated Lights-Out (iLO)
iLO 是惠普提供的一个远程电源功能的接口,这些功能包括电源管理和服务器监控。要使用此电源管理类型,所有裸机节点都需要一个连接到共享裸机恢复网络的 iLO 接口。启用 ilo
驱动程序,并在节点的 driver_info
中设置以下信息:
-
ilo_address
- iLO 接口 NIC 的 IP 地址。 -
ilo_username
- iLO 用户名。 -
ilo_password
- iLO 密码。
您还必须安装 python-proliantutils
软件包并重启裸机恢复编排器服务:
dnf install python-proliantutils systemctl restart openstack-ironic-conductor.service
# dnf install python-proliantutils
# systemctl restart openstack-ironic-conductor.service
10.6. 转换为下一代电源管理驱动程序
Red Hat OpenStack Platform 现在使用下一代驱动程序(也称为 硬件类型 ),它取代了旧的驱动程序。
下表显示了旧驱动程序和下一代硬件类型的类似比较:
旧驱动程序 | 新硬件类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
在 Red Hat OpenStack Platform (RHOSP) 15 中,这些较旧的驱动程序已被移除,不再能被访问。在升级到 RHOSP 15 之前,您必须更改为新的硬件类型。
流程
检查当前启用的硬件类型列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow source ~/overcloud openstack baremetal driver list --type dynamic
$ source ~/overcloud $ openstack baremetal driver list --type dynamic
如果您使用没有启用的硬件类型驱动程序,请在环境文件中使用
IronicEnabledHardwareTypes
参数来启用驱动程序:Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaults: IronicEnabledHardwareTypes: ipmi,redfish,idrac
parameter_defaults: IronicEnabledHardwareTypes: ipmi,redfish,idrac
保存文件并运行 overcloud 部署命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack overcloud deploy -e [ENVIRONMENT_FILE] -r [ROLES_DATA] -n [NETWORK_DATA]
$ openstack overcloud deploy -e [ENVIRONMENT_FILE] -r [ROLES_DATA] -n [NETWORK_DATA]
确保您包含与 overcloud 相关的所有环境和数据文件。
运行以下命令。将
OLDDRIVER
和NEWDRIVER
变量用于电源管理类型:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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