上一篇文章里我简单介绍了一下「裸金属」的概念,提到了 OpenStack 中的核心项目 Ironic,今天简单来聊聊它。


Ironic 项目的吉祥物

Bare Metal 所以用 Bear 来做吉祥物,谐音梗很好玩嘛

在介绍 Ironic 之前,我们必须要对服务器是怎么管理的有个基本认识。

服务器的远程管理

服务器放在机房里,平常都是远程使用。但是难免有个系统死机、硬件损坏等情况,或者需要重装系统的时候,这时候就没法远程了,需要人到机房去操作了。

如果只有少量机器倒也罢了,数据中心里的服务器往往成百上千,总是要靠人去处理这些事情很不方便也不安全。

运维人员需要通过网络来远程操作和配置服务器,例如重启机器和重装系统。

这样就会遇到对普通人来讲有点困惑的问题:

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

BMC 和 IPMI

显然,我们需要另外一个独立的系统,它不受平常这个系统关机的影响。这个独立的系统在服务器通过额外的硬件控制器上来实现,即基板管理控制器(Baseboard Manager Controller),简称 BMC

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

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

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

通过 BMC 远程操控服务器是裸金属服务的技术前提,这个是服务器的标配,一般 PC 机是没有的,所以它们没法通过裸金属服务来管理。

IPMI 面世已经超过了 20 年,在 2014 年又出现了新的带外管理标准 Redfish,从长远的时间看,会逐渐替代 IPMI。不过 IPMI 现在使用仍然十分广泛。

BMC 的基本功能

服务器一旦插上电源,BMC 就开始上电,可以工作了。

BMC 通过独立的网口通讯,一般默认启动后通过 DHCP 获取 IP。如果没有配置 DHCP 服务,则需要在服务器启动时,通过 BIOS 配置静态的地址,然后就可以通过浏览器直接访问了:


BMC 登录

用户名和初始密码一般在服务器的用户手册里会有提及,或者可以直接联系厂商获取。


BMC 页面

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

这里最实用的功能当属 KVM(Keyboard Video Mouse) 系统。注意,这里和 KVM 虚拟化是两码事。通过 KVM 我们可以远程和服务器直接交互,就和在机房里接了显示器和键盘一样。

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

在 KVM 系统中可以挂载本地的 iso 镜像文件,完成操作系统的安装。不过这种交互式安装系统效率太低,实际应用中我们需要通过网络自动化安装系统。


KVM功能

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. 完成操作系统安装

在云计算技术出现之前,通过 PXE + Kickstart 来自动部署已经是运维必备的技术了。

OpenStack Ironic 在此基础上,做了更多的优化,例如在安装系统时,不需要再用到 kickstart 自动应答文件,而是直接通过 iSCSI 挂载磁盘,把事先做好的磁盘镜像克隆过去,免去了系统安装的过程,更加高效省时。

下面终于可以来看看 Ironic 长什么样了。

Ironic 的架构

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


Ironic 基础架构

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


Ironic 逻辑架构

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

熟悉 OpenStack 的人看着上面的图应该很眼熟,和创建虚机几乎完全一样,就是把 VM 换成了 Bare Metal

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


Ironic 部署流程

在 Dashboard 上操作

裸金属服务器在系统中有两种存在方式。

受管理时被称之为 节点(Node),有点类似于计算节点,此时它是属于计算资源。用户新建实例时,裸金属节点和计算节点一起参与调度,区别在于计算节点是在上面创建虚拟机,而裸金属节点一旦被调度就完全占用。

节点只有管理员可以操作。


裸金属节点

用户在使用裸金属资源的时候,体验和创建虚机没有两样,部署成功后的裸金属和虚拟机一样都叫 实例(Instance):


裸金属实例展示

在上图中,除了裸金属使用的镜像(Image)和实例类型(Flavor)都和虚机实例有所不同,但是整个的操作流程和使用体验是完全一致的。

小结

今天浮光掠影的介绍了一下 Ironic ,希望可以让大家有个初步的认识。

其中涉及到不少 Linux 运维相关的技术,在尝试 Ironic 之前,有兴趣的人可以参考网络教程动手实践一番,相信会对理解裸金属的部署过程有很大帮助。


感谢您的阅读,请继续关注 「云计算实验室」, \m/ ʕ•͡ᴥ•ʔ \m/

本文使用 mdnice 排版

简单聊聊 Ironic的更多相关文章

  1. 简单聊聊Storm的流分组策略

    简单聊聊Storm的流分组策略 首先我要强调的是,Storm的分组策略对结果有着直接的影响,不同的分组的结果一定是不一样的.其次,不同的分组策略对资源的利用也是有着非常大的不同,本文主要讲一讲loca ...

  2. 简单聊聊java中的final关键字

    简单聊聊java中的final关键字 日常代码中,final关键字也算常用的.其主要应用在三个方面: 1)修饰类(暂时见过,但是还没用过); 2)修饰方法(见过,没写过); 3)修饰数据. 那么,我们 ...

  3. 简单聊聊SOA和微服务

    转自:https://juejin.im/post/592f87feb123db0064e5ef7c  (2017-06) 简单聊聊SOA和微服务 架构设计中的朴素主义 前两天和一个朋友聊天,他向我咨 ...

  4. 转 简单聊聊IT软件项目的风险及应对

    https://www.jianshu.com/p/b347adca87a6 前言 上段时间在一家演讲俱乐部做即兴演讲主持人,聊的就是风险管理,与会的小伙伴分享了不同行业的风险问题,令人受益匪浅,今天 ...

  5. 简单聊聊CSS中的3D技术之“立方体”

    简单聊聊CSS中的3D技术之“立方体” 大家好,我是今天的男一号,我叫小博主. 今天来聊一下我在前端“逆战班”学习中遇到的颇为有趣的3D知识.前端学习3周,见识稀疏,在下面的分享中如有不对的地方请大家 ...

  6. 【DNS】简单聊聊DNS如何工作

    随便聊聊 我们知道,网络上传输的数据包是一层一层的包起来的,典型的是mac地址层,ip层,tcp/udp层,应用层数据 这么几个层,那用户在浏览器中打开www.baidu.com数据包如何传到baid ...

  7. 简单聊聊Linux学习经历

    学习,是我们一生中都规避不了的一个话题,人的一生中都是在不断的学习,无论是功成名就的人士,还是一无是处的小混混,始终都处在一个不断学习的环境中,只是学习的内容千差万别,有的人是为了提升自己各方面的能力 ...

  8. 简单聊聊WebSocket

    一.概述 上一篇文章<浅析一次HTTP请求>我们分析了简单的一次 HTTP 请求具体是怎么样完成的,分析了 HTTP 协议的数据结构,如何连接,如何断开,又是如何多路复用的,那么今天我们来 ...

  9. 简单聊聊红黑树(Red Black Tree)

    ​ 前言 众所周知,红黑树是非常经典,也很非常重要的数据结构,自从1972年被发明以来,因为其稳定高效的特性,40多年的时间里,红黑树一直应用在许多系统组件和基础类库中,默默无闻的为我们提供服务,身边 ...

随机推荐

  1. 团队作业4:第七篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...

  2. linux上的deepin-qq不能显示图片解决方法

    在贴吧发现的一个方法 在终端输入以下命令,重新打开QQ即可 sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sudo sysctl -w net.piv ...

  3. win7中java编程工具安装 java环境变量设置

    一.下载java 官方地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html ...

  4. Shell编程—数据展示

    1.标准文件描述符 Linux用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一个非负整数,可以唯一标识会话中打开的文件.每个进程一次 多可以有九个文件描述符.出于特殊目 ...

  5. 大白话带你认识 ZooKeeper !重要概念一网打尽!

    大家好,我是 「后端技术进阶」 作者,一个热爱技术的少年. 1. 前言 相信大家对 ZooKeeper 应该不算陌生.但是你真的了解 ZooKeeper 到底有啥用不?如果别人/面试官让你给他讲讲对于 ...

  6. 记得设置docker日志文件大小!!!!!

    # vim /etc/docker/daemon.json { "log-driver":"json-file", "log-opts": ...

  7. webdriver入门之环境准备

    1.安装ruby 下载ruby的安装包,很简单,不解释.装好之后打开cmd输入以下命令验证是否安装成功 ruby -v 2.安装webdriver 确保机器联网,用gem命令安装是在有网络的情况下进行 ...

  8. 20190928-01Redis五大数据类型之Hash和Zset 000 029

  9. Nginx之rewrite使用

    rewrite regex replacement [flag];  flag=[break/last/redirect/permanent] ² regex 是正则表达式 ² replacement ...

  10. 提升开发幸福度-IDE配置

    插件 vscode插件 Settings Sync Atom One Dark Theme Bracket Pair Colorizer Code Runner Dracular Official E ...