ironic架构及相关技术简介

xiaoxiao2021-07-05  332

简介

如今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-ironicclient: python clinet and CLI。

ironic-python-agent: 一个运行在deployment ramdisk中的Python程序,用于执行一系列部署动作。

pyghmi:一个python的IPMI库,可以代替IPMItool。

ironic-inspector: 硬件自检工具。

ironic-lib:ironic的通用库函数。

ironic-webclient :web客户端。

ironic-ui:ironic的horizon插件。

bifrost:一套只运行Ironic的Ansible脚本。

概念架构(与其他组件的关系)

上面的图显示了有物理服务器的情况下所有的服务怎样工作的(注意Ceilometer和Swift可以使用,但是在图中没有体现)。

逻辑架构(与其他组件的调用关系)

Ironic服务由以下组件构成。

Ironic API,一个RESTful API服务,管理员和其他服务通过API与Ironic进行交互。

Ironic Conductor, 完成Ironic服务的绝大部分工作,通过API对外开放其功能,与Ironic API通过RPC进行交互;负责与其他组件进行交互。

Drivers,真正管理物理机的模块,通过一系列的驱动来支持不同的硬件。

Database,用来存储资源信息。

消息队列

部署架构

云平台管理员可以使用RESTful API注册硬件,制定硬件的属性,比如MAC地址、IPMI证书。可以开启多个API服务实例。

由于Ironic Conductor是唯一一个需要访问数据层和IPMI控制层的服务,为了安全起见,最好将conductor service 放在一个独立的主机上。为了支持各类驱动和管理故障迁移,可以有多个conductor实例存在,每个conductor实例可以运行多个 drivers。

消息路由

每一个Conductor实例在启动时想数据库注册自己,注册的信息包含了本实例支持的驱动列表,并且定期更新自己记录的时间戳,这就使得所有的服务能够知道哪些Conductor和哪些驱动可用。

物理机根据自己的驱动,使用一致性哈希算法映射在一组Conductor上。部署任务通过RPC 从API层分发到合适的Conductor上。当Conductor实例加入或者退出集群,物理机会重新映射到不同的Conductor上,会触发驱动的多种动 作,比如take-over 或者 clean-up动作。

裸机部署的主要技术

Preboot Execution Environment (PXE)

预启动执行环境。PXE 是目前主流的无盘启动技术,它可以使计算机通过网络而不是从本地硬盘、光驱等设备启动。利用 PXE 进行系统安装需要被安装的主机上有 PXE 支持的网卡,不过现在的网卡一般都内嵌支持 PXE 的 ROM 芯片。当计算机引导时,BIOS 首先会 把 PXE Client 调入内存中执行,PXE Client 被载入内存后,它便同时具有 DHCP client 和 TFTP Client 的功能,DHCP client 会向 DHCP server 请求 ip 分配给将要安装系统的主机,然后由 PXE Client 将放置在远端的文件通过 TFTP 下载到本地运行。

http://blog.csdn.net/miss_acha/article/details/50373040

https://technet.microsoft.com/zh-cn/library/cc732649

Dynamic Host Configuration Protocol (DHCP)

动态主机配置协议是标准的网络协议,用来动态的分发网络配置参数,例如网口的IP地址。

http://network.51cto.com/art/201406/441752.htm

Network Bootstrap Program (NBP)

网络引导程序,NBP和本地启动时通常使用的GRUB或者LILO相同。像硬件驱动环境的启动程序,NBP负责下载OS内核到内存,然后系统可以通过网络启动。

Trivial File Transfer Protocol (TFTP)

在PXE环境,TFTP被用来使用DHCP服务器的信息通过网络下载NBP。

Intelligent Platform Management Interface (IPMI)

IPMI(Intelligent Platform Management Interface) 智能平台管理接口,是一种开放标准的硬件管理接口规格,使用嵌入式管理子系统进行通信而不依赖主机操作系统,这使得在操作系统不响应或未加载的情况下其仍然可以进行开关机、信息提取等操作。Ironic 正是利用此技术可以远程的对裸机进行上下电或者其他操作,而不是依赖物理开关或者操作系统。

关于Ironic里的一些服务

ironic-api: 接收REST请求,送给ironic-conductor。

ironic-conductor: 接收来自ironic-API的请求,进行创建、更新、删除nodes, 通过IPMI、ssh开关电源,或者部署bare metal机器。

ironic-python-agent: 当一台bare metal服务启动时,如果从PXE启动,机器可以从远端拉取一个最小版的Linux内核,也可以拉取一个ramdisk,不过最小版的Linux内核功能较弱,如果是ramdisk的话,可以在上面安装各种服务(也可以配置RAID),其中可以包括ironic-python-agent。在ramdisk中的ironic-python-agent提供和ironic-conductor一样的服务。

ironicclient: Ironic CLI

API

节点相关(node)

节点增删改查(List, Searching, Creating, Updating, and Deleting)

合法性检查

设置和清除维修状态

设置和获取boot device

获取节点当前综合信息,包括power, provision, raid, console等

更改电源状态

更改节点提供状态( manage, provide, inspect, clean, active, rebuild, delete (deleted), abort)

设置RAID

启动、停止、获取console

查看、调用厂商定制方法(passthrough方法)

端口相关(Port)

对物理端口(Port)的增删改查(Listing, Searching, Creating, Updating, and Deleting ),新建的时候就要指定端口的物理地址(一般是MAC地址)与Node进行绑定。

查看与Node连接的端口

驱动相关(driver)

列举所有驱动

查看驱动的详细信息、属性

查看和调用厂商的驱动

Chassis(机箱,一组node的集合)

增删改查 Chassis

这个资源类型是为了给节点分组用的,目前只有列举一组节点的功能。不赞成使用这个类型,将来可能会去除掉。

Conductor

Ironic-Conductor是Ironic中最主要的模块,通过Ironic-API对 外提供功能,与Ironic-API之间通过RPC进行通信,负责绝大部分工作,包括与Neutron通信为物理机配置网络信息,与Glance通信获取 镜像,与Cinder和Swift通信进行为物理机提Ironic-Conductor是Ironic中最主要的模块,通过Ironic-API对外提供 功能,与Ironic-API之间通过RPC进行通信,负责绝大部分工作,包括与Neutron通信为物理机配置网络信息,与Glance通信获取镜像, 与Cinder和Swift通信进行为物理机提供存储。 供存储。

同时控制着物理机状态的改变过程。

在高可用方面,conductor 采用一致性哈希算法保证Conductor节点新增退出时不影响Bare metal节点。

DB

采用MySQL,存储物理机和驱动的状态信息,可以换成其他数据库。

Driver

驱动是真正操作物理机的模块,Ironic的驱动以插件形式设计,厂商可以实现自己的驱动来为自己的设备提供特色化功能。实现自己的驱动只需要实现几个相关的方法即可。

参考资料:

https://wiki.openstack.org/wiki/Ironic

http://www.cnblogs.com/menkeyi/p/6063547.html

转载请注明原文地址: https://www.6miu.com/read-4821445.html

最新回复(0)