简单聊聊 Ironic
上一篇文章里我简单介绍了一下「裸金属」的概念,提到了 OpenStack 中的核心项目 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) 系统。
这里我们不用过多关注这些细节,只要知道平常我们说起 BMC 或 IPMI 或 带外系统 的时候,基本上就是在说同一个东西,就是远程管理服务器的接口。
通过 BMC 远程操控服务器是裸金属服务的技术前提,这个是服务器的标配,一般 PC 机是没有的,所以它们没法通过裸金属服务来管理。
IPMI 面世已经超过了 20 年,在 2014 年又出现了新的带外管理标准 Redfish,从长远的时间看,会逐渐替代 IPMI。不过 IPMI 现在使用仍然十分广泛。
BMC 的基本功能
服务器一旦插上电源,BMC 就开始上电,可以工作了。
BMC 通过独立的网口通讯,一般默认启动后通过 DHCP 获取 IP。如果没有配置 DHCP 服务,则需要在服务器启动时,通过 BIOS 配置静态的地址,然后就可以通过浏览器直接访问了:

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

登录进去后,不同品牌的服务器所呈现的页面会有较大差别,但是整体功能大同小异,主要就是查看服务器的硬件信息,当前状态等等。
这里最实用的功能当属 KVM(Keyboard Video Mouse) 系统。注意,这里和 KVM 虚拟化是两码事。通过 KVM 我们可以远程和服务器直接交互,就和在机房里接了显示器和键盘一样。
Linux KVM 虚拟化技术的缩写是 Kernel-based Virtual Machine
在 KVM 系统中可以挂载本地的 iso 镜像文件,完成操作系统的安装。不过这种交互式安装系统效率太低,实际应用中我们需要通过网络自动化安装系统。

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

PXE 启动开始通过 DHCP 获取 IP,所以需要有一台 DHCP 服务器 随着 DHCP 响应返回的除了 IP 还有 PXE 相关的配置信息,用来指示下一步去哪里 根据上一步的信息去 TFTP 服务器上请求下载 Linux 引导系统 TFTP 服务器事先准备好包括 Linux 内核在内的文件供下载 进一步下载操作系统文件,包括自动应答文件 完成操作系统安装
在云计算技术出现之前,通过 PXE + Kickstart 来自动部署已经是运维必备的技术了。
OpenStack Ironic 在此基础上,做了更多的优化,例如在安装系统时,不需要再用到 kickstart 自动应答文件,而是直接通过 iSCSI 挂载磁盘,把事先做好的磁盘镜像克隆过去,免去了系统安装的过程,更加高效省时。
下面终于可以来看看 Ironic 长什么样了。
Ironic 的架构
Ironic 系统就是一个典型的 OpenStack 服务架构,包含了一个 API 组件,和一个处理后台任务的 Conductor 组件,Conductor 通过各种 Driver 完成实际的工作。

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

从图中我们可以看出,Ironic 和 OpenStack 的核心模块 Nova、Neutron、Glance、Cinder 都有交互。
熟悉 OpenStack 的人看着上面的图应该很眼熟,和创建虚机几乎完全一样,就是把 VM 换成了 Bare Metal。
最终裸金属的部署流程如图所示:

在 Dashboard 上操作
裸金属服务器在系统中有两种存在方式。
受管理时被称之为 节点(Node),有点类似于计算节点,此时它是属于计算资源。用户新建实例时,裸金属节点和计算节点一起参与调度,区别在于计算节点是在上面创建虚拟机,而裸金属节点一旦被调度就完全占用。
节点只有管理员可以操作。

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

在上图中,除了裸金属使用的镜像(Image)和实例类型(Flavor)都和虚机实例有所不同,但是整个的操作流程和使用体验是完全一致的。
小结
今天浮光掠影的介绍了一下 Ironic ,希望可以让大家有个初步的认识。
其中涉及到不少 Linux 运维相关的技术,在尝试 Ironic 之前,有兴趣的人可以参考网络教程动手实践一番,相信会对理解裸金属的部署过程有很大帮助。
感谢您的阅读,请继续关注 「云计算实验室」, \m/ ʕ•͡ᴥ•ʔ \m/
本文使用 mdnice 排版
简单聊聊 Ironic的更多相关文章
- 简单聊聊Storm的流分组策略
简单聊聊Storm的流分组策略 首先我要强调的是,Storm的分组策略对结果有着直接的影响,不同的分组的结果一定是不一样的.其次,不同的分组策略对资源的利用也是有着非常大的不同,本文主要讲一讲loca ...
- 简单聊聊java中的final关键字
简单聊聊java中的final关键字 日常代码中,final关键字也算常用的.其主要应用在三个方面: 1)修饰类(暂时见过,但是还没用过); 2)修饰方法(见过,没写过); 3)修饰数据. 那么,我们 ...
- 简单聊聊SOA和微服务
转自:https://juejin.im/post/592f87feb123db0064e5ef7c (2017-06) 简单聊聊SOA和微服务 架构设计中的朴素主义 前两天和一个朋友聊天,他向我咨 ...
- 转 简单聊聊IT软件项目的风险及应对
https://www.jianshu.com/p/b347adca87a6 前言 上段时间在一家演讲俱乐部做即兴演讲主持人,聊的就是风险管理,与会的小伙伴分享了不同行业的风险问题,令人受益匪浅,今天 ...
- 简单聊聊CSS中的3D技术之“立方体”
简单聊聊CSS中的3D技术之“立方体” 大家好,我是今天的男一号,我叫小博主. 今天来聊一下我在前端“逆战班”学习中遇到的颇为有趣的3D知识.前端学习3周,见识稀疏,在下面的分享中如有不对的地方请大家 ...
- 【DNS】简单聊聊DNS如何工作
随便聊聊 我们知道,网络上传输的数据包是一层一层的包起来的,典型的是mac地址层,ip层,tcp/udp层,应用层数据 这么几个层,那用户在浏览器中打开www.baidu.com数据包如何传到baid ...
- 简单聊聊Linux学习经历
学习,是我们一生中都规避不了的一个话题,人的一生中都是在不断的学习,无论是功成名就的人士,还是一无是处的小混混,始终都处在一个不断学习的环境中,只是学习的内容千差万别,有的人是为了提升自己各方面的能力 ...
- 简单聊聊WebSocket
一.概述 上一篇文章<浅析一次HTTP请求>我们分析了简单的一次 HTTP 请求具体是怎么样完成的,分析了 HTTP 协议的数据结构,如何连接,如何断开,又是如何多路复用的,那么今天我们来 ...
- 简单聊聊红黑树(Red Black Tree)
前言 众所周知,红黑树是非常经典,也很非常重要的数据结构,自从1972年被发明以来,因为其稳定高效的特性,40多年的时间里,红黑树一直应用在许多系统组件和基础类库中,默默无闻的为我们提供服务,身边 ...
随机推荐
- RSA加密算法和SSH远程连接服务器
服务器端与客户端的密钥系统不一样,称为非对称式密钥系统 RSA算法的基础是模运算x mod n,事实上: [(a mod n) + (b mod n)] mod n = (a+b) mod n [(a ...
- zstd和zip操作6g的文本
ssd是在固态硬盘上的时间 1.txt 7038308223 bytes 都是默认级别 ======================================== zstd-v1.4.4-w ...
- .Net Task 异步执行不等待结果返回
该文章适合有一定异步编程基础的童鞋 开始之前先看.NET官网的一张图: 异步编程中最需弄清的是控制流是如何从方法移动到方法的. 没有理解的话可以去看一下 https://docs.microsoft. ...
- 【趣味设计模式系列】之【代理模式4--ASM框架解析】
1. 简介 ASM是assemble英文的简称,中文名为汇编,官方地址https://asm.ow2.io/,下面是官方的一段英文简介: ASM is an all purpose Java byte ...
- 用Python发一封图文并茂的邮件
最近使用了不少通讯工具的接口, 比如企业微信机器人,钉钉,微信公众号的接口(未认证的订阅公众号),相对于邮件来说,它们的表现形式太弱.比如没有更丰富的版本方式.当然了,并不是说表现形式越棒就是约好的通 ...
- Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码
Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...
- android开发之java代码中字符串对比忽略大小写。java程序员必回,可用来比对验证码等问题
比如:字符串a与字符串B对比,只需调用 a.equalsIgnoreCase(B);即可.很简单的一个方法.忽略大小写.
- CSS中的包含块
1.初始包含块,浏览器viewport大小 2.非根元素,position:relative/static,包含块为最近的块级框,表格单元或行内祖先框的内容区 3.非根元素,position:abso ...
- 持续部署入门:基于 Kubernetes 实现滚动发布
前言 软件世界比以往任何时候都更快.为了保持竞争力,需要尽快推出新的软件版本,而不会中断活跃用户访问,影响用户体验.越来越多企业已将其应用迁移到 Kubernetes. 在 Kubernetes 中有 ...
- 19_Python算法
1.冒泡算法 list = [1, 5, 2, 6, 9, 3, 4, 0] print(len(list)) # conunt = 1 while conunt < len(list): fo ...