ironic简介
介绍
openstack中对物理机管理的组件,通过ironic可以给物理机,上电、下电、重启,自动安装操作系统,根据设定的规则模板,进行自动化配置。ironic是I版开始进入孵化,j版与nova进行集成、K版正式release,ironic原本是mirantis开发的,后面贡献到社区。部署虚机和部署物理机对底层nova调用来创建虚机,但对nova-compute的底层的hypevisor是不一样的调用虚机底层调用的驱动可能是libvirtd、vmwareapi.VMwareVCDriver等,而物理机底层驱动是ironic。
用途
目前有些服务在虚机上运行达不到理想的性能,仅管openstack拥有trove、sahara、magnum等组件用于支持数据库平台、大数据平台、容器平台、但毕竟是在虚拟机里面部署服务,性能远远不够。但直接部署在物理机上又不好管理,此时ironic应运而生了。ironic可以解决物理机的添加、删除、电源管理、安装部署、未来可能能支持自动部署数据库、大数据平台、容器平台。
项目构成
ironic: 包含ironic-api 和ironic-conductor进程
python-ironicclinet: python clinet and CLI
ironic-python-agent: 一个运行在deployment ramdisk中的Python程序,用于执行一系列部署动作
pyghmi: 一个python的IPMI库,可以代替IPMItool
ironic-inspector: 硬件自检工具
ironic-lib: ironic的通用库函数
ironic-webclinet :web console
ironic-ui:ironic的horizon插件
bifrost:一套只运行Ironic的Ansible脚本
ironic组件
ironic-api:负责接收请求,并且将请求传递给ironic-conductor
ironic-conductor:ironic中唯一一个能根数据库进行交互的组件,负责接收ironic-api的请求,然后根据请求执行相应的,创建、开机、关机、删除操作
ironic-python-agent:部署裸机时,pxe启动进入的一个bootstrap镜像,此镜像是用社区diskimage-builder工具制做,镜像内安装了ironic-python-agent,进入系统后与ironic-conductor进行交互, 将本地磁盘以iscsi方式挂载到控制节点,控制节点将系统dd到裸机磁盘上
ironic用到的技术
PXE+tftp+dhcp
IPMI
iscsi
裸机部署原理
1,nova boot启动一个实例,nova-api将请求通过rabbitmq,传给nova-conductor,在传给nova-scheduler。
2,nova-scheduler根据传递进来的flavor和image筛选出合适的计算节点,然后将请求传递到对应的计算节点。
3,nova-compute与ironic通信,调用ironic-api。
4,ironic-api将请求下发给ironic-conductor,ironic-ductor调用glance下载bootstrap镜像。
在tftp-serer目录生成pxelinux配置文件,并将bootstrap镜像放到tftp目录。
5,ironic-conductor通过调用ipmi driver将物理机开机,并设置以pxe的方式启动。
6,物理服务器启动后,通过pxe加载了bootstrap镜像启动后,镜像内ironic-python-agent 启动,与ironic-ductor进行交互,将本地磁盘通过iscsi方式挂载到控制节点,控制节点通过dd的方式将用户选择的系统写入到磁盘中。
7,写入完毕后ironic将调用ipmi driver对物理服务器进行重启操作。
8,重新启动后主机,初次进入系统时,运行镜像内的cloud-init进行初始化,配置hostname和密码。
这里需要注意,使用的镜像,需要提前在 /etc/sysconfig/network-scripts/里面将网卡的配置文件提交准备好不然开机,网卡会up不起来。centos7需要修改grub参数,将网卡名以ethx显示,不然以设备名显示,配置文件不好写。
流程图如下
需要注意的是
镜像
ironic有两种镜像一种是部署时的bootstrap镜像,这种镜像是内含了,ironic-python-agent,启动后会主动与ironic-conductor进行交互。
另外一种是用户需要安装到裸机的镜像,这种镜像是通过bootstrap,通过iscsi将磁盘挂载到控制节点dd写入的。
网络
在Newton版前,ironic都是不支持多租户,都是在一个flat网络上,互相之间是没有隔离关系的。
https://www.ibm.com/developerworks/cn/cloud/library/cl-cn-virtualboxironic/index.html
http://www.cnblogs.com/menkeyi/p/6063551.html
https://docs.openstack.org/developer/ironic/liberty/deploy/user-guide.html
https://wiki.openstack.org/wiki/Ironic