一 、网络配置说明

ironic_dnsmasq_dhcp_ranges为ironic pxe网络,使用管理网同段剩余ip即可。

inspect、provider、clean使用用一个neutron网络,并需要打通管理网、bmc网络

当前测试环境neutron是用的flat ,不需要切换vlan,所以不需要neutron对接交换机,否则需要对接交换机。

二、/etc/kolla/globals.yml配置

enable_ironic: "yes"
enable_ironic_inspector: "yes"
enable_nova_serialconsole_proxy: "yes"
ironic_dnsmasq_interface: "eno3"
#指定clean网络
ironic_cleaning_network: "provider"
# pxe网络
ironic_dnsmasq_dhcp_ranges:
  - range: "192.168.77.25,192.168.77.30"
    routers: "192.168.77.254"
ironic_dnsmasq_boot_file: "pxelinux.0"
ironic_inspector_kernel_cmdline_extras: ['ipa-lldp-timeout=90.0', 'ipa-collect-lldp=1']
ironic_pxe_uefi_enabled: "yes"

三、下载coreos镜像并创建ironic.conf文件

Ironic Inspector 还要求部署内核和内存盘必须放在 /etc/kolla/config/ironic/ 中。以下示例使用 coreos,这在 Ironic 部署中很常见,尽管可以使用任何兼容的内核/内存盘:

curl https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-stable-2024.2.kernel \
  -o /etc/kolla/config/ironic/ironic-agent.kernel

curl https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-stable-2024.2.initramfs \
  -o /etc/kolla/config/ironic/ironic-agent.initramfs

在/etc/kolla/config下创建ironic.conf

[DEFAULT]
enabled_hardware_types = ipmi,redfish
enabled_console_interfaces = ipmitool-socat,no-console
enabled_inspect_interfaces =  agent,redfish,no-inspect
enabled_network_interfaces = flat,neutron
[neutron]
provisioning_network = provider

四、创建资源

# 创建 flavor
openstack flavor create --ram <ram> --vcpus <vcpus> --disk 0 <flavor_name>
openstack flavor set resources:CUSTOM_BAREMETAL_RESOURCE_CLASS=1 \
    --property resources:VCPU=0 \
    --property resources:MEMORY_MB=0 \
    --property resources:DISK_GB=0 \
    <flavor_name>

# 创建 image,IPA
openstack image create --disk-format aki --container-format aki --public \
  --file /etc/kolla/config/ironic/ironic-agent.kernel deploy-vmlinuz

openstack image create --disk-format ari --container-format ari --public \
  --file /etc/kolla/config/ironic/ironic-agent.initramfs deploy-initrd

# 创建裸机部署网络
openstack network create --provider-network-type flat --provider-physical-network external  provider
# 创建 provider 网络可分配的 3 层网段,注意该网段需要与管理网 3 层互通
openstack subnet create --network provider --subnet-pool <subnet-pool> --dns-nameserver <inspector_dnsmasq_interface 网卡对应的ip> provider_subnet 

# 在所有节点安装ipmitool和socat
apt install -y ipmitool socat

五、上传ironic镜像并部署ironic服务

5.1 下载镜像

方法一:下载镜像总包的时候使用带ironic的镜像总包

下载地址:https://cloud-disk.mandao.com/directlink/public/mstack/文档/mstack/离线镜像总包/包含ironic/registry.tar

方法二:手动下载rocky或者ubuntu系列的镜像并上传

1、下载镜像
下载链接:https://cloud-disk.mandao.com/public/mstack/%E6%96%87%E6%A1%A3/mstack/ironic/images
2、批量上传镜像

for i in `ls` ;do docker load -i  $i ;done

3、将上传镜像的tag输入到old文件中

 docker images --format '{{.Repository}}:{{.Tag}}' | grep quay.io > old

4、修改old文件中旧的镜像tag并输入到new文件中

sed 's/quay.io/<镜像仓库地址>/' old  > new
# 例如:sed 's/quay.io/node01:4001/' old  > new

5、将old和new中的内容对齐输入到 all_images文件中

paste old new > all_images

6、#批量打标签

while read line ;do sr=$(echo $line|awk '{print $1}');de=$(echo $line|awk'{print $2}');docker tag $sr $de ;done 

5.2 执行部署命令

kolla-ansible  deploy -i /root/all-in-one -t ironic,neutron,nova,placement,horizon

六、创建裸机节点

# 创建裸机节点,确认裸机是uefi还是传统启动方式,启动镜像在glance中选择一个
openstack baremetal node create \
  --console-interface ipmitool-socat \
  --deploy-interface direct \
  --network-interface flat \ (如果使用neutron,需要在port中添加交换机接口信息)
  --resource-class baremetal-resource-class \
  --driver-info ipmi_address=<ipmi address> \
  --driver-info ipmi_password=<ipmi_password> \
  --driver-info deploy_kernel=<bm-deploy-kernel uuid> \
  --driver-info deploy_ramdisk=<bm-deploy-ramdisk uuid> \
  --driver-info inspection_network=provider \
  --property capabilities='boot_mode:uefi,bios:uefi' \
  --name test-ironic

#创建port
openstack baremetal port create 52:54:00:ff:15:55 \
  --node 57aa574a-5fea-4468-afcf-e2551d464412 \
  --physical-network physnet1

# 纳管裸机
openstack baremetal node manage <node-id>

# 检测裸机
openstack baremetal node inspect <node-id>

# 启用 console
openstack baremetal node set --driver-info ipmi_terminal_port=<控制节点为使用的端口 例如 15000> <node-id>
openstack baremetal node console enable <node-id>


#清除裸机所有盘的数据
 openstack baremetal node clean <node-id>  --clean-steps '[{"interface": "deploy", "step": "erase_devices_metadata"}]'

# 提供裸机为可用(这里不会自动清除所有磁盘的数据)
openstack baremetal node provide <node-id>


# 创建测试裸机实例
nova boot --nic net-id=<provider 网络 id> --flavor <裸机 flavor id> --image <裸机 image id> <INSTANCE_NAME>
作者:束鹏  创建时间:2026-06-05 10:02
最后编辑:束鹏  更新时间:2026-06-15 17:34