实习将近一个月了,期间不断努力,终于算是把OpenStack Ironic项目实现裸机部署的过程理解了一遍,并在小规模集群上成功实践。整理一些这段时间工作的内容,就算是一个阶段性的小项目总结了。
Ironic
Ironic是OpenStack的一个子项目,用于实现在云里像管理虚拟机一样管理裸机。
Ironic在OpenStack中的概念架构图如下
其中Bare Metal就是我们要控制的物理机了,Neutron为其提供网络服务,Cinder提供块存储服务,Glance则提供裸机部署时的镜像缓存服务,在部署过程中,我们的Ironic模块要和Neutron,Nova,Glance,Keystone这些核心的OpenStack项目配合,才能完美实现裸机部署的过程。
裸机部署过程中用到的一些核心的技术
(PXE) 预引导执行环境,PXE是英特尔和微软开发的Wired for Management(WfM)规范的一部分。PXE使系统的BIOS和网络接口卡(NIC)能够从网络引导计算机而不是磁盘。引导是系统将OS加载到本地存储器的过程,以便处理器可以执行该过程。允许系统通过网络引导这种功能简化了管理员和服务器部署和服务器的管理。
动态主机配置协议(DHCP) DHCP是用于英特网协议(IP)网络的标准化网络协议,用于动态分配网络配置参数,例如接口和服务的IP地址。使用PXE,BIOS使用DHCP获取网络接口的IP地址,并找到存储网络引导程序(NBP)的服务器。
网络引导程序(NBP) NBP等同于GRUB(Grand Unified Bootloader)或 LILO(Linux LOader) - 传统上用于本地引导的加载器。与硬件驱动器环境中的引导程序一样,NBP负责将OS那个加载到内存中,以便可以通过网络引导操作系统。
普通文件传输协议(TFTP) TFTP是一种简单的文件传输协议,通常用于在本地环境中的计算机之间自动传输配置或引导文件。在PXE环境中,TFTP用于使用来自DHCP服务器的信息通过网络下载NBP。
智能平台管理接口(IPMI) IPMI是系统管理员用于计算机系统的带外管理和监视其操作的标准化计算机系统接口。这是一种通过仅使用于硬件而不是操作系统的网络连接来管理可能无响应或断电的系统的方法。
Ironic裸机部署的过程
核心流程分析
1、引导实例请求通过 Nova API 进入,通过消息队列进入 Nova 调度程序。
2、Nova Scheduler 应用过滤器并查找符合条件的虚拟机监控nova调度程序,还使用flavor的extra_specs(例如 cpu_arch)来匹配目标物理节点。
3、Nova compute 管理选中hypervisor的资源声明。
4、Nova compute 管理器根据 nova引导请求中网络接口在Networking服务中创建(未绑定)租户虚拟接口(VIF)。这里需要注意的是,端口的MAC将随机生成,并且当VIF连接到某个节点以对应于节点网络接口卡时MAC将更新。
5、nova compute创建一个 spawn 任务,它包含所有信息,例如从哪个镜像引导等。它从Nova compute的virt层调用 driver.spawn。在spawn过程中,virt驱动程序执行以下操作: 更新目标ironic节点的deploy镜像,实例UUID,请求的功能和各种flavor属性。通过调用ironic API 验证节点的电源和部署的接口。将之前创建的VIF附加到节点。每个neutron port 可以被附加到任何ironic port和port group,port groups 比 ports有更高的优先级。在Ironic这边,这个工作时由 network interface做的。
6、Nova 的 ironic驱动程序通过 Ironic API 向服务裸机节点的 Ironic conductor 发出部署请求。
7、配置虚拟接口,Neutron API更新DHCP端口以设置 PXE/TFTP选项。在使用neutron网络接口的情况下,ironic在网络服务中创建单独的配置端口,在 flat 网络接口的情况下,nova创建的端口用于配置和部署实例网络。
8、Ironic节点的启动接口准备PXE配置和缓存 deploy kernel和 ramdisk。
9、Ironic 节点通过 Management interfacec发出命令来启动节点的网络引导。
10、Ironic 节点的 Deploy Interface 缓存实例镜像(在 iSCSI 部署接口的情况下),缓存kernel和ramdisk,在netboot的时候需要它。
11、Ironic节点的Power Interface 指示节点的电源接口通电。
12、节点引导部署ramdisk
13、根据确切的驱动程序需求,conductor 将通过iSCSI复制镜像到物理节点。
14、节点的引导接口将 pxe config切换为引用实例镜像,要求 ramdisk agent 软关闭节点电源,如果ramdisk agent 软关闭电源失败,则通过IPMI/BMS呼叫关机裸机节点电源。
15、部署接口会触发网络接口,以便在创建时删除配置端口,并将租户端口绑定到节点。然后给节点上电。
16、裸机节点的 provisioning state更新为active状态。
部署实践
安装好Ubuntu server 16.04系统作为裸机部署的控制节点
配置网络
auto eth0
iface eth0 inet static
gateway 192.168.0.253
address 192.168.0.50/24
mtu 1500