ironic简介
转:https://doodu.gitbooks.io/openstack-ironic
简介
Bare Metal Servcie 裸机服务 -- 'bear betal'
![]()
ironic简介
如今Openstack在虚拟化管理部分已经很成熟了, 通过nova我们可以创建虚拟机、枚举虚拟设备、管理电源状态、安装操作系统等。但是有时候虚拟机无法满足要求,比如以下几种情况需要直接使用物理机:
- 高性能的计算集群
- 计算任务需要访问无法虚拟化的硬件设备
- 数据库主机(有些数据库在hypervisor中运行效率很差)
- 单租户、专用硬件、安全性、可靠性和其他控制要求
- 快速部署云基础设施
但是在物理机管理上一直没有成熟的解决方案。在这样的背景下Ironic(Bare-Metal Provisioning)诞生了,它可以解决物理机的添加,删除,电源管理和安装部署。Ironic提供了一系列常用的驱动,同时提供了插件的机制让厂商可以开发自己的driver,这让它支持几乎所有的硬件。 
部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样。虚拟机的底层驱动采用的libvirt的虚拟化技术,而物理机是采用Ironic技术,ironic可以看成一组Hypervisor API的集合,其功能与libvirt类似。
前世今生
最早baremetal的概念出现在nova里,物理机和虚拟机管理有很多地方非常相似,比如物理机和虚拟机都需要开机关机,安装部署,添加和删除,为了避免重复造轮子,他们在nova中实现了一个物理机的driver,这样把物理机管理做为计算资源管理的一个子集了。后来发现这样做有问题:
- 早期baremetal作为一个driver有自己的数据库,同一个项目中有两套数据库不合适。
- 在部署和管理baremetal的过程中有很多需要存储的信息是和部署管理虚拟机是不同的,通过nova api来获取这些信息比较尴尬,把baremetal剥离出来有助于划清baremetal和虚拟机部署的界限。
- 有时候baremetal需要做一些比较特殊的行为,比如discovery, hardware raid configuration, firmware updates, burn-in这些操作,它们不适合放在nova里面。比较好的办法是当完成这些操作的时候,向nova去注册信息,作为nova中的可用的资源,最后通过nova boot去调用这些资源。
经过很多次讨论,开始社区把bare metal分离出来了, 命名为Ironic,从Icehouse版开始进入孵化项目,并在Juno版与Nova进行集成,从完成了项目毕业评审,在Kilo版正式的集成到openstack项目中来,今后会通过nova调用Ironic的api来实现对物理机资源的管理和控制。
传统的hypervisor一般包括创建虚拟机、枚举虚拟设备、管理电源、加载操作系统等功能,与之对应,Ironic可以看成结合多个驱动提供一套hypervisor API来操作物理机提供类似操作,所以ironic可以看成一个hypervisor驱动来给Nova来用。
架构
项目组成
- 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客户端
- ironic-ui:ironic的horizon插件
- bifrost:一套只运行Ironic的Ansible脚本
概念架构(与其他组件的关系)
下图显示了在提供物理机服务时各个组件的关系。(Ceilometer和Swift能与Ironic一起使用,但是在图中没有显示)

逻辑架构(与其他组件的调用关系)
Ironic服务由以下组件构成。
- Ironic API,一个RESTful API服务,管理员和其他服务通过API与Ironic进行交互
- Ironic Conductor, 完成Ironic服务的绝大部分工作,通过API对外开放其功能,与Ironic API通过RPC进行交互;负责与其他组件进行交互
- Dirvers,真正管理物理机的模块,通过一系列的驱动来支持不同的硬件
- Database,用来存储资源信息
- 消息队列
部署架构
云平台管理员可以使用RESTful API注册硬件,制定硬件的属性,比如MAC地址、IPMI证书。可以开启多个API服务实例。
由于Ironic Conductor是唯一一个需要访问数据层和IPMI控制层的服务,为了安全起见,最好将conductor service 放在一个独立的主机上。为了支持各类驱动和管理故障迁移,可以有多个conductor实例存在,每个conductor实例可以运行多个drivers。

消息路由
每一个Condutor实例在启动时想数据库注册自己,注册的信息包含了本实例支持的驱动列表,并且定期更新自己记录的时间戳,这就使得所有的服务能够知道哪些Condutor和哪些驱动可用。
物理机根据自己的驱动,使用一致性哈希算法映射在一组Condutor上。部署任务通过RPC从API层分发到合适的Condutor上。当Condutor实例加入或者退出集群,物理机会重新映射到不同的Condutor上,会触发驱动的多种动作,比如take-over 或者 clean-up动作。

ironic简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
随机推荐
- Python学习笔记(十八)@property
# 请利用@property给一个Screen对象加上width和height属性, # 以及一个只读属性resolution: # -*- coding: utf-8 -*- class Scree ...
- JQuery 中三十一种选择器的应用
选择器(selector)是CSS中很重要的概念,所有HTML语言中的标记都是通过不同的CSS选择器进行控制的.用户只需要通过选择器对不同的HTML标签进行控制,并赋予各种样式声明,即可实现各种效果. ...
- javascript中各类的prototype属性
prototype 作用:获取调用对象的对象原型引用 应用:可以为某对象原型添加方法 例: function getMax() { var max = this[0]; for(var x=0; x& ...
- 【洛谷P1597】语句解析
题目背景 木有背景…… 题目描述 一串(<255)PASCAL语言,只有a,b,c 3个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为0.输出a,b,c 最终的值. ...
- OGG生成数据定义文件的参数NOEXTATTR
./defgen paramfile ./dirprm/jzjj.prm NOEXTATTR In OGG 11.2, there is a new parameter NOEXTATTR. This ...
- 2018 黑盾杯部分writeup
这次比赛拿了三十多名.呵呵.或许这就是菜吧. 比赛经验教训: 1.赛前一定要调整好情绪. 2.比赛尽量不要紧张,每一题都认认真真的看过去! 3.站在出题者的角度去思考问题 4.刷题 5.还是情绪吧.其 ...
- Ubuntu vi 上下左右变ABCD问题解决方法
---恢复内容开始--- 错误问题:vi上下左右键显示为ABCD的问题 解决方法: 只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题. 一.执行命令 sudo apt-g ...
- 百度2017春招<度度熊回家问题>
题目: 一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家.现在他需要依次的从0号坐标走到N-1号坐标.但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个 ...
- java基础14 多态(及关键字:instanceof)
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...
- json数据操作
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...