使用 Ironic 注册硬件¶
在所有服务配置完毕后,您应该将硬件与 Bare Metal 服务注册,并确认 Compute 服务可以看到可用的硬件。一旦节点处于 available(可用)供应状态,Compute 服务就能看到这些节点。
注意
在将节点与 Bare Metal 服务注册后,Compute 服务不会立即收到有关新资源的信息。Compute 服务的资源跟踪器会定期同步,因此对 Bare Metal 服务资源所做的任何更改仅在下次运行该定期任务后才能在 Compute 服务中可见。更多信息请参见 故障排除 部分。
注意
任何对 Compute 服务可见的裸机节点,如果 power(电源)和 management(管理)接口通过 validate(验证)检查,都可以安排工作负载在其上运行。如果您希望将节点排除在 Compute 服务的调度器之外,例如为了对其进行维护,您可以将节点设置为“maintenance”(维护)模式。有关更多信息,请参见 维护模式 部分。
选择驱动程序¶
在注册节点时,最重要的信息是 driver(驱动程序)。有关裸机驱动程序、硬件类型和接口的详细说明,请参见 启用驱动程序和硬件类型。可以使用 driver list(驱动程序列表)命令列出所有主机上启用的所有驱动程序
baremetal driver list
+---------------------+-----------------------+
| Supported driver(s) | Active host(s) |
+---------------------+-----------------------+
| ipmi | localhost.localdomain |
+---------------------+-----------------------+
应根据实际硬件功能和预期功能选择要使用的特定驱动程序。有关更多提示,请参见 Ironic 的驱动程序、硬件类型和硬件接口。
每个驱动程序都有一个 driver properties(驱动程序属性)列表,需要通过节点的 driver_info(驱动程序信息)字段指定,以便驱动程序可以对节点进行操作。此列表由驱动程序使用的硬件接口的属性组成。可以使用 driver property list(驱动程序属性列表)命令获取这些驱动程序属性
$ baremetal driver property list ipmi
+----------------------+-------------------------------------------------------------------------------------------------------------+
| Property | Description |
+----------------------+-------------------------------------------------------------------------------------------------------------+
| ipmi_address | IP address or hostname of the node. Required. |
| ipmi_password | password. Optional. |
| ipmi_username | username; default is NULL user. Optional. |
| ... | ... |
| deploy_kernel | UUID (from Glance) of the deployment kernel. Required. |
| deploy_ramdisk | UUID (from Glance) of the ramdisk that is mounted at boot time. Required. |
+----------------------+-------------------------------------------------------------------------------------------------------------+
标记为 required(必需)的属性必须在节点创建期间或之后不久提供。某些属性可能仅在某些功能需要时才需要。
关于 API 版本¶
从 API 版本 1.11 开始,Bare Metal 服务在其状态机中添加了一种新的初始供应状态 enroll(注册)。当使用此版本或更高版本的 API 时,新节点将获得此状态,而不是 available(可用)。
使用低于 1.11 的 API 版本的现有自动化工具不受影响,因为初始供应状态仍然是 available(可用)。但是,使用 API 版本 1.11 或更高版本可能会破坏现有自动化工具,尤其是在节点创建方面。
openstack baremetal(openstack baremetal)命令行工具尝试协商最新支持的版本,在绝大多数情况下,该版本将高于 1.11。
要为所有命令设置 API 版本,您可以设置环境变量 IRONIC_API_VERSION。对于 OpenStackClient baremetal 插件,请将 OS_BAREMETAL_API_VERSION 变量设置为相同的值。例如
$ export IRONIC_API_VERSION=1.11
$ export OS_BAREMETAL_API_VERSION=1.11
注册流程¶
创建节点¶
本节描述了注册节点并使其可用于供应的主要步骤。为了便于说明,某些步骤是单独显示的,如果需要可以合并。
使用
node create(节点创建)命令在 Bare Metal 服务中创建一个节点。至少,您必须指定驱动程序名称(例如,ipmi)。该命令将返回节点 UUID 以及有关该节点的其他信息。节点的供应状态将为
enroll(注册)$ baremetal node create --driver ipmi +--------------+--------------------------------------+ | Property | Value | +--------------+--------------------------------------+ | uuid | dfc6189f-ad83-4261-9bda-b27258eb1987 | | driver_info | {} | | extra | {} | | driver | ipmi | | chassis_uuid | | | properties | {} | | name | None | +--------------+--------------------------------------+ $ baremetal node show dfc6189f-ad83-4261-9bda-b27258eb1987 +------------------------+--------------------------------------+ | Property | Value | +------------------------+--------------------------------------+ | target_power_state | None | | extra | {} | | last_error | None | | maintenance_reason | None | | provision_state | enroll | | uuid | dfc6189f-ad83-4261-9bda-b27258eb1987 | | console_enabled | False | | target_provision_state | None | | provision_updated_at | None | | maintenance | False | | power_state | None | | driver | ipmi | | properties | {} | | instance_uuid | None | | name | None | | driver_info | {} | | ... | ... | +------------------------+--------------------------------------+
节点也可以通过其逻辑名称以及 UUID 来引用。可以在节点创建期间通过添加
-n选项到node create(节点创建)命令,或者通过使用node set(节点设置)命令更新现有节点来为节点分配名称。有关示例,请参见 逻辑名称。从 API 版本 1.31 开始(以及
python-ironicclient1.13),您可以使用硬件类型选择要与节点一起使用的硬件接口。每个接口都由一个名为<IFACE>_interface的节点字段表示,其中<IFACE>是接口类型,例如boot(启动)。有关详细信息,请参见 启用驱动程序和硬件类型。可以单独设置接口
$ baremetal node set $NODE_UUID --deploy-interface direct --raid-interface agent
也可以在节点创建期间设置
$ baremetal node create --driver ipmi \ --deploy-interface direct \ --raid-interface agent
如果未为某些接口提供值,则将使用 硬件接口的默认值。
使用所需的驱动程序属性更新节点的
driver_info(驱动程序信息),以便 Bare Metal 服务可以管理该节点$ baremetal node set $NODE_UUID \ --driver-info ipmi_username=$USER \ --driver-info ipmi_password=$PASS \ --driver-info ipmi_address=$ADDRESS
注意
如果 IPMI 在 623(默认值)以外的端口上运行,则必须通过指定
ipmi_port(ipmi 端口)值将其添加到driver_info(驱动程序信息)中。例如$ baremetal node set $NODE_UUID --driver-info ipmi_port=$PORT_NUMBER
您还可以通过多次传递 –driver-info(驱动程序信息)选项,在节点创建期间指定所有
driver_info(驱动程序信息)参数$ baremetal node create --driver ipmi \ --driver-info ipmi_username=$USER \ --driver-info ipmi_password=$PASS \ --driver-info ipmi_address=$ADDRESS
有关驱动程序属性的详细信息,请参见 选择驱动程序。
指定与节点驱动程序兼容的部署内核和 ramdisk,例如
$ baremetal node set $NODE_UUID \ --driver-info deploy_kernel=$DEPLOY_VMLINUZ_UUID \ --driver-info deploy_ramdisk=$DEPLOY_INITRD_UUID
有关详细信息,请参见 将镜像添加到镜像服务。
您可以选择性地在节点的
driver_info(驱动程序信息)中指定供应和/或清理网络的 UUID 或名称。neutron(中子)网络接口需要provisioning_network(供应网络)和cleaning_network(清理网络),而flat(平面)网络接口需要在配置或节点上设置cleaning_network(清理网络)。例如$ baremetal node set $NODE_UUID \ --driver-info cleaning_network=$CLEAN_UUID_OR_NAME \ --driver-info provisioning_network=$PROVISION_UUID_OR_NAME
如果您使用 托管检查,您还可以以相同的方式配置
inspection_network(检查网络)。有关详细信息,请参见 配置租户网络。
您还必须告知 Bare Metal 服务属于节点的网络接口卡,方法是使用每个 NIC 的 MAC 地址创建端口。这些 MAC 地址将在实例供应期间传递给网络服务,并用于相应地配置网络
$ baremetal port create $MAC_ADDRESS --node $NODE_UUID
注意
当要从 Bare Metal 服务中删除节点时,用于删除端口的命令是
baremetal port delete <port uuid>。在这样做时,重要的是要确保 baremetal 节点不在maintenance(维护)模式下,因为用于防止使 Neutron 虚拟接口 (VIF) 孤立的保护逻辑将被覆盖。
添加调度信息¶
为节点分配一个 resource class(资源类)。resource class(资源类)应代表数据中心中的硬件类别,该类别对应于 Compute flavor(风味)。
例如,让我们将硬件分成这三个组
具有大量 RAM 和强大 CPU 的节点,用于计算任务,
具有强大 GPU 的节点,用于 OpenCL 计算,
用于开发和测试的较小节点。
我们可以定义三个资源类来反映这些硬件组,分别命名为
large-cpu(大型 CPU)、large-gpu(大型 GPU)和small(小型)。然后,对于每个硬件组中的每个节点,我们将通过以下方式适当地设置其resource_class$ baremetal node set $NODE_UUID --resource-class $CLASS_NAME
--resource-class(资源类)参数也可以在创建节点时使用$ baremetal node create --driver $DRIVER --resource-class $CLASS_NAME
要将资源类用于调度,您需要更新 flavor(风味),如 为 Bare Metal 服务创建 flavor 中所述。
注意
这对于独立部署不是必需的,仅适用于那些使用 Compute 服务来供应裸机实例的部署。
更新节点的属性以匹配节点的实际硬件。这些是可选的。如果提供,
memory_mb(内存 MB)可用于检查实例镜像是否适合节点的内存$ baremetal node set $NODE_UUID \ --property memory_mb=$RAM_MB \ --property local_gb=$DISK_GB
如上所述,这些也可以通过多次传递 –property(属性)选项到
node create(节点创建)来指定$ baremetal node create --driver ipmi \ --driver-info ipmi_username=$USER \ --driver-info ipmi_password=$PASS \ --driver-info ipmi_address=$ADDRESS \ --property memory_mb=$RAM_MB \ --property local_gb=$DISK_GB
这些值也可以在 硬件检查 期间发现。
注意
提供的
local_gb(本地 GB)属性值应与您将要部署到的根设备的尺寸相匹配。默认情况下,ironic-python-agent(ironic-python-agent)会选择小于 4 GiB 的最小磁盘。如果您通过使用根设备提示(请参见 指定部署磁盘(根设备提示))覆盖此逻辑,则
local_gb(本地 GB)值应与选定的目标磁盘的尺寸相匹配。如果您希望根据硬件功能对实例进行更高级的调度,您可以将元数据添加到每个节点,这些元数据将暴露给 Compute 调度器(请参见:ComputeCapabilitiesFilter)。对此的完整说明超出了本文档的范围。可以通过特殊的
capabilities(功能)节点属性来完成$ baremetal node set $NODE_UUID \ --property capabilities=key1:val1,key2:val2
某些功能也可以在 硬件检查 期间发现。
如果您希望根据裸机节点的定性属性对实例进行高级调度,您可以将 trait(特征)添加到每个裸机节点,这些 trait 将暴露给 Compute 调度器(请参见:基于 trait 的调度,了解 Bare Metal 服务中 trait 的更深入讨论)。例如,要添加标准 trait
HW_CPU_X86_VMX和自定义 traitCUSTOM_TRAIT1到一个节点$ baremetal node add trait $NODE_UUID \ CUSTOM_TRAIT1 HW_CPU_X86_VMX
验证节点信息¶
要检查 Bare Metal 服务是否具有驱动程序正常运行所需的最低信息,您可以
validate(验证)它$ baremetal node validate $NODE_UUID +------------+--------+--------+ | Interface | Result | Reason | +------------+--------+--------+ | boot | True | | | console | True | | | deploy | True | | | inspect | True | | | management | True | | | network | True | | | power | True | | | raid | True | | | storage | True | | +------------+--------+--------+
如果节点验证失败,每个驱动程序接口将返回有关失败原因的信息
$ baremetal node validate $NODE_UUID +------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+ | Interface | Result | Reason | +------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+ | boot | True | | | console | None | not supported | | deploy | False | Cannot validate iSCSI deploy. Some parameters were missing in node's instance_info. Missing are: ['root_gb', 'image_source'] | | inspect | True | | | management | False | Missing the following IPMI credentials in node's driver_info: ['ipmi_address']. | | network | True | | | power | False | Missing the following IPMI credentials in node's driver_info: ['ipmi_address']. | | raid | None | not supported | | storage | True | | +------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+
当与 Bare Metal 服务一起使用 Compute 服务时,由于缺少镜像信息,可以忽略部署接口的验证错误。您可以继续注册流程。此信息将在请求实例时由 Compute 服务设置
$ baremetal node validate $NODE_UUID +------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Interface | Result | Reason | +------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | boot | False | Cannot validate image information for node because one or more parameters are missing from its instance_info. Missing are: ['ramdisk', 'kernel', 'image_source'] | | console | True | | | deploy | False | Cannot validate image information for node because one or more parameters are missing from its instance_info. Missing are: ['ramdisk', 'kernel', 'image_source'] | | inspect | True | | | management | True | | | network | True | | | power | True | | | raid | None | not supported | | storage | True | | +------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
使节点可用于部署¶
为了使节点可用于在其上部署工作负载,节点必须处于 available(可用)供应状态。为此,必须将节点从 enroll(注册)状态移动到 manageable(可管理)状态,然后再移动到 available(可用)状态。
注意
如果使用 API 版本 1.10 或更早版本,则可以跳过此部分。
在创建节点并在其初始供应状态 enroll(注册)之前,需要在节点上配置基本电源和端口信息。Bare Metal 服务需要此信息,因为它在将节点从 enroll(注册)过渡到 manageable(可管理)状态时,会验证它是否能够控制该节点。
要将节点从 enroll(注册)移动到 manageable(可管理)供应状态
$ baremetal node manage $NODE_UUID
$ baremetal node show $NODE_UUID
+------------------------+--------------------------------------------------------------------+
| Property | Value |
+------------------------+--------------------------------------------------------------------+
| ... | ... |
| provision_state | manageable | <- verify correct state
| uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
| ... | ... |
+------------------------+--------------------------------------------------------------------+
注意
由于这是一个异步调用,baremetal node manage(baremetal 节点管理)的响应不会指示转换是否成功。您可以通过 baremetal node show(baremetal 节点显示)检查操作的状态。如果成功,provision_state(供应状态)将处于所需的状态。如果失败,将在节点的 last_error(最后错误)中提供信息。
当节点从 manageable(可管理)状态移动到 available(可用)供应状态时,如果配置为这样做(请参见 配置 Bare Metal 服务进行清理),节点将进行自动清理。
要将节点从 manageable(可管理)状态移动到 available(可用)供应状态
$ baremetal node provide $NODE_UUID
$ baremetal node show $NODE_UUID
+------------------------+--------------------------------------------------------------------+
| Property | Value |
+------------------------+--------------------------------------------------------------------+
| ... | ... |
| provision_state | available | < - verify correct state
| uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
| ... | ... |
+------------------------+--------------------------------------------------------------------+
有关裸机服务的状态机的更多详细信息,请参阅 裸机状态机 文档。
将节点映射到计算单元¶
如果使用计算服务进行调度,并且未按照 配置计算服务以使用裸机服务 中所述设置 discover_hosts_in_cells_interval,则登录到任何控制器节点并运行以下命令,将新节点映射到计算单元
nova-manage cell_v2 discover_hosts
逻辑名称¶
节点也可以通过逻辑名称以及其 UUID 来引用。名称可以在创建节点时通过在 node create 命令中添加 -n 选项,或者通过使用 node set 命令更新现有节点来分配。
节点名称必须唯一,并符合
在以下示例中,节点命名为“example”
$ baremetal node create --driver ipmi --name example
或者
$ baremetal node set $NODE_UUID --name example
一旦分配了逻辑名称,就可以交替使用名称或 UUID 来引用节点
$ baremetal node create --driver ipmi --name example
+--------------+--------------------------------------+
| Property | Value |
+--------------+--------------------------------------+
| uuid | 71e01002-8662-434d-aafd-f068f69bb85e |
| driver_info | {} |
| extra | {} |
| driver | ipmi |
| chassis_uuid | |
| properties | {} |
| name | example |
+--------------+--------------------------------------+
$ baremetal node show example
+------------------------+--------------------------------------+
| Property | Value |
+------------------------+--------------------------------------+
| target_power_state | None |
| extra | {} |
| last_error | None |
| updated_at | 2015-04-24T16:23:46+00:00 |
| ... | ... |
| instance_info | {} |
+------------------------+--------------------------------------+
硬件接口的默认值¶
对于硬件类型,用户可以在创建或更新节点时请求其中一种启用的实现,如 创建节点 中所述。
在创建节点时,或者更改节点的硬件类型时,如果未为某个接口提供值,则使用默认值。可以使用驱动程序详细信息命令列出硬件类型的当前启用和默认接口(针对您的部署)
$ baremetal driver show ipmi
+-------------------------------+----------------+
| Field | Value |
+-------------------------------+----------------+
| default_boot_interface | pxe |
| default_console_interface | no-console |
| default_deploy_interface | direct |
| default_inspect_interface | no-inspect |
| default_management_interface | ipmitool |
| default_network_interface | flat |
| default_power_interface | ipmitool |
| default_raid_interface | no-raid |
| default_vendor_interface | no-vendor |
| enabled_boot_interfaces | pxe |
| enabled_console_interfaces | no-console |
| enabled_deploy_interfaces | direct |
| enabled_inspect_interfaces | no-inspect |
| enabled_management_interfaces | ipmitool |
| enabled_network_interfaces | flat, noop |
| enabled_power_interfaces | ipmitool |
| enabled_raid_interfaces | no-raid, agent |
| enabled_vendor_interfaces | no-vendor |
| hosts | ironic-host-1 |
| name | ipmi |
| type | dynamic |
+-------------------------------+----------------+
默认值计算如下
如果设置了配置选项
default_<IFACE>_interface(其中<IFACE>是接口名称),则其值将用作默认值。如果此实现与节点的硬件类型不兼容,则会向用户返回错误。在这种情况下,必须为节点的
<IFACE>_interface字段提供显式值。否则,将使用操作员启用的第一个受支持的实现作为默认值。
受支持的实现列表是通过获取节点硬件类型支持的实现与
enabled_<IFACE>_interfaces选项(其中<IFACE>是接口名称)启用的实现之间的交集来计算的。计算保留项目顺序,如硬件类型所提供。如果受支持的实现列表不为空,则使用第一个实现。否则,将向用户返回错误。在这种情况下,必须为
<IFACE>_interface字段提供显式值。
有关配置的更多详细信息,请参阅 启用驱动程序和硬件类型。
示例¶
考虑以下配置(为简单起见已缩短)
[DEFAULT]
enabled_hardware_types = ipmi,redfish
enabled_console_interfaces = no-console,ipmitool-shellinabox
enabled_deploy_interfaces = direct
enabled_management_interfaces = ipmitool,redfish
enabled_power_interfaces = ipmitool,redfish
default_deploy_interface = ansible
使用 ipmi 驱动程序创建新节点,且未指定任何接口
$ export OS_BAREMETAL_API_VERSION=1.31
$ baremetal node create --driver ipmi
+--------------+--------------------------------------+
| Property | Value |
+--------------+--------------------------------------+
| uuid | dfc6189f-ad83-4261-9bda-b27258eb1987 |
| driver_info | {} |
| extra | {} |
| driver | ipmi |
| chassis_uuid | |
| properties | {} |
| name | None |
+--------------+--------------------------------------+
然后,将用于此示例中节点的接口的默认值计算如下
- deploy
为
default_deploy_interface提供了显式值ansible,因此使用它。- power
未配置默认值。
ipmi硬件类型仅支持ipmitoolpower。受支持的 power 接口与enabled_power_interfaces选项中提供的值之间的交集只有一个项目:ipmitool。使用它。- console
未配置默认值。
ipmi硬件类型支持以下控制台接口:ipmitool-socat、ipmitool-shellinabox和no-console(顺序)。在这三个接口中,只有两个已启用:no-console和ipmitool-shellinabox(顺序无关紧要)。交集包含ipmitool-shellinabox和no-console。使用第一个项目,即ipmitool-shellinabox。- management
按照与power 相同的计算,使用
ipmitoolmanagement 接口。
硬件检查¶
裸机服务支持硬件检查,简化了节点注册 - 请参阅 硬件检查 以获取详细信息。