2017年3月15日星期三

利用 Virtualbox 进行 Ironic 环境的搭建和测试

Ironic 简介

随着 OpenStack 的发展,通过 nova 对虚拟机的管理已经很成熟了, 但是有些应用场景需要的是物理机的 provision,比如高性能计算,快速部署云基础环境,甚至有些用户在生产环境里只信任物理机而不是虚拟机,等等。为此 Ironic 应运而生,并且社区已经从 kilo 版本开始正式把 Ironic 放到 OpenStack 中去了。Ironic 使 OpenStack 对物理机的管理能像管理虚机一样方便,完美的解决了在云环境中对物理机的添加,删除和安装部署。通过 Ironic,我们也可以在云环境中创建或添加计算节点不再需要繁杂的人工部署,Ironic 会从镜像模板中加载操作系统到计算节点完成安装即可。提到 Ironic,我们有必要先了解下 Ironic 用到的两项关键技术。
  • IPMI
IPMI(Intelligent Platform Management Interface) 智能平台管理接口,是一种开放标准的硬件管理接口规格,使用嵌入式管理子系统进行通信而不依赖主机操作系统,这使得在操作系统不响应或未加载的情况下其仍然可以进行开关机、信息提取等操作。Ironic 正是利用此技术可以远程的对裸机进行上下电或者其他操作,而不是依赖物理开关或者操作系统。
  • PXE
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 下载到本地运行。

为什么用 Virtual Box

对于用 Ironic 来管理物理机来说,最重要的步骤就是远程给物理机上电或下电,这需要物理机支持带外控制,如支持 IPMI 或 SNMP 或 DRAC 或 ILO。如果你手头上没有支持带外控制的物理机但是又需要做些 PoC 测试或者 Ironic 的学习,那 Virtual Box 是非常好的选择,我们可以在 VirtualBox 中创建虚机当做 bare metal 的物理机,用 Ironic 中的 Virtualbox driver 去管理这些虚机。

Ironic 的工作原理与流程

Ironic 组件的介绍

Ironic 服务由以下组件构成:
  1. 一个 RESTful API 服务,这是用户或其他 OpenStack 服务与 Ironic 服务交互的接口;
  2. 一个 Conductor 服务,这是 Ironic 服务中最核心的组件,它负责了 Ironic 的大部分工作;
  3. 各种 Drivers,有了这些 Drivers 的支持,Ironic 服务就能管理多种多样的物理节点;
  4. 一个数据库,数据库中存储了与 Ironic 服务相关的所有资源的信息,包括 Conductor,物理节点和 Drivers 的状态信息。
图 1. Ironic 组件及流程图
图 1. Ironic 组件及流程图

Ironic 部署物理节点的流程

  1. 部署物理机的请求通过 Nova API 进入 Nova;
  2. Nova Scheduler 根据请求参数中的信息(指定的镜像和硬件模板等)选择合适的物理节点;
  3. Nova 创建一个 spawn 任务,并调用 Ironic API 部署物理节点,Ironic 将此次任务中所需要的硬件资源保留,并更新数据库;
  4. Ironic 与 OpenStack 的其他服务交互,从 Glance 服务获取部署物理节点所需的镜像资源,并调用 Neutron 服务为物理机创建网路端口;
  5. Ironic 开始部署物理节点,PXE driver 准备 tftp bootloader,IPMI driver 设置物理机启动模式并将机器上电;
  6. 物理机启动后,通过 DHCP 获得 Ironic Conductor 的地址并尝试通过 tftp 协议从 Conductor 获取镜像,Conductor 将部署镜像部署到物理节点上后,通过 iSCSI 协议将物理节点的硬盘暴露出来,随后写入用户镜像,成功部署用户镜像后,物理节点的部署就完成了。

实验环境的搭建

实验环境描述

OpenStack 控制节点:
  • 操作系统:Ubuntu 14.04.3 LTS
  • CPU: 32 Core
  • RAM: 32 GB
  • Hard Disk: 500 GB
物理节点(由 Virtualbox 模拟):
Virtualbox 版本:Version 5.0.10 r104061

搭建控制节点

OpenStack 控制节点的部署
我们可以用 OpenStack 社区所提供的部署脚本 devStack 进行 OpenStack 控制节点的部署,部署过程可以参考Ironic 开发者文档,这里不再赘述。
准备部署物理机所需要的镜像
为了部署物理机,我们需要用到两种镜像:用户镜像和部署镜像。用户镜像即最终要安装在物理机上的操作系统镜像,部署镜像是负责在部署过程中将用户镜像写入物理机的镜像。物理机部署过程中,Ironic 首先将部署镜像安装在物理机上,并在部署镜像的帮助下将物理机的磁盘通过 iSCSI 协议暴露出来,然后将用户镜像写入物理机磁盘。
创建并上传用户镜像
我们使用 diskimage-builder 创建用户镜像:
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 \
<my-image.initrdbaremetal dhcp-all-interfaces \
grub2 -o user_image
创建并上传部署镜像
我们仍然使用 diskimage-builder 创建部署镜像:
sudo pip install diskimage-builder
disk-image-create ironic-agent fedora -o ironic-deploy
执行 OpenStack 命令上传部署镜像:
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:
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 模拟物理节点

创建用以模拟物理节点的虚拟机
我们在 Virtualbox 中创建一个名为 baremetal 的虚拟机(推荐 RAM 大于 1024MB,硬盘大于 8GB),不安装操作系统镜像,用以模拟物理节点。
图 2. VirtualBox 创建虚机
Figure xxx. Requires a heading
启动 vboxweb-service 服务
Ironic 服务会通过 Virtualbox driver 调用 vboxweb-service,完成对 Virtualbox 虚拟机的操作,因此为了让 Ironic 服务能够与 vitualbox 虚拟机进行交互,我们需要启动 vboxweb-service: sudo /etc/init.d/vboxweb-service start

实验演示 Ironic 对物理节点的创建和管理

经过上面的步骤,我们已经成功的搭建了 Ironic 实验环境。下面我们在实验环境上演示 Ironic 对物理节点的创建和管理操作。

登记物理节点

运行以下 OpenStack 命令对我们用 Virtualbox 模拟出来的物理节点 baremetal 登记:
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 地址,命令如下:
ironic port-create -n $NODE_UUID -a $MAC_ADDRESS
其中 MAC_ADDRESS 即为物理节点的 MAC 地址。

更新物理节点信息

根据硬件模板(flavor)更新硬件信息
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)信息
ironic node-update $NODE_UUID add \
driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID \
driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID

部署物理节点

图 3. 通过 ironic node-list 命令查看物理节点
Figure xxx. Requires a heading
注意如果节点的 Maintenance 状态为 True,说明节点正处于维护模式,在部署之前需要通过以下命令关闭维护模式:
ironic node-set-maintenance $NODE_UUID off
确认节点状态正常后,开始部署节点:
nova boot --config-drive true --flavor my_flavor 
--image bare_root_pass instance-1
通过 Virtualbox 窗口我们可以观察到 baremetal 节点已经被启动并开始通过 PXE 下载镜像:
图 4. PXE 下载部署镜像
Figure xxx. Requires a heading
部署镜像部署成功后,物理节点的磁盘被通过 iSCSI 协议暴露给 Ironic-Conductor, 随后 Ironic-Conductor 会向物理节点磁盘中写入用户镜像:
图 5. Ironic-Conductor 向磁盘中写入用户镜像
Figure xxx. Requires a heading
用户镜像部署完成后,物理节点的部署也就结束了,此时我们便可以登录物理节点进行验证:
图 6. 登陆物理节点
Figure xxx. Requires a heading
从上面的截图可以看到,我们所创建的 baremetal 节点已经顺利的安装了用户镜像,可以正常使用了。

总结

本文对 Ironic 的工作原理,流程以及相关技术做了简单的介绍,并利用 Virtualbox 说明了实验环境的搭建过程,最后在实验环境中演示了 Ironic 对于物理节点的部署与管理。
地点: 中国浙江省杭州市