使用 Bare Metal 服务部署

本指南解释了如何使用 Ironic 部署没有前端服务(例如 OpenStack Compute (nova) 或 Metal3)的节点。

注意

为了简化此任务,您可以使用 metalsmith 工具,它为最常见的情况提供了方便的 CLI。

分配

分配是一种查找和预留适合部署的节点的方式。创建分配时,将搜索可用节点列表,以查找具有给定资源类特性的节点,类似于在 OpenStack Compute 味道 中所做的那样。资源类是必需的,例如

$ baremetal allocation create --resource-class baremetal --wait
+-----------------+--------------------------------------+
| Field           | Value                                |
+-----------------+--------------------------------------+
| candidate_nodes | []                                   |
| created_at      | 2019-04-03T12:18:26+00:00            |
| extra           | {}                                   |
| last_error      | None                                 |
| name            | None                                 |
| node_uuid       | 5d946337-b1d9-4b06-8eda-4fb77e994a0d |
| resource_class  | baremetal                            |
| state           | active                               |
| traits          | []                                   |
| updated_at      | 2019-04-03T12:18:26+00:00            |
| uuid            | e84f5d60-84f1-4701-a635-10ff90e2f3b0 |
+-----------------+--------------------------------------+

注意

分配处理速度很快,但仍然是异步的。使用 --wait 参数等待结果。

如果分配成功,它会将节点的 instance_uuid 设置为分配 UUID。可以从分配的 node_uuid 字段中检索节点的 UUID。

当关联节点被取消配置时,分配会自动删除。如果您没有配置节点,则有责任删除分配。

有关如何使用分配的更多信息,请参阅 分配 API 参考

填充实例信息

节点的 instance_info 字段是一个 JSON 对象,其中包含在裸机上部署实例所需的所有信息。必须在部署前填充它,并在拆卸时自动清除。

镜像信息

您需要在节点的 instance_info 中指定镜像信息(参见 创建实例镜像

  • image_source - 整个磁盘或根分区镜像的 URL,必需。支持以下方案:http://https://file://。文件必须可被 conductor 访问。如果缺少方案,则假定为 Image Service (glance) 镜像 UUID。

  • 如果镜像源需要 HTTP(s) Basic Authentication RFC 7616,则必须将相关的身份验证策略配置为 http_basic,并在 ironic 全局配置文件中提供凭据。有关身份验证策略选择的更多信息,请参见 用户镜像服务器的 HTTP(s) 身份验证策略

  • root_gb - 根分区的大小,分区镜像需要。

    注意

    Bare Metal 服务的旧版本即使对于整个磁盘镜像也需要 root_gb 为正整数。

  • image_checksum - 由 image_source 指定的镜像的 MD5 校验和,仅在使用 直接部署 时需要。

    可以通过 image_os_hash_algoimage_os_hash_value 字段支持其他校验和算法。它们可以代替 image_checksum 字段使用。

    警告

    如果您的操作系统正在 FIPS 140-2 模式下运行,MD5 将不可用,并且您必须使用 SHA256 或其他现代算法。

    从 ironic-python-agent 的 Stein 版本开始,校验和文件的 URL 也可以,例如使用生成的文件

    $ cd /path/to/http/root
    $ md5sum *.img > checksums
    
  • kernelramdisk - 目标操作系统的内核和 initramfs 的 HTTP(s) 或文件 URL。必须仅为分区镜像添加,并且仅当需要网络启动时。支持与 image_source 相同的方案。

一个使用本地启动的分区镜像示例

baremetal node set $NODE_UUID \
    --instance-info image_source=http://image.server/my-image.qcow2 \
    --instance-info image_checksum=1f9c0e1bad977a954ba40928c1e11f33 \
    --instance-info image_type=partition \
    --instance-info root_gb=10

使用 SHA256 哈希

baremetal node set $NODE_UUID \
    --instance-info image_source=http://image.server/my-image.qcow2 \
    --instance-info image_os_hash_algo=sha256 \
    --instance-info image_os_hash_value=a64dd95e0c48e61ed741ff026d8c89ca38a51f3799955097c5123b1705ef13d4 \
    --instance-info image_type=partition \
    --instance-info root_gb=10

如果您使用网络启动(或 Ironic 之前的 Yoga),则必须设置另外两个字段

baremetal node set $NODE_UUID \
    --instance-info image_source=http://image.server/my-image.qcow2 \
    --instance-info image_checksum=1f9c0e1bad977a954ba40928c1e11f33 \
    --instance-info image_type=partition \
    --instance-info kernel=http://image.server/my-image.kernel \
    --instance-info ramdisk=http://image.server/my-image.initramfs \
    --instance-info root_gb=10

使用整个磁盘镜像和校验和 URL

baremetal node set $NODE_UUID \
    --instance-info image_source=http://image.server/my-image.qcow2 \
    --instance-info image_checksum=http://image.server/my-image.qcow2.CHECKSUM

注意

某些硬件类型和接口可能需要提供其他或不同的字段。请参阅 Ironic 的驱动程序、硬件类型和硬件接口 下的特定指南。

当使用低 RAM 节点和不是 RAW 格式的 http:// 镜像时,您可能希望将它们缓存在本地,转换为 raw 并在 conductor 的 HTTP 服务器上提供

baremetal node set $NODE_UUID --instance-info image_download_source=local

对于使用整个磁盘镜像的软件 RAID,必须提供根分区的根 UUID,以便正确安装引导加载程序

baremetal node set $NODE_UUID --instance-info image_rootfs_uuid=<uuid>

功能

  • 启动模式 可以针对每个实例指定

    baremetal node set $NODE_UUID \
        --instance-info capabilities='{"boot_mode": "uefi"}'
    

    否则,将使用节点 properties 中的 boot_mode 功能。

    警告

    这两个设置不能相互矛盾。

    注意

    此功能是在 Wallaby 版本系列中引入的,之前 ironic 使用单独的 instance_info/deploy_boot_mode 字段。

  • 从 Ussuri 版本开始,您可以设置每个实例的 根设备提示

    baremetal node set $NODE_UUID \
        --instance-info root_device='{"wwn": "0x4000cca77fc4dba1"}'
    

    此设置将覆盖 properties 中的任何先前设置,并在取消部署时删除。

覆盖硬件接口

临时访问节点的非管理员可能希望指定不同的节点接口。但是,允许他们直接在节点上设置这些接口值是存在问题的,因为没有自动的方法来确保原始接口值被恢复。

为了临时覆盖硬件接口,只需在 instance_info 中设置适当的值即可。例如,如果您想覆盖节点的存储接口,请运行以下命令

baremetal node set $NODE_UUID --instance-info storage_interface=cinder

instance_info 值在节点清理后一直存在。

注意

此功能从 Wallaby 版本开始可用。

附加虚拟接口

如果使用 OpenStack Networking 服务 (neutron),您可以在部署前将其端口作为 VIF 附加到节点

baremetal node vif attach $NODE_UUID $PORT_UUID

警告

这些是 neutron 端口,不是 ironic 端口!

VIF 在取消配置时会自动分离。

部署

  1. 验证所有参数是否正确

    $ baremetal node validate $NODE_UUID
    +------------+--------+----------------------------------------------------------------+
    | Interface  | Result | Reason                                                         |
    +------------+--------+----------------------------------------------------------------+
    | boot       | True   |                                                                |
    | console    | False  | Missing 'ipmi_terminal_port' parameter in node's driver_info.  |
    | deploy     | True   |                                                                |
    | inspect    | True   |                                                                |
    | management | True   |                                                                |
    | network    | True   |                                                                |
    | power      | True   |                                                                |
    | raid       | True   |                                                                |
    | storage    | True   |                                                                |
    +------------+--------+----------------------------------------------------------------+
    
  2. 现在您可以开始部署,运行

    baremetal node deploy $NODE_UUID
    
  3. 从 Wallaby 版本开始,您还可以请求自定义部署步骤,请参阅 请求步骤 以获取详细信息。

使用 config drive 部署

配置驱动是一个小型镜像,用于存储特定于实例的元数据,并以 config-2 标签的形式呈现给实例作为磁盘分区。请参阅 启用配置驱动 (configdrive) 以获取详细说明。

config drive 可以作为整个 ISO 9660 镜像或作为构建镜像的 JSON 输入提供。必须在实例镜像上运行第一启动服务,例如 cloud-init,才能应用配置。

客户端构建 config drive

对于配置驱动的格式,Bare Metal 服务期望一个 gzippedbase64 编码的带有 config-2 标签的 ISO 9660 文件。baremetal 客户端 可以生成 预期格式 的配置驱动。通过 --config-drive 参数将包含要注入其中的文件的目录路径传递给 baremetal node deploy 命令,例如

baremetal node deploy $NODE_UUID --config-drive /dir/configdrive_files

注意

config drive 也可以是带有 VFAT 文件系统的磁盘块,而不是 ISO 9660。但由于 ISO 9660 在操作系统中得到广泛支持,因此可能不需要它。

服务器端构建 config drive

从 Stein 版本和 ironicclient 2.7.0 开始,您可以通过提供带有 meta_datauser_datanetwork_data 键(全部可选)的 JSON 来请求在服务器端构建 configdrive,例如

baremetal node deploy $node_identifier \
    --config-drive '{"meta_data": {"hostname": "server1.cluster"}}'

注意

当使用此功能时,主机名默认为节点的名称或 UUID。

可以提供 SSH 公钥作为映射

baremetal node deploy $NODE_UUID \
    --config-drive '{"meta_data": {"public_keys": {"0": "ssh key contents"}}}'

如果使用 cloud-init,其配置可以作为 user_data 提供,例如

baremetal node deploy $NODE_UUID \
    --config-drive '{"user_data": "#cloud-config\n{\"users\": [{\"name\": ...}]}"}'

警告

用户数据是一个字符串,不是 JSON! 另外请注意,需要前缀,例如 #cloud-config,请参阅 用户数据格式

某些第一启动服务支持 OpenStack 网络数据格式 中的网络配置。可以在 config drive 的 network_data 字段中提供它。

Ramdisk 启动

高级操作员,特别是那些使用临时工作负载的操作员,可能会发现将节点显式视为始终从 Ramdisk 启动的节点更有用。请参阅 启动 Ramdisk 或 ISO 以获取详细信息。