Home Archives Categories Tags

openstack ironic standalone 方式部署

发布时间: 更新时间: 总字数:1766 阅读时间:4m 作者: 分享

Ironic 原来属于nova项目,叫做Nova “bare metal” driver。后来ironic成为一个独立的openstack项目。ironic像管理虚拟机一样管理物理机,主要用于安装配置物理机。

基本原理

http://docs.openstack.org/developer/ironic/#introduction

ironic采用了可插拔的driver体系,可支持厂商特定的硬件。每个driver抽象了一种硬件的功能。默认提供了几个底层driver,抽象了PXE 和 IPMI等功能。

ironic api服务对外提供api。ironic conductor服务跟api服务之间通过rpc通信。ironic drivers向bare metal发出操作。例如,用户发出boot请求,通过 Nova API 和 Nova Scheduler发到nova compute服务,然后传到 Ironic API,然后到达 Ironic Conductor, 最终由某个 Driver 实际操作物理机。

创建物理机实例与创建虚拟机的过程有相似之处,Ironic 会与其他服务例如nova,neutron,glance等交互,创建一个 bare metal instance。

PXE是从网卡启动,BIOS从DHCP获取IP地址,然后一般通过TFTP协议下载Network Bootstrap Program (NBP),加载到内存,开始引导。

http://docs.openstack.org/developer/ironic/deploy/user-guide.html

ironic注册硬件,主要是登记网卡MAC地址,IPMI地址及认证信息。API会暴露支持的driver的列表,以及承载这些driver的conductor的主机列表。

ironic需要两套镜像:deploy image,用来部署实际的OS。user image,是实际的OS需要安装到裸机的磁盘上。

两种下载image的方法:

  1. 通过iSCSI下载。物理节点暴露iscsi给conductor。

  2. 直接下载。物理节点从conductor下载。

http://docs.openstack.org/developer/ironic/deploy/install-guide.html

安装ironic deploy主机

安装操作系统。以下假设hostname是ironic-deploy,IP地址10.10.102.96。

ironic需要工具qemu-img,fuser,安装相应的包。

# yum install -y qemu-img psmisc

安装openstack allinone。必须安装ironic组件。

ironic如果配置成standalone服务,其他服务如glance,neutron,nova,cinder等无需安装。

配置ironic

配置成standalone服务。
编辑 /etc/ironic/ironic.conf 的 auth_strategy 和 dhcp_provider。

[DEFAULT]
auth_strategy=noauth
[dhcp]
dhcp_provider=none

重启服务

# systemctl restart openstack-ironic-conductor openstack-ironic-api

安装 ironic-ui

集成ironic到dashboard:

···
git clone https://git.openstack.org/openstack/ironic-ui
cd ironic-ui/
python setup.py install


安装 ironic-ui。这里为测试,直接拷贝到相应目录:

pythondir=«/usr/lib/python2.7/site-packages»
dashboarddir=«/usr/share/openstack-dashboard»
cp ${pythondir}/ironic_ui/enabled/_2200_ironic.py ${dashboarddir}/openstack_dashboard/local/enabled/
cp -a ${pythondir}/ironic_ui/static/dashboard/admin/ironic ${dashboarddir}/static/dashboard/admin/
cp -a ${pythondir}/ironic_ui/content/ironic/ ${dashboarddir}/openstack_dashboard/dashboards/admin/
cp ${pythondir}/ironic_ui/api/ironic.py ${dashboarddir}/openstack_dashboard/api/
cp ${pythondir}/ironic_ui/api/ironic_rest_api.py ${dashboarddir}/openstack_dashboard/api/rest/
systemctl restart httpd


## 准备dhcp和tftp服务

ironic的standalone方式,需要自行安装tftp和dhcp服务。过程略。

## 准备镜像文件

如果已经准备好了镜像文件,这一步可以跳过。首先,下载ironic deploy镜像

cd /tftpboot/

mkdir -p ironic

cd ironic/

wget http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe.vmlinuz

wget http://tarballs.openstack.org/ironic-python-agent/coreos/files/coreos_production_pxe_image-oem.cpio.gz


第二,准备user image,用户镜像。安装diskimage-build

git clone https://github.com/openstack/dib-utils.git

cd dib-utils/

python setup.py install

git clone git://git.openstack.org/openstack/diskimage-builder

cd diskimage-builder/

python setup.py install


下载 fedora镜像

disk-image-create fedora baremetal dhcp-all-interfaces grub2 -o my-fedora


修改镜像的默认密码

yum install libguestfs-tools-c

cp my-fedora.qcow2 /tmp/

chmod 777 /tmp/my-fedora.qcow2

virt-sysprep -a /tmp/my-fedora.qcow2 –root-password password:111111

mv my-fedora.initrd my-fedora.vmlinuz my-fedora.qcow2 /tftpboot/ironic/

mv /tmp/my-fedora.qcow2 /tftpboot/ironic/


将 /tftpboot 修改为ironic拥有:

chown -R ironic:ironic /tftpboot

chmod 664 /tftpboot/ironic/*


最后,需要的镜像文件有五个:两个deploy镜像文件,三个user镜像文件:

ll /tftpboot/ironic/

总用量 829436
-rw-rw-r– 2 ironic ironic 347257429 coreos_production_pxe_image-oem.cpio.gz
-rw-rw-r– 2 ironic ironic 33837088 coreos_production_pxe.vmlinuz
-rw-rw-r– 2 ironic ironic 17685716 my-fedora.initrd
-rw-rw-r– 2 ironic ironic 6679512 my-fedora.vmlinuz
-rw-rw-r– 1 ironic ironic 443875328 my-fedora.qcow2



## 配置dhcp和tftp服务

由于是standalone模式,需要用合适的方法配置tftp和dhcp服务。过程略。


## 准备测试 ironic 部署的脚本

脚本 do_deploy_node_ironic.sh 创建了一个deploy node。

#!/bin/bash

nodeuuid=«1e1ba69d-a6df-4f4a-8653-fa0402c591d6»
macaddr=«00:03:25:11:31:21»
portid=«4609e71f-c7db-490d-ba75-b3c338129b24»
ipmiaddr=«10.10.10.200»
ipmiuser=«admin»
ipmipass=«password»

systemctl restart tftp dhcpd

source /root/keystonerc_admin

ironic node-create -d pxe_ipmitool
-u ${nodeuuid}
-i ipmi_address=${ipmiaddr} -i ipmi_username=${ipmiuser} -i ipmi_password=${ipmipass}
-i deploy_kernel=file:///tftpboot/ironic/coreos_production_pxe.vmlinuz
-i deploy_ramdisk=file:///tftpboot/ironic/coreos_production_pxe_image-oem.cpio.gz

ironic port-create -n $nodeuuid -a $macaddr -u ${portid}

ironic node-update $nodeuuid add
instance_info/image_source=file:///tftpboot/ironic/my-fedora.qcow2
instance_info/root_gb=12
instance_info/kernel=file:///tftpboot/ironic/my-fedora.vmlinuz
instance_info/ramdisk=file:///tftpboot/ironic/my-fedora.initrd
instance_info/capabilities=‘{«boot_option»: «local»}’

ironic node-validate $nodeuuid
ironic node-set-provision-state $nodeuuid active
ironic node-show $nodeuuid


## 创建的tftp部署文件

ironic在创建node的过程中,自动创建文件 /tftpboot/pxelinux.cfg/01-00-03-25-11-31-21 ,以及自动创建目录 /tftpboot/1e1ba69d-a6df-4f4a-8653-fa0402c591d6/

[root@ironic-deploy ~]# ll /tftpboot/pxelinux.cfg/
总用量 4
-rw-r–r– 1 ironic ironic 1054 9月 29 16:35 01-00-03-25-11-31-21

[root@ironic-deploy ~]# cat /tftpboot/pxelinux.cfg/01-00-03-25-11-31-21
default deploy

label deploy
kernel 1e1ba69d-a6df-4f4a-8653-fa0402c591d6/deploy_kernel
append initrd=1e1ba69d-a6df-4f4a-8653-fa0402c591d6/deploy_ramdisk selinux=0 disk=cciss/c0d0,sda,hda,vda iscsi_target_iqn=iqn.2008-10.org.openstack:1e1ba69d-a6df-4f4a-8653-fa0402c591d6 deployment_id=1e1ba69d-a6df-4f4a-8653-fa0402c591d6 deployment_key=3TG9BB0YPTAMK77ZJWAXI08YNFNZUW96 ironic_api_url=http://10.10.102.96:6385 troubleshoot=0 text nofb nomodeset vga=normal boot_option=local ipa-api-url=http://10.10.102.96:6385 ipa-driver-name=pxe_ipmitool boot_mode=bios coreos.configdrive=0
ipappend 3

label boot_partition
kernel 1e1ba69d-a6df-4f4a-8653-fa0402c591d6/kernel
append initrd=1e1ba69d-a6df-4f4a-8653-fa0402c591d6/ramdisk root={{ ROOT }} ro text nofb nomodeset vga=normal

label boot_whole_disk
COM32 chain.c32
append mbr:{{ DISK_IDENTIFIER }}

label trusted_boot
kernel mboot
append tboot.gz — 1e1ba69d-a6df-4f4a-8653-fa0402c591d6/kernel root={{ ROOT }} ro text nofb nomodeset vga=normal intel_iommu=on — 1e1ba69d-a6df-4f4a-8653-fa0402c591d6/ramdisk
```

运行上面的测试脚本,如果没有错误,ironic部署过程开始。首先ironic node从dhcp服务器获得ip地址,然后由tftp下载deploy镜像,在系统引导之后,利用iscsi下载user镜像到本地硬盘。下载完成之后,意味着系统安装完成,ipmi重启机器。机器启动,从本地引导,进入新安装的系统。

参考

最新评论
加载中...