OpenStack 裸金属服务 Ironic 原理简介

疫情期间,在家办公,如何远程搞定公司机房的服务器重装系统?

服务器的远程管理

服务器放在机房里,正常运行的时候我们不会去直接接触,但是难免有个系统死机、硬件损坏等连不上的情况,或者需要重装系统的时候,就需要人去机房操作了。

但是,数据中心里的服务器往往成百上千,对环境的安全要求也很高,总是要靠人去处理这些事情很不方便也不安全。工作人员需要通过网络来操作和配置服务器,包括重启机器和重装系统。

如何在服务器关机的状态下通过网络让它开机?

显然,我们需要另外一个独立的系统,这个独立的系统在服务器都是通过一个控制器上来实现,即基板管理控制器(Baseboard Manager Controller,简称 BMC)。

我们还需要通过一个接口来和 BMC 交互,其中最广泛使用的就是 IPMI,全称是 Intelligent Platform Management Interface,智能平台管理接口。有的品牌服务器还有其它接口,例如 dell 的 iDRAC,HP 的 iLo,这些远程网络管理接口基本都是 IPMI 兼容。

因为这套管理系统和用户业务使用的系统独立,所以又称为带外(Out of Band)系统。

这里我们不用过多关注这些细节,只要知道平常我们说起 BMC 或 IPMI 或 带外系统 的时候,基本上就是在说同一个东西,就是远程管理服务器的接口。

网络远程管理服务器是裸金属管理的基础要求,实际上即使没有裸金属管理系统,日常运维中也会提供很大的便利。

IPMI 的基本功能

我们需要在服务器初次上电的时候,通过 BIOS 配置好 BMC 的地址,然后就可以通过浏览器直接访问了:

image-20200623113652520

不同品牌的服务器页面外观会有较大差别,但是整体功能大同小异,主要就是查看服务器的硬件信息,当前状态等等。

这里有一个功能比较实用,就是 KVM 系统。注意,这里 KVM 是 Keyboard Video Mouse 的缩写,和虚拟化那个两码事。通过 KVM 我们可以远程和服务器直接交互,就和在机房里接了显示器和键盘后一样。

Linux KVM 虚拟化技术的缩写是 Kernel-based Virtual Machine

在 KVM 系统中可以挂载本地的 iso 镜像文件,完成操作系统的安装。不过这种交互式安装系统效率太低,在裸金属的管理中,我们是通过网络启动自动化完成系统的安装。

image-20200623113723113

在 Linux 系统中还可以通过命令行工具 ipmitool 来执行相关操作:

image-20200623113815258

PXE 网络启动

现在有了可以远程管理服务器的接口,但是上面通过上述的方法安装系统仍然是一件麻烦事,这时需要介绍一下 PXE。

PXE 全称 Pre-boot Execution Environment,是由 Intel 设计的协议,它可以使计算机通过网络启动。协议分为 client 和 server 两端,client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。

典型的 PXE 启动流程大致如下:

PXE启动流程

  1. PXE 启动开始通过 DHCP 获取 IP,所以需要有一台 DHCP 服务器
  2. 随着 DHCP 响应的除了 IP 还有 PXE 相关的配置信息,用来指示下一步去哪里
  3. 根据上一步得到的信息去某个地方,通常是 TFTP 服务器上请求下载 Linux 引导系统
  4. TFTP 服务器事先准备好包括 Linux 内核在内的文件供下载
  5. 进一步下载操作系统文件,包括自动应答文件
  6. 完成操作系统安装

注意,这里的第 5,6 步是传统物理服务器管理时的操作系统安装办法。裸金属云使用 iSCSI 挂载磁盘,直接把事先做好的镜像通过 dd 命令复制到磁盘上,免去了系统安装的过程,更加的高效省时。

看上去挺复杂的,实际上网上有很多相关的教程,可以尝试手动完成一遍。

Ironic 的架构

Ironic 系统就是一个典型的 OpenStack 服务架构,包含了一个 API 组件,和一个处理后台任务的 Conductor 组件,Conductor 通过各种 Driver 完成实际的工作。

Ironic 基础架构

它和 OpenStack 的其它核心组件需要完成一系列的交互,获取所需的资源:

Ironic 逻辑架构

从图中我们可以看出,Ironic 和 OpenStack 的核心模块 Nova、Neutron、Glance、Cinder 都有交互。

熟悉 OpenStack 的人看着上面的图应该很眼熟,这和创建虚机的架构几乎完全一样,就是把 VM 换成了 Bare Metal。所以,要想玩转 Ironic,需要对这些服务已经有一定程度掌握。

最终裸金属的部署流程如图所示:

Ironic 部署流程

实践示例

裸金属服务器在 OpenStack 系统中开始称之为 节点,有点类似于计算节点,区别在于计算节点是在上面创建虚拟机,而裸金属节点一旦被调度就完全占用。

节点只有管理员可以操作,因为此时它是属于计算资源。

裸金属节点

用户在使用裸金属的时候体验完全和虚机没有两样,包括展示界面,启动方式等,部署成功的裸金属和虚拟机一样都叫 实例

裸金属实例

上面的裸金属实例,就是在疫情期间,在家里远程办公的情况下,在家部署完成。最终安装好的服务器是作为新的节点扩充到了另外一套 OpenStack 环境中了。如果没有 Ironic,而通过 VPN 挂载本地几 GB 大小的镜像文件,网络带宽将很难保证稳定的安装完系统。


\m/ ʕ•͡ᴥ•ʔ \m/

Davy
Davy
学习📚 技术👨‍💻 投资📈

一些心得体会,希望能对你有所帮助🚀。