裸金属服务器(Bare Metal Server)简称BMS,一般是指拥有卓越的计算性能、能够同时满足核心应用场景和稳定性的需求、为租户提供的专属物理服务器。裸金属服务器要兼具虚机的弹性和物理机的性能,为企业的核心数据库、关键应用系统、高性能计算、大数据等业务提供卓越的计算性能。其租户可以灵活申请,按需使用。
进入21世纪,随着数字时代的来临,信息流量逐步增长,服务提供者建立了数据中心来处理这些海量数据。为了解决数据中心内部物理资源利用率低、运营成本高昂的问题,又催生出云计算的概念,继而诞生了AWS、OpenStack等云计算系统。从概念到落地,云计算最终整合了计算、网络、存储这三大基础资源,还实现了基于租户的业务隔离,使最终用户可以按需在线申请资源,数据中心也完成了从1.0到2.0的更新。
最近十年3G、4G的诞生和迭代,使移动端数据流量猛增,而现如今5G、WIFI 6、IPv6等新技术的逐步普及覆盖,则必然会继续加速数据爆发。超大规模的数据量,使得上游业务提供者的数据压力逐步加大,于是各种系统级关键业务:如大规模数据库、高性能计算等,不能部署于虚机,而必须由物理服务器承载。
此时迫切需要一种技术,能够实现硬件服务器的自动部署,且在用户体验上又像虚机一样由云平台负责其生命周期的管理,支持用户自主按需申请和硬件服务器自动上线等能力。基于上述需求,OpenStack平台开发了专门针对硬件服务器的Ironic项目,该项目从Icehouse版开始进入孵化,在Juno版与Nova进行了统一整合,并最终在Kilo版正式的集成到OpenStack项目中来。
随着版本迭代优化和各方的支持,如今的OpenStack在整体架构上已经完成了对多异构虚拟化平台的纳管,而Ironic项目的推出,则进一步了实现了云计算资源从虚拟平台到物理平台的全面支持,计算资源解耦更加彻底。OpenStack逻辑架构如图1所示(支持的计算平台仅列举部分厂商)。
图1 OpenStack计算逻辑架构
OpenStack裸金属技术通过Nova调用Ironic的API来实现对硬件服务器资源的管理和控制。部署硬件服务器跟部署虚机的概念在Nova来看是一样的,都是Nova通过创建虚机的方式触发,只是底层Nova-scheduler和Nova-compute的驱动不一样。虚机的底层驱动采用的libvirt的虚拟化技术,而物理机是采用Ironic技术,Ironic可以看成一组Hypervisor API的集合,其功能与libvirt大体相同。
Ironic服务由以下组件构成,如图2所示:
Ironic API:一个RESTful API服务,管理员和其他服务通过API与Ironic进行交互;
Ironic Conductor:完成Ironic服务的绝大部分工作,通过API对外开放其功能,与Ironic API通过RPC进行交互;负责与其他组件进行交互;
Drivers:真正管理物理机的模块,通过一系列的驱动来支持不同的硬件;
Database:用来存储资源信息;
消息队列。
图2 Ironic组件构成
1. 入云阶段(Inspection):裸金属服务器接入网络后,通过PXE启动加载启动镜像,将自身的主机信息汇报给裸金属管理节点,使其进入可调度状态。Inspector阶段完成了OpenStack对接入的物理服务器硬件信息的收集,控制节点可以根据收集到的配置信息创建对应的“实例类型”,便于根据用户申请资源要求调度指定物理服务器创建裸金属实例。
2. 部署阶段(Provision):租户向云平台申请裸金属资源,云平台启动被选中服务器,通过PXE启动加载启动镜像,之后部署系统镜像,完成裸金属服务器操作系统安装。
3. 运行阶段(Running):服务器重启加载操作系统,通过DHCP获取IP地址,完成裸金属实例部署。
开源OpenStack裸金属与SDN融合对接时,根据OpenStack原生环境要求或实际需要,可支持两种组网:
OpenStack含网络节点融合组网。此种组网下,OpenStack环境中部署了network网络节点,其负责下发裸金属Provision阶段PXE启动请求的IP地址。
OpenStack无网络节点融合组网。此种组网下,OpenStack环境中未部署network网络节点,Provision阶段PXE请求的IP地址由SDN控制器下发。
下面就以上两种组网作详细介绍。
图3 含网络节点裸金属SDN融合组网
物理组网如图3所示,由标准SDN的Spine/Leaf架构和三台服务器组成,OpenStack控制节点和网络节点融合部署于单台物理服务器,需要三个网口,其中两个网口接入Leaf设备,一个网口接入管理网(当控制节点和网络节点分离部署时,则两个节点各引出一条链路接入Leaf设备);图3中左上角为OpenStack计算节点,只需一个网口接入管理网即可;图3中右侧Ironic裸金属服务器需要一网口和一个IPMI口(也称为HDM或iLO口),网口接入Leaf设备,IPMI口接入管理网与控制节点互通。
Leaf连接控制节点服务器网口eth1的单根链路逻辑上分为两部分,一条untag链路,负责Inspector阶段裸金属接入服务器与控制节点Inspector tftp服务通信,以便获取Inspector阶段IP地址和加载PXE启动镜像。另一条VLAN tag 2048链路负责Provision阶段裸金属接入服务器与控制节点Provision Ironic tftp服务通信,以便获取Provision阶段PXE启动镜像(也可以两条链路为不同VLAN tag链路,确保彼此隔离即可)。
Leaf连接控制节点服务器网口eth2的单根链路连接network网络节点,负责远端接入服务器的Provision阶段的IP地址分配,接入服务器通过网络节点获取IP地址后即可访问Provision Ironic tftp服务获取PXE启动镜像和裸金属操作系统镜像。远端接入服务器之所以能够和网络节点通信并获取Provision阶段IP地址的原因是:网络节点网口eth2与上联Leaf互连接口为三层IP互通关系,上联Leaf设备协议会通过路由协议向全网发布自己与网络节点的互连网段,随即网络节点即可与环境中所有Leaf设备通信;网络节点部署的OVS网桥支持VXLAN封装,在OpenStack创建Provision网络后,网络节点会自动建立自身OVS网桥到所有Leaf设备的二层VXLAN隧道配置,如图4所示,显示的VXLAN隧道有两条,即表示与环境中现有的两个Leaf设备分别建立了VXLAN隧道,其中的“local_ip”为网络节点IP地址,“remote_ip”为环境中所有Leaf设备的IP地址(VTEP地址)。
图4 网络节点自动建立VXLAN隧道状态
同时基于对接插件的能力,控制器也会协同向所有Leaf设备下发本机到网络节点OVS网桥的二层VXLAN隧道配置,如图5所示,环境中某台Leaf设备自动生成了到网络节点的VXLAN配置和隧道,与网络节点OVS网桥侧的显示信息相呼应。
图5 Leaf自动建立VXLAN隧道状态
基于以上的过程,就打通了裸金属服务器与网络节点间的VXLAN隧道,实现了在Provision阶段裸金属服务器正常获取网络节点分配的IP地址的能力(含网络节点融合组网时,OpenStack要使能“neutron-dhcp-agent.service”进程)。
远端裸金属接入服务器,从开始的Inspector阶段,到Provision阶段,再到Running上线,整个过程要执行两次PXE启动、三次DHCP请求,但三次请求的答复者不同:
第一次DHCP请求,由控制节点安装的tftp软件回应,并分配Inspector阶段IP地址,下发启动镜像进行第一次PXE启动。
第二次DHCP请求,由OpenSt ack网络节点回应,并分配Provision阶段IP地址,下发启动镜像进行第二次PXE启动。
第三次DHCP请求,由SDN控制器回应,并分配业务IP地址,即完成裸金属服务器上线。
三次请求过程中,远端接入Leaf的AC口会自动完成不同阶段的VLAN-VXLAN的映射配置,无需手工修改。
裸金属上线过程较为复杂,涉及多个阶段、多次重启以及不同阶段中Leaf互连接口下的配置变更。
(1)Inspector阶段:此阶段由OpenStack发起Ironic服务器注册进程,如图6所示。
图6 OpenStack注册裸金属服务器
服务器开机后随即开始获取IP地址和PXE启动,上文已提到此段IP地址由第三方tftp软件提供,而两者之间的网络互通则是由控制器实现。控制器上完成相应设置并指定端口后,可以向Leaf设备下发如图配置(拓扑参照图3),图7为Leaf 2互连的裸金属服务器接入接口,图8为Leaf 1互连的控制节点eth1接口。
图7 Inspector阶段裸金属服务器接入侧下发配置
图8 Inspector阶段控制节点接入侧下发配置
由配置可知,裸金属服务器的DHCP请求报文空标签发送到Leaf2互连接口,接口匹配空标签进入VXLAN 2000隧道,流量通过VXLAN 2000到达Leaf1后,从互连控制节点服务器接口下空标签发出(如图8),继而进入控制节点服务器eth1网口,完成裸金属服务器与第三方tftp软件互通。网络打通后,裸金属服务器PXE获取IP地址、加载启动镜像完成Inspector进程,之后服务器自动重启。
(2)Provision阶段:此阶段开始创建OpenStack裸金属实例,如图9所示。
图9 OpenStack创建裸金属实例
创建实例时会生成如图9所示上下两个IP地址,上方为实例上线后的业务IP地址,由OpenStack下发,控制器实际分配;下方为Provision阶段IP地址,由网络节点分配。进入该阶段后,控制器会修改Leaf互连接口的配置,图10为Leaf2互连的裸金属服务器接入接口,图11为Leaf1互连的控制节点服务器eth1接口。
图10 Provision阶段裸金属服务器接入侧下发配置
图11 Provision阶段控制节点接入侧下发配置
由配置可知,裸金属服务器DHCP请求报文空标签送到Leaf2互连接口,空标签流量匹配的VXLAN隧道发生变化,由图7的VXLAN 2000变更为图10的VXLAN 2048,流量通过VXLAN 2048到达Leaf1后,从互连控制节点服务器接口下封装VLAN 2048发出,如图11所示,继而进入控制节点服务器eth1.2048网口,完成裸金属服务器与网络节点互通。网络打通后,裸金属服务器PXE获取IP地址、加载启动镜像、加载和安装操作系统完成Provision进程,之后服务器二次重启。
(3)Running阶段:此阶段完成裸金属服务器实例上线,如图12所示。
图12 OpenStack裸金属实例上线
裸金属实例创建完成,Provision阶段的IP地址自动消失,只剩下业务IP地址。裸金属实例正常上线后,控制器会修改Leaf2互连裸金属服务器接入接口的配置,如图13所示。
图13 Running裸金属服务器接入侧下发配置
由配置可知,裸金属服务器上线后,空标签匹配的隧道变更为业务VXLAN 1079(OpenStack创建业务网络时自动分配的VXLAN标签),裸金属实例开始正常对外提供服务。
图14 无网络节点裸金属SDN融合组网
无网络节点组网,顾名思义就是OpenStack环境只存在控制节点和计算节点,没有网络节点。上文提到,网络节点主要功能是为接入裸金属服务器分配Provision阶段IP地址,那么无网络节点组网下,该任务就被分配给了SDN控制器本身。
物理组网如图14所示,OpenStack控制节点需要两个网口,一个接入Leaf设备,一个接入管理网。由于没有网络节点,所以Leaf1与控制节点只需单根链路互联。其余组网说明与上文一致。
图中增加的Ironic Server2用来说明,裸金属接入服务器支持与控制节点共用同一台Leaf设备(该特性两种组网均支持);支持与Leaf设备建立Bond关系。
无网络节点融合组网下,裸金属服务器的上线过程同样要经历两次PXE启动、三次DHCP请求,但与含网络节点融合组网不同的是,第二次DHCP请求的答复者存在差异:
第一次DHCP请求,由控制节点安装的tftp软件回应,并分配Inspector阶段IP地址,下发启动镜像进行第一次PXE启动。
第二次DHCP请求,由SDN控制器回应,并分配Provision阶段IP地址,下发启动镜像进行第二次PXE启动。
无网络节点融合组网的上线过程与含网络节点融合组网中裸金属上线过程完全一致,唯一的区别就是Provision阶段IP地址的分配者不同。由于没有网络节点,所以OpenStack控制节点无需安装OVS、无需配置启用关联服务、无需与所有Leaf设备建立VXLAN隧道,同时Leaf设备也不会生成相应配置;整体网络架构更为简单,逻辑更为清晰。
开源OpenStack裸金属与SDN架构的融合,通过控制器感知Ironic进程三个阶段不同动作,下发对应配置到硬件网元,实现了裸金属服务器三阶段PXE请求的定向回应;而两种组网方式则兼容了更多的使用场景和需求。融合后的整体网络架构,解决了原生OpenStack软件转发的性能瓶颈和云网融合环境下虚机、物理机的混合接入等问题。希望读者看完本文后可以对开源裸金属和SDN融合架构的实现有更深刻的理解。