使用 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_algo和image_os_hash_value字段支持其他校验和算法。它们可以代替image_checksum字段使用。警告
如果您的操作系统正在 FIPS 140-2 模式下运行,MD5 将不可用,并且您必须使用 SHA256 或其他现代算法。
从 ironic-python-agent 的 Stein 版本开始,校验和文件的 URL 也可以,例如使用生成的文件
$ cd /path/to/http/root $ md5sum *.img > checksums
kernel、ramdisk- 目标操作系统的内核和 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 在取消配置时会自动分离。
部署¶
验证所有参数是否正确
$ 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 | | +------------+--------+----------------------------------------------------------------+
现在您可以开始部署,运行
baremetal node deploy $NODE_UUID
从 Wallaby 版本开始,您还可以请求自定义部署步骤,请参阅 请求步骤 以获取详细信息。
使用 config drive 部署¶
配置驱动是一个小型镜像,用于存储特定于实例的元数据,并以 config-2 标签的形式呈现给实例作为磁盘分区。请参阅 启用配置驱动 (configdrive) 以获取详细说明。
config drive 可以作为整个 ISO 9660 镜像或作为构建镜像的 JSON 输入提供。必须在实例镜像上运行第一启动服务,例如 cloud-init,才能应用配置。
客户端构建 config drive¶
对于配置驱动的格式,Bare Metal 服务期望一个 gzipped 和 base64 编码的带有 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_data、user_data 和 network_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 以获取详细信息。