用ironic安装openstack的原理

声明:
本博客欢迎转载,但请保留原作者信息
作者:柯晓东
团队:华为杭州OpenStack团队

多节点的Openstack安装一直很麻烦(特别是要配置neutron,且操作系统又不是ubuntu的时候)。费了九牛二虎之力,好不容易按照社区的文档,把多节点环境安装好了,怎么才能快速地拷贝到其他环境上?

最简单的方法就是用工具(disk-image-builder)将各个节点依次做成镜像,然后把镜像拿去做二次部署。


上述的部署方式,看似简单,其实坑还是很多。毕竟这种部署方式不是完全自动化的。两个计算节点用同一个镜像,加载完os之后,需要手动给2个节点单独配置ip。还要其他必要的配置。

pxe(dhcp+tftp)能自动安装也能自动配置,于是pxe自然被选为自动部署的首选工具。为了使用pxe,需要另外准备2个镜像(kernel、initrd),用于从网络启动目标机器,以便下一步将要部署的镜像写入目标机器的磁盘。


pxe的安装过程如下:(1)目标机器先通过网络协议(dhcp和tftp)将服务器上的kernel、initrd下载到目标机的内存(非磁盘),(2)目标机执行initrd程序,(3)initrd根据目标机的MAC地址等信息从服务器加载不同的镜像写入目标机的磁盘,(4)待目标机完成将镜像写入磁盘后,让目标机从硬盘重启即可。

ironic(baremetal) 的想法就是这样,用pxe把镜像装到目标节点上。当然还不止这些,它做的更多一些,它用上glance来保存镜像、用上了neutron来创建网络,又用上了disk-image-create来创建pxe用的kernel和initrd,再使用ipmi工具(使用第三方的pyipmi)、snmp工具(使用第三方库pysnmp)、DRAC(Dell服务器特有的)、ILO工具(HP服务器特有的)、ssh(适用libvirt、virtualbox、vmware虚拟机)来控制目标机器的上下电和pxe。

ironic的想法中最关键的一环就是要控制主机的上下电和pxe,特别是pxe。普通PC的pxe要去bios里面设置的,进入os后难以控制单板的启动方式。所以......目前ironic无法用来安装PC机。它目前只能安装能使用“带外控制”的服务器(即需要支持ipmi、或者snmp、或者DRAC、或者ILO,或者只能用在虚拟机上)。

ironic部署的整个流程如下:

(1)用disk-image-builder先从已经安装好的控制节点、计算节点上导出需要的镜像,然后传到glance。

(2)为了使用pxe,还要准备2套kernel和initrd(因为要pxe两次)。第一套是deploy用的,第二套是boot用的。

ironic\drivers\modules\pxe_config.template

default deploy

label deploy
kernel {{ pxe_options.deployment_aki_path }}
append initrd={{ pxe_options.deployment_ari_path }} rootfstype=ramfs selinux=0 disk={{ pxe_options.disk }} iscsi_target_iqn={{ pxe_options.iscsi_target_iqn }} deployment_id={{ pxe_options.deployment_id }} deployment_key={{ pxe_options.deployment_key }} ironic_api_url={{ pxe_options.ironic_api_url }} troubleshoot=0 text {{ pxe_options.pxe_append_params|default("", true) }}
ipappend 3

label boot
kernel {{ pxe_options.aki_path }}
append initrd={{ pxe_options.ari_path }} root={{ ROOT }} ro text {{ pxe_options.pxe_append_params|default("", true) }}

这两套kernel和initrd必须使用社区的disk-image-builder工具来创建。因为ironic要在deploy用的initrd里面塞一点脚本,以便能完成后续的镜像安装工作。

(3)将目标机器的bmc、snmp、drac等信息用ironic的命令加入ironic conductor里面

(4)将nova的virt的driver从kvm或vmware改为ironic。接着用nova boot创建主机。这样ironic conductor就会让目标主机通过pxe加载预先设置好的deploy用的kernel和initrd。

(5)目标主机加载完成后,会执行deploy的initrd,里面有ironic预制的脚本。
diskimage-builder\elements\deploy-ironic\init.d\80-deploy-ironic
这个脚本运行在目标机上,它会找第一个找到的磁盘,然后用lvm那一套(tgt+iscsi工具)将磁盘挂在网上,同时写权限还是设置为ALL的。之后脚本会用curl通知ironic conductor可以写入镜像了,然后就打开端口号为10000的端口,等待conductor通知它镜像写完了。

(6)ironic conductor收到通知后,会依照创建机器的套餐镜像对主机的磁盘镜像处理。这段代码在 ironic\drivers\modules\pxe.py的_continue_deploy里面。
conductor会用iscsi命令扫描新增的盘,接着会将镜像从conductor这一边写入目标机器的硬盘上。
(7)conductor写完镜像后,会朝着目标机器的10000端口发一个通知。目标机收到通知后,会从lvm上卸载掉磁盘。ironic conductor接着会让目标机器重新pxe,此时给目标机器的kernel和initrd会改为和它磁盘镜像配套的那一份。


ironic我刚刚才学习,都靠jiangfei前辈的提携。近期我会想搞明白下面几个事情,等我弄通了,我再给大家汇报:

(1)有什么办法可以把pc机给支持起来

(2)看看社区的ironic-python-agent能不能做到单板的自发性

(3)镜像里面已有启动的kernel和initrd,那么第二次pxe的kernel和initrd是否可以忽略?

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值