Openstack Ironic standalone 方式部署

发布时间: 更新时间: 总字数:1778 阅读时间: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 all-in-one。必须安装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重启机器。机器启动,从本地引导,进入新安装的系统。

Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数