随着 OpenStack 的发展,通过 nova 对虚拟机的管理已经很成熟了, 但是有些应用场景需要的是物理机的 provision,比如高性能计算,快速部署云基础环境,甚至有些用户在生产环境里只信任物理机而不是虚拟机,等等。为此 Ironic 应运而生,并且社区已经从 kilo 版本开始正式把 Ironic 放到 OpenStack 中去了。Ironic 使 OpenStack 对物理机的管理能像管理虚机一样方便,完美的解决了在云环境中对物理机的添加,删除和安装部署。通过 Ironic,我们也可以在云环境中创建或添加计算节点不再需要繁杂的人工部署,Ironic 会从镜像模板中加载操作系统到计算节点完成安装即可。提到 Ironic,我们有必要先了解下 Ironic 用到的两项关键技术。
IPMI(Intelligent Platform Management Interface) 智能平台管理接口,是一种开放标准的硬件管理接口规格,使用嵌入式管理子系统进行通信而不依赖主机操作系统,这使得在操作系统不响应或未加载的情况下其仍然可以进行开关机、信息提取等操作。Ironic 正是利用此技术可以远程的对裸机进行上下电或者其他操作,而不是依赖物理开关或者操作系统。
PXE(preboot execute environment) 预启动执行环境。PXE 是目前主流的无盘启动技术,它可以使计算机通过网络而不是从本地硬盘、光驱等设备启动。利用 PXE 进行系统安装需要被安装的主机上有 PXE 支持的网卡,不过现在的网卡一般都内嵌支持 PXE 的 ROM 芯片。当计算机引导时,BIOS 首先会 把 PXE Client 调入内存中执行,PXE Client 被载入内存后,它便同时具有 DHCP client 和 TFTP Client 的功能,DHCP client 会向 DHCP server 请求 ip 分配给将要安装系统的主机,然后由 PXE Client 将放置在远端的文件通过 TFTP 下载到本地运行。
对于用 Ironic 来管理物理机来说,最重要的步骤就是远程给物理机上电或下电,这需要物理机支持带外控制,如支持 IPMI 或 SNMP 或 DRAC 或 ILO。如果你手头上没有支持带外控制的物理机但是又需要做些 PoC 测试或者 Ironic 的学习,那 Virtual Box 是非常好的选择,我们可以在 VirtualBox 中创建虚机当做 bare metal 的物理机,用 Ironic 中的 Virtualbox driver 去管理这些虚机。
Ironic 服务由以下组件构成:
OpenStack 控制节点:
物理节点(由 Virtualbox 模拟):
Virtualbox 版本:Version 5.0.10 r104061
OpenStack 控制节点的部署
我们可以用 OpenStack 社区所提供的部署脚本 devStack 进行 OpenStack 控制节点的部署,部署过程可以参考Ironic 开发者文档,这里不再赘述。
准备部署物理机所需要的镜像
为了部署物理机,我们需要用到两种镜像:用户镜像和部署镜像。用户镜像即最终要安装在物理机上的操作系统镜像,部署镜像是负责在部署过程中将用户镜像写入物理机的镜像。物理机部署过程中,Ironic 首先将部署镜像安装在物理机上,并在部署镜像的帮助下将物理机的磁盘通过 iSCSI 协议暴露出来,然后将用户镜像写入物理机磁盘。
创建并上传用户镜像
我们使用 diskimage-builder 创建用户镜像:
1
2
3
4
5
6
7
|
sudo pip install diskimage-builder
disk-image-create ubuntu vm dhcp-all-interfaces grub2 -o my-image
执行 OpenStack 命令上传用户镜像:
glance image-create --name user_image --visibility public \
--disk-format qcow2 --container-format qcow2 \
grub2 -o user_image
|
创建并上传部署镜像
我们仍然使用 diskimage-builder 创建部署镜像:
1
2
|
sudo pip install diskimage-builder
disk-image-create ironic-agent fedora -o ironic-deploy
|
执行 OpenStack 命令上传部署镜像:
1
2
3
4
5
6
|
glance image-create --name deploy-vmlinuz --visibility public \
--disk-format aki --container-format aki \
< my-deploy-ramdisk.kernel
glance image-create --name deploy-initrd --visibility public \
--disk-format ari --container-format ari \
< my-deploy-ramdisk.initramfs
|
为物理节点创建硬件模板(flavor)
硬件模板(flavor)用以指定 Ironic 所部署的物理节点的硬件信息,例如 CPU 的个数,RAM 以及硬盘的大小等。可以用以下 OpenStack 命令创建 flavor:
1
2
3
|
nova flavor-create
FLAVOR_NAME auto RAM_MB DISK_GB CPU
nova flavor-key FLAVOR_NAME set cpu_arch="x86_64"
|
其中 FLAVOR_NAME 即 flavor 的名字,RAM_MB 为 RAM 的大小,DISK_GB 为硬盘的大小,可以根据需求自行指定。
创建用以模拟物理节点的虚拟机
我们在 Virtualbox 中创建一个名为 baremetal 的虚拟机(推荐 RAM 大于 1024MB,硬盘大于 8GB),不安装操作系统镜像,用以模拟物理节点。
启动 vboxweb-service 服务
Ironic 服务会通过 Virtualbox driver 调用 vboxweb-service,完成对 Virtualbox 虚拟机的操作,因此为了让 Ironic 服务能够与 vitualbox 虚拟机进行交互,我们需要启动 vboxweb-service: sudo /etc/init.d/vboxweb-service start
经过上面的步骤,我们已经成功的搭建了 Ironic 实验环境。下面我们在实验环境上演示 Ironic 对物理节点的创建和管理操作。
运行以下 OpenStack 命令对我们用 Virtualbox 模拟出来的物理节点 baremetal 登记:
1
2
3
|
ironic node-create -d pxe_vbox -i
virtualbox_host='192.168.33.1' \
-i virtualbox_vmname='baremetal'
|
参数中的 virtualbox_host 为运行 vboxweb-service 服务的主机的 IP 地址。
成功注册物理节点后,Ironic-Conductor 服务便能够根据节点描述信息找到相应的物理节点。
物理节点部署过程中需要通过网络从服务器下载镜像文件,因此我们需要为其创建一个网络端口进行网络通信,通过参数传入物理节点的 MAC 地址,命令如下:
1
|
ironic port-create -n $NODE_UUID -a $MAC_ADDRESS
|
其中 MAC_ADDRESS 即为物理节点的 MAC 地址。
根据硬件模板(flavor)更新硬件信息
1
2
3
|
ironic node-update $NODE_UUID add \
properties/cpus=$CPU properties/memory_mb=$RAM_MB \
properties/local_gb=$DISK_GB properties/cpu_arch=$ARCH
|
更新部署镜像(deploy image)信息
1
2
3
|
ironic node-update $NODE_UUID add \
driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID \
driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID
|
注意如果节点的 Maintenance 状态为 True,说明节点正处于维护模式,在部署之前需要通过以下命令关闭维护模式:
1
|
ironic node-set-maintenance $NODE_UUID off
|
确认节点状态正常后,开始部署节点:
1
2
|
nova boot --config-drive true --flavor my_flavor
--image bare_root_pass instance-1
|
通过 Virtualbox 窗口我们可以观察到 baremetal 节点已经被启动并开始通过 PXE 下载镜像:
部署镜像部署成功后,物理节点的磁盘被通过 iSCSI 协议暴露给 Ironic-Conductor, 随后 Ironic-Conductor 会向物理节点磁盘中写入用户镜像:
用户镜像部署完成后,物理节点的部署也就结束了,此时我们便可以登录物理节点进行验证:
从上面的截图可以看到,我们所创建的 baremetal 节点已经顺利的安装了用户镜像,可以正常使用了。
本文对 Ironic 的工作原理,流程以及相关技术做了简单的介绍,并利用 Virtualbox 说明了实验环境的搭建过程,最后在实验环境中演示了 Ironic 对于物理节点的部署与管理。
转载自https://www.ibm.com/developerworks/cn/cloud/library/cl-cn-virtualboxironic/