2017年1月5日星期四

OpenStack Ironic如何管理物理和虚拟计算资源


Ironic是OpenStack项目中用来提供物理机管理的模块,即就是一组执行裸机部署以及裸机部署相关的活动的项目。

在社区J版本之后,取代了原来nova中的'Bare Metal' driver。Ironic的功能实现,主要依赖PXE和IPMI技术实现批量部署和系统控制,因此大部分的服务器都可以通过Ironic进行系统安装和状态管理。对于部分服务器,Ironic支持可插拔的架构,可以自主开发服务器支持的驱动。通过Ironic组件,OpenStack对物理机的部署,可以和虚拟机部署一样简单,可以实现物理机操作系统安装,上下电,资源发现等操作。这样,在OpenStack看来,Ironic就如同Nova的一个Driver。


我们知道 OpenStack 是一款开源的、扩展平台,用于构建公有或私有云。其多数时候是被作为 IaaS(基础设施即服务),由诸如计算(Nova)、网络(Neutron)、存储(Cinder)及其它项目所组成,甚至还有一些如 Murano 这样的 OpenStack 应用程序目录的平台即服务的项目。Ironic是openstack用来提供裸机服务的项目,作为openstack中的一个独立模块,它可以与keystone、nova、neutron、image以及swift进行交互。

在云计算潮流和推动下,为了支持虚拟化,目前OpenStack 支持了多种 Hypervisor,例如原生KVM、Xen、QEMU、Hyper-V、VMWare、LXC、甚至Docker等。OpenStack提供很多项目让 IaaS成为了可能,能够让用户自助部署配置虚拟机,实质上是让用户能够在界面或命令行能够自己创建服务器。

在 OpenStack 中部署裸机就意味着用户可以直接操作硬件设施、部署应用负载(镜像)到真正的物理机器,而不是运行在 hypervisor 之上的虚拟机中。为了实现这个功能,Nova 包含的虚拟化驱动中,其中一个就是调用 Ironic 来启动裸机节点。基于 Ironic 的虚拟化驱动,OpenStack 的用户使用计算 API 就可以像原来启动一个虚拟机实例一样启动一台裸机实例。

既然OpenStack在虚拟机环境部署上已经如此强大,且支持这么多的Hypervisor,为什么还需要Ironic,或者说Ironic存在的意义何在?归纳一下,主要有如下几点:

1、提供更强大的计算能力 
2、有些计算任务需要接触到不能被虚拟化的硬件设备 ,在一些场景下,虚拟化的环境是不合适的,这些场景的用户需要的是真实的、物理的、裸金属的服务器。为了能够满足这些场景的自助服务需求,OpenStack 需要支持裸机的部署。
3、提供数据库托管能力,因为一些数据库在虚拟化设备中表现得不尽如人意。
4、由于提供独立的物理设备,可以更好地保证安全性、独立性以及其他可靠性需求。
5、可以快速部署云基础设施

我们一起看看Ironic的架构,Ironic和其他OpenStack组件一样,Ironic也对外提供一个标准的restful接口Ironic-api。Ironic主要包含4个主要组件,ironic-api、ironic-conductor、nova-compute-ironic和ironic-provision。

ironic-api用来提供ironic的北向接口,ironic-conductor是Ironic功能处理主体服务,接受ironic-api下发的命令,进行具体的操作和处理、nova-compute-ironic用于对接ironic driver实现物理裸机的发放等生命周期管理、ironic-provision是Ironic tftp服务,为物理裸机安装部署过程提供tftp服务。



Ironic-api和ironic-conductor之间通过rpc消息进行通信。此外,Ironic创建自己的数据表用来存储ironic-conductor所在节点,以及每个ironic-conductor所管理的物理裸机配置等信息。针对不同类型的服务器,ironic-conductor可以挂不同的驱动用来支持。

为了像虚拟机一样部署物理机,Ironic需要能够上报物理机的资源,支持操作系统自动安装和物理机电源状态管理。物理机资源上报的功能可以通过ironic-discoverd来实现,这样,管理员在注册物理机时,只需提供物理机BMC的ip地址,ironic-discoverd就可以将对应物理机的相关信息上报到Ironic数据库,nova的compute_nodes表中也拥有物理机相关资源信息。接着可以通过pxe技术将物理机安装上操作系统,通过ipmi技术可以实现物理机的电源状态管理。

Ironic组件安装时,也需要在keystone注册服务。和虚拟机部署流程中相似,neutron为物理机提供网络服务,只是Neutron的大部分功能是针对虚拟机,而非物理交换机的,在物理机环境下部署需要很多的定制的开发,而这也要求开发者必须非常懂OpenStack的核心代码,如同RackSpace运行Ironic;cinder提供卷存储服务,glance用来存放镜像,部署时从glance服务器上下载镜像进行部署。


Ironic是为了实现裸金属管理,而Neutron则是为了避开2层网络和VLAN,让每台主机直接连接3层网络。OpenStack从整体设计上就是为虚拟机准备的。你一旦用Ironic,就只能用Open vSwitch和Linux Bridge。Neutron的IP管理体系自己做得很原始,又无法跟外部的IP资产管理体系对接。