4.5 基于OpenStack Ironic的裸金属服务
Ironic作为OpenStack Kilo版本正式引入的一个新服务,提供了对裸金属服务器的管理,使用户可以像使用虚拟机一样使用和管理裸金属服务器:支持通过OpenStack Nova接口进行裸金属服务器的指定镜像和规格的创建、查询、修改、启动、停止、重启等生命周期管理操作;还可以将cinder创建的共享存储类型的卷通过和虚拟机相同的接口挂载给裸金属服务器;并且可以通过与Neutron的交互自动配置租户网络,以实现和虚拟机之间的网络互通。
Ironic提供了一些通用的Driver,例如PXE和IPMI的Driver,可以管理大量业界通用的裸机服务器;另外,Ironic的Driver机制具有较好的扩展性,允许针对有特殊诉求的服务器进行定制特有的Driver进行管理。
4.5.1 应用场景
Ironic提供的裸金属服务器管理主要适用于一些不适合部署于虚拟机中的应用,主要如下:
需要直接访问不能虚拟化的服务器硬件设备的一些应用;
在虚拟机中运行时性能比较差的数据库应用、大数据处理应用等;
其他一些对性能、安全等专属硬件有诉求的应用。
4.5.2 基于OpenStack的架构
图4-9描述了Ironic服务与其他OpenStack服务的交互关系。
图4-9 Ironic和其他OpenStack组件的交互
Ironic通过与Nova交互,提供裸机的生命周期管理功能;裸机的生命周期管理API由Nova提供,使用同虚拟机相同的API接口进行管理,使用户可以像管理虚拟机一样来管理裸机。
Ironic通过与Neutron交互,提供裸机的网络管理功能(当前Kilo版本的Neutron不具有自动控制裸机所使用的TOR的配置修改的网络能力,需要自研或对接第三方SDN控制器来实现TOR的自动化配置等网络特性);裸机使用的Network同虚拟机使用的Network一样,都是Neutron提供,并且裸机和虚拟机可以接入同一个Network来实现二层互通。
Ironic通过与Glance交互,提供裸机的镜像加载功能,Glance通过对接Swift来存储镜像文件;Ironic可以使用标准的Qcow2、raw格式的镜像文件作为裸机的镜像,镜像的管理与虚拟机镜像的管理方式一样,可以通过Glance的标准镜像管理接口进行管理。
Cinder服务为裸机提供共享存储的能力(当前Kilo版本的Ironic不具备与Cinder对接为裸机提供共享存储的能力,可以自研扩展对应的能力),使裸机可以完全像虚拟机一样使用共享存储卷,而且同一个共享存储卷可以挂载给虚拟机,也可以挂载给裸机。
Ceilometer可以通过与Nova的对接,监控到裸机实例的信息,采用与监控虚拟机实例一样的方式;另外,也可以通过与Ironic对接,监控裸机的带外硬件信息。
与其他OpenStack服务一样,Ironic服务也是通过Keystone服务来提供鉴权能力。
Horizon可以提供裸机实例的管理界面,Horizon通过Nova服务提供的生命周期管理接口来管理裸机实例,Ironic本身提供的API接口并不对EndUser提供,仅仅是管理员操作接口。
Heat可以实现裸机的资源编排,也可以实现裸机与虚拟机的混合编排。
4.5.3 逻辑架构
图4-10描述了裸机服务所包含的内部组件。
图4-10 Ironic组件构成
Ironic服务由以下组件组成。
Ironic API :处理外部API请求的组件;Ironic的外部API请求主要有两部分,一部分是管理员直接调用Ironic的API用于裸机服务器的配置管理、维护管理等,另一部分是通过Nova Compute组件的Ironic Driver下发的裸机实例生命周期管理的API操作。
Ironic conductor :裸机管理的核心组件,接受Ironic API请求的后端处理组件,通过挂载不同的Driver来完成对裸机服务器的部署及管理。
Drivers:Ironic对于硬件的异构问题主要是通过对接不同的后端驱动来解决的,主要的Driver有PXE、IPMI、amt、drac、iLO、irmc等,也可以以plugin形式扩展特有硬件的Driver。
Ironic-python-agent:集成于deploy ramdisk中,通过与ironic管理服务的交互完成裸金属OS加载等操作,临时存在于裸金属服务器加载启动的内存中,裸金属OS启动后失效。
4.5.4 主机管理
Ironic服务对已注册的裸金属服务器提供集群管理、硬件规格检测、主机GuestOS的自动化安装、主机清理等功能,这些功能通常以带内或带外的方式进行,带外管理通过服务器的BMC控制网络进行,带内管理则通过Ironic-python-agent进行。
一、主机注册
使用Ironic服务管理裸金属服务器前,需要先把主机的信息注册到Ironic中。在主机注册时,需要指定管理主机使用的Driver以及对应Driver需要的必要信息。以pxe_ipmitool为例,注册时还需要指定服务器的IPMI地址、用户名、密码等信息。为了实现主机GuestOS的自动化安装,还需要指定用于安装引导的deploy_kernel和ramdisk。
二、集群管理
图4-11描述了Ironic服务管理裸金属服务器集群的结构。
图4-11 Ironic服务集群结构
在OpenStack架构模型中,Ironic的控制服务在网络上要求与服务器的带外管理平面互通,以方便Ironic以带外的方式实现对服务器的管理和控制。Ironic支持通过不同类型的后端驱动对服务器进行电源管理和控制。对于通用的计算服务器,Ironic的IPMI Driver通过IPMI(Intelligent Platform Management Interface)标准协议进行控制和监控,通过IPMI协议,Ironic可以对主机进行上电、下电、重启、设置启动方式等控制。对于不支持IPMI协议的服务器类型,Ironic可以通过与服务器类型匹配的Driver进行管理(如iLO、drac等)。
三、硬件检测
Ironic的可选组件ironic-inspector提供了自动硬件检测的能力,它允许Ironic服务在主机的Driver信息注册完成后自动发现已注册节点的硬件属性信息和硬件网卡信息。
Ironic服务支持两种类型的硬件检测。
(1)带外检测(Out-of-band),针对HP的服务器,支持通过iLO驱动进行检测,可以自动检测到memory_mb、cpus、cpu_arch、local_gb等用于调度的基本属性,同时还可以检测到ilo_firmware_version、rom_firmware_version、secure_boot、server_model、pci_gpu_devices、nic_capacity等信息(2)带内检测(In-band inspection):通过ironic-inspector服务(OpenStack kilo版本,该服务名称为ironic-discoverd),可以实现对通用服务器的自动检测。带内检测的原理是通过在目标服务器上PXE引导启动一个OS(即主机注册时指定的deploy ramdisk和deploy kernel),通过该OS内运行的ironic-python-agent服务直接发现服务器的硬件信息,如memory_mb、cpus、cpu_arch、local_gb等。
四、主机GuestOS自动化安装
Ironic服务最重要的服务是可以提供裸金属服务器GuestOS的自动化安装。如图4-12所示,Ironic服务通过IPMI网络对裸机的上下电、重启和启动方式进行控制,在安装GuestOS时,设置裸金属服务器从网络启动,通过PXE启动,自动从管理网络的TFTP服务器加载引导用的minios,然后从注册时指定的GuestOS位置或从OpenStack Glance服务下载GuestOS后写入裸金属服务器的本地磁盘。最后设置裸金属服务器从硬盘启动,完成GuestOS的自动安装。
图4-12 主机自动化安装过程
五、主机清理
基于安全方面的考虑,Ironic支持对已注册的主机进行清理,Ironic服务提供了多种主机清理操作,另外也预留了接口给不同的厂商定制自己的主机清理方法。
Ironic提供了两种不同的主机清理方法:自动清理和手工清理。
(1)自Kilo版本开始,Ironic服务提供自动清理功能,裸金属服务器每次发放给租户后都需要触发自动清理流程,以保证租户每次获取到的主机都是一致的。启用自动清理后,每次清理都会根据Driver中预定义的清理步骤进行清理。
(2)Mitaka版本,Ironic服务将会支持手工清理。手工清理需要管理员通过API触发后执行。
4.5.5 发放管理
图4-13是OpenStack系统中租户申请裸机的流程。
图4-13 用户申请裸金属服务器过程
在OpenStack中,裸金属服务器和虚拟机的使用体验完全相同。租户可以通过和虚拟机完全相同的方式使用裸机,包括上传镜像、规格、申请裸金属计算实例等。
裸金属实例的发放管理具体如下。
(1)管理员通过Ironic API注册裸金属服务器节点信息到Ironic。
(2)Nova-compute通过Ironic API接口查询裸金属服务器资源,记录到Nova数据库。
(3)租户通过Nova API申请裸金属服务器,Nova API将消息转发给Nova Scheduler。
(4)Nova Scheduler服务通过用户指定的规格,调度到合适的裸金属服务器。
(5)Nova-compute通过Ironic API接口发送请求到Ironic API,触发Ironic服务开始GuestOS的自动化安装部署。
(6)Nova-compute周期性通过Ironic API检测裸金属服务器的状态,等待Ironic服务完成安装过程。
(7)Ironic-conductor在Neutron中创建DHCP端口,用于后续裸金属服务器网络启动,并配置PXE/TFTP server,准备裸金属服务器启动时的PXE配置。
(8)Ironic-conductor通过IPMI驱动设置裸金属服务器从网络启动,上电裸金属服务器。
(9)裸金属服务器通过DHCP加载引导OS(deploy_kernel和deploy_ramdisk),然后根据后端管理驱动的不同完成GuestOS的安装。
(10)GuestOS安装完成后,ironicconductor通过IPMI驱动设置裸金属服务器从硬盘启动,并重启裸金属服务器进入GuestOS,并设置Ironic的状态为安装完成。
(11)Nova-compute检测到裸金属服务器安装完成后,更新计算实例的状态为可用。
4.5.6 网络管理
在OpenStack架构模型中,Ironic服务涉及的网络有以下四类。
(1)OpenStack管理网络:用于Ironic服务接受外部API请求,并和OpenStack Keystone、Nova、Neutron、Glance等服务进行通信。
(2)IPMI网络:Ironic服务通过IPMI协议控制管理裸机需要的网络,在使用Ironic服务的时候需要保证ironic-conductor组件能与裸金属服务器的IPMI网络互通。
(3)PXE网络:Ironic服务完成GuestOS部署所用的网络,PXE/TFTP服务器都在这个网络中。服务器通过Neutron在该网络中提供的DHCP server完成PXE启动,并进行后续的GuestOS镜像下载。在当前的OpenStack版本中,这个网络是一个没有VLAN的Flat类型的网络。
(4)租户网络:在当前的Ironic服务提供的能力中,无法支持多租户网络的能力,所有裸金属服务器的租户网络都与PXE网络相同。作为一个缺陷,目前OpenStack社区已经开始规划对多租户网络的支持。为了支持对多VLAN/VxLAN网络的自动化配置,基于目前的OpenStack版本,可以自行扩展Neutron对接SDN等插件来支持对TOR的动态自动化配置,满足裸机租户网络的动态、按需自动化配置,以及提供FireWall、VPN等高级网络特性。
4.5.7 存储管理
截止OpenStack Mitaka版本的Ironic服务为止,在租户申请裸金属服务器时,只能使用服务器的本地存储,尚无法支持共享存储卷设备的使用。针对共享存储卷设备,在OpenStack社区Ironic服务的特性规划中,已经有Sanboot等方面的规划。
在Minata版本中,Ironic服务新增对裸金属服务器本地硬盘组RAID的功能,允许管理员通过Ironic的API对服务器进行RAID配置。租户在申请裸金属服务器时可以通过在Flavor中指定RAID级别进行调度。
4.5.8 裸机与虚拟机的交互模型
图4-14描述了OpenStack内部,裸机与虚拟机之间交互的模型。
图4-14 裸金属服务器和虚拟机交互过程
在OpenStack架构中,租户的网络资源包括网络(Network)、子网(Subnet)、路由(Router)等。在同一网络的子网内,虚拟机和虚拟机之间是二层互通的,同样在同一子网内裸金属服务器和虚拟机也是二层互通的;不同网络的虚拟机直接通过路由三层互通,而裸金属服务器和其他网络内的虚拟机也是通过路由三层互通。