How-To¶
使用 baremetal CLI¶
如果您希望以无身份验证模式使用 baremetal CLI,则有以下两种配置身份验证参数的选项。
clouds.yaml¶
在安装期间,Bifrost 会创建一个 clouds.yaml 文件,其中包含访问 Ironic 所需的凭据。始终可用一个名为 bifrost 的云。例如
export OS_CLOUD=bifrost
baremetal node list
注意
此前,曾提供一个名为 bifrost-inspector 的单独云用于内省命令。现在已弃用,应始终使用主要的 bifrost 云。
环境变量¶
为了方便起见,会在当前用户的家目录中创建一个名为 openrc 的环境变量文件,其中包含这些变量的默认值,并且可以引用该文件以允许 CLI 连接到本地 Ironic 安装。例如
. ~/openrc bifrost
baremetal node list
这应该显示一个节点表,或者如果没有在 Ironic 中注册任何节点,则不显示任何内容。
安装 OpenStack CLI¶
从 Victoria 版本开始,只有在启用 Keystone 时才会安装 openstack 命令。安装 python-openstackclient Python 包以获取此命令。
库存文件格式¶
为了注册硬件,自然需要硬件的清单。在使用动态清单模块和配套角色时,清单可以以三种方式提供,所有这些最终都转换为 Ansible 解析的 JSON 数据。
当前的方法是使用 JSON 或 YAML 文档,清单解析器将将其转换为 Ansible 的数据。
JSON 格式类似于 ironic 内部使用的数据结构。
name、uuid、driver和properties字段直接映射到 ironic。只有driver是必需的。注意
如果启用了内省,大多数属性都会自动填充。但是,建议为具有多个磁盘的节点设置 根设备。
driver_info字段格式与 OpenStack Ansible 集合中的一种匹配,并且出于遗留原因可以使用嵌套结构power、deploy、management和console。注意
使用集合的较新版本,您应该直接将所有字段放在
driver_info下。nics字段是用于创建的端口列表。必需的字段是mac- 端口的 MAC 地址。
示例
{
"testvm1": {
"name": "testvm1",
"driver": "ipmi",
"driver_info": {
"ipmi_address": "192.168.122.1",
"ipmi_username": "admin",
"ipmi_password": "pa$$w0rd"
},
"nics": [
{
"mac": "52:54:00:f9:32:f6"
}
],
"properties": {
"cpu_arch": "x86_64",
"root_device": {"wwn": "0x4000cca77fc4dba1"}
}
}
}
覆盖实例信息¶
这种格式的额外优势是易于配置参数注入,这有可能允许用户通过在 instance_info 变量中定义适当的设置,将不同的操作系统镜像置备到不同的硬件机箱上,例如
{
"testvm1": {
"uuid": "00000000-0000-0000-0000-000000000001",
"name": "testvm1",
"driver": "redfish",
"driver_info": {
"redfish_address": "https://bmc.myhost.com",
"redfish_system_id": "/redfish/v1/Systems/11",
"redfish_username": "admin",
"redfish_password": "pa$$w0rd",
},
"nics": [
{
"mac": "52:54:00:f9:32:f6"
}
],
"properties": {
"cpu_arch": "x86_64",
"root_device": {"wwn": "0x4000cca77fc4dba1"}
},
"instance_info": {
"image_source": "http://image.server/image.qcow2",
"image_checksum": "<md5/sha256/sha512 checksum>",
"configdrive": {
"meta_data": {
"public_keys": {"0": "ssh-rsa ..."},
"hostname": "vm1.example.com"
}
}
}
}
}
instance_info 格式在 Ironic 部署指南 中有文档说明。以这种方式填充 configdrive 是一种 Bifrost 特有的功能,但 configdrive 本身遵循 Ironic 格式。
可以使用 JSON 和 YAML 格式以及主机特定变量注入的示例,可以在 playbooks/inventory/ 文件夹中找到。
静态网络配置¶
在构建 configdrive 时,Bifrost 可以在其中嵌入静态网络配置。此配置将由 first-boot 服务(例如 cloud-init 或 glean)应用。可以设置以下字段
ipv4_address节点的 IPv4 地址。如果缺失,则配置不会提供在 configdrive 中。
当设置
ipv4_address时,它也用作ansible_ssh_host的默认值。因此,只要您使用 Bifrost 的清单插件,就可以对已部署的主机运行 SSH 命令。此参数也可用于 DHCP 配置。
ipv4_subnet_maskIP 地址的子网掩码。默认为 255.255.255.0。
ipv4_interface_mac要配置的接口的 MAC 地址。如果缺失,则使用库存中定义的第一个 NIC 的 MAC 地址。
ipv4_gateway默认路由器的 IPv4 地址。仅为测试用例提供默认值。
ipv4_nameserver用于名称解析的服务器(字符串或列表)。
network_mtu链路使用的 MTU。
例如
{
"testvm1": {
"name": "testvm1",
"driver": "redfish",
"driver_info": {
"redfish_address": "https://bmc.myhost.com",
"redfish_system_id": "/redfish/v1/Systems/11",
"redfish_username": "admin",
"redfish_password": "pa$$w0rd",
},
"ipv4_address": "192.168.122.42",
"ipv4_subnet_mask": "255.255.255.0",
"ipv4_gateway": "192.168.122.1",
"ipv4_nameserver": "8.8.8.8",
"nics": [
{
"mac": "52:54:00:f9:32:f6"
}
],
"properties": {
"cpu_arch": "x86_64",
"root_device": {"wwn": "0x4000cca77fc4dba1"}
}
}
}
警告
静态网络配置只有在您让 Bifrost 生成 configdrive 时才以这种方式工作。
注册硬件¶
从 Wallaby 周期开始,您可以使用 bifrost-cli 进行注册
./bifrost-cli enroll /tmp/baremetal.json
请注意,注册是一次性操作。Ansible 模块不会同步现有节点的数据。目前您应该使用 ironic CLI 手动执行此操作。
此外,重要的是要注意,注册的 playbook 根据 ipmi_bridging 设置分为三个单独的 playbook。
部署硬件¶
在注册节点后,可以对其进行部署。Bifrost 旨在利用配置驱动程序向每个主机传递基本配置信息。此配置信息包括一个 SSH 密钥,允许用户登录到系统。
从 Yoga 周期开始,您可以使用 bifrost-cli 进行部署。如果您使用 bifrost-cli 进行安装,则应传递其环境变量以及库存文件(请参阅 库存文件格式)
./bifrost-cli deploy /tmp/baremetal.json \
-e @baremetal-install-env.json
注意
默认情况下,playbook 会在部署开始后返回。传递 --wait 标志以等待完成。
库存文件可以覆盖一些部署设置,例如镜像甚至完整的 instance_info,每个节点。如果您省略它,Ironic 中的所有节点都将使用 Bifrost 默认值进行部署
./bifrost-cli deploy -e @baremetal-install-env.json
命令行参数¶
默认情况下,playbook 使用在安装期间下载或构建的镜像。您也可以使用自定义镜像
./bifrost-cli deploy -e @baremetal-install-env.json \
--image http://example.com/images/my-image.qcow2 \
--image-checksum 91ebfb80743bb98c59f787c9dc1f3cef \
注意
请参阅 OpenStack 镜像指南,了解获取客户机镜像的选项和位置。
您还可以提供自定义 configdrive URL(或其内容),而不是 Bifrost 为您构建的 configdrive
./bifrost-cli deploy -e @baremetal-install-env.json \
--configdrive '{"meta_data": {"public_keys": {"0": "'"$(cat ~/.ssh/id_rsa.pub)"'"}}}' \
文件镜像不需要校验和
./bifrost-cli deploy -e @baremetal-install-env.json \
--image file:///var/lib/ironic/custom-image.qcow2
注意
文件必须可供 Ironic 读取。您的家目录通常不是。
可以通过指定镜像类型来部署分区镜像
./bifrost-cli deploy -e @baremetal-install-env.json \
--image http://example.com/images/my-image.qcow2 \
--image-checksum 91ebfb80743bb98c59f787c9dc1f3cef \
--partition
注意
默认根分区大小为 10 GiB。设置 deploy_root_gb 参数以覆盖或使用 first-boot 服务(例如 cloud-init)自动扩展根分区。
重新部署硬件¶
如果需要重新部署主机,可以使用动态重新部署 playbook
export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.json
cd playbooks
ansible-playbook -vvvv -i inventory/bifrost_inventory.py redeploy-dynamic.yaml
此 playbook 将卸载主机,然后进行部署,允许在每个步骤中配置主机转换的超时时间。
使用 playbook 而不是 bifrost-cli¶
直接使用 playbook 允许您完全控制 Bifrost 执行的内容,使用哪些变量以及使用哪些库存。
利用动态清单模块,注册就像将 BIFROST_INVENTORY_SOURCE 环境变量设置为您的库存数据源,然后执行注册 playbook 那么简单
export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.json
cd playbooks
ansible-playbook -vvvv -i inventory/bifrost_inventory.py enroll-dynamic.yaml
要使用基于动态清单的部署
export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.json
cd playbooks
ansible-playbook -vvvv -i inventory/bifrost_inventory.py deploy-dynamic.yaml
如果您使用 bifrost-cli 进行安装,则应传递其环境变量
export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.json
cd playbooks
ansible-playbook -vvvv \
-i inventory/bifrost_inventory.py \
-e @../baremetal-install-env.json \
deploy-dynamic.yaml
操作系统部署和配置¶
默认情况下,Bifrost 部署一个配置驱动程序,其中包含用户的 SSH 公钥、主机名以及可以由 glean 或 cloud-init 读取/解析的 network_data.json 形式的网络配置。这允许在裸机上部署 Ubuntu、CentOS 或 Fedora “租户”。
默认情况下,Bifrost 使用一种名为 simple-init 的实用程序,该实用程序利用前面提到的 glean 实用程序来应用网络配置。这意味着默认情况下,根文件系统可能不会自动扩展以消耗整个磁盘,这可能或可能不取决于操作需求。这取决于您使用的基本 OS 镜像,以及该镜像是否包含支持。目前,标准的 Ubuntu cloud 镜像包含 cloud-init,它将扩展根分区,但是 ubuntu-minimal 镜像不包含 cloud-init,因此不会自动扩展根分区。
由于设计的性质,用户可以轻松地将自动增长或重新配置步骤导入要部署的镜像中,或通过自定义 Ansible playbook 在部署后步骤中导入。
为了能够通过 SSH 访问节点,请确保 ./playbooks/inventory/group_vars/baremetal 中的 ssh_public_key_path 值指向有效的公钥文件,或者在命令行上设置 ssh_public_key_path 变量,例如 -e ssh_public_key_path=~/.ssh/id_rsa.pub。
高级主题¶
使用远程 ironic¶
当 ironic 安装在远程服务器上时,应将包含目标服务器的常规 ansible 清单添加到 ansible。可以通过指定一个包含文件的目录来实现,该目录中的每个文件都将是 ansible 清单的一部分。请参阅 ansible 文档 https://docs.ansible.org.cn/ansible/intro_dynamic_inventory.html#using-inventory-directories-and-multiple-inventory-sources。示例
export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.json
cd playbooks
rm inventory/*.example
ansible-playbook -vvvv -i inventory/ enroll-dynamic.yaml
构建自定义 Ironic Python Agent (IPA) 镜像¶
内容已移动,请参阅 构建自定义 Ironic Python Agent (IPA) 镜像。
配置集成的 DHCP 服务器¶
内容已移动,请参阅 配置集成的 DHCP 服务器。
将 Bifrost 与 Keystone 配合使用¶
内容已移动,请参阅 使用 Keystone。