from nova to ironic

本文详细介绍了在OpenStack环境中Ironic与Nova组件的集成流程。重点解释了当Nova接收到创建虚拟机或物理机请求时,如何通过一系列RPC调用最终将任务委托给Ironic进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ironic的文档中,我们可以看到:

compute_driver=nova.virt.ironic.IronicDriver                                                   
compute_dirver是用来最终生成目标机的东西,这里说目标机是因为可能是虚机也可能是物理机,生成虚机有一般nova所用的libvirt,也有hyperv,xenapi,vmwareapi,这些在
nova/virt下可以看到,相应的分配一个物理机就是ironic了。

前面讲了很多如何看,如何调试ironic,事实上,ironic的blueprint中是有可能将其作为一个单独的项目,脱离openstack而独立存在的,在ironic中和openstack的其他模块
打交道的地方只有几个,common库就不说了,存放deploy需要使用的镜像,可以是glance也可以是swift,pxe启动时使用DHCP服务器,使用neutron中的ml2层的dnsmsaq,使用
keystone做了auth相关的操作等等,而这些操作都是可以拿掉的,作为一个pecan项目,ironic有自己的入口和方式,某种程度上和其他的openstack模块不一样,那么把ironic
仅仅当做是产生目标机的一个lib库的话,从nova收到创建一个目标机开始,是怎么玩儿的呢。

结合install的guide和源码
在所有请求与相应之前,nova的相关服务要启动,安装好了之后nova的相关服务启动文件和ironic一样在/usr/bin目录下,系统启动服务时候调用这些脚本,脚本启动nova/cmd
下的入口文件启动compute,conductor,scheduler等各种服务,服务做一些初始化的工作,读取配置文件fill CONF,数据库初始化,stevedore读取系统设置的entry_point载入
可能需要使用的driver对应关系,作为server段使用messaging连接MQ,准备接受RPC请求,等等。。。。一大堆工作,在ironic中使用了pecan,所以rest请求相关的route操作由
pecan项目源生的方式完成,对于像nova一样的其他项目则是使用python基本的WSGI规范启动service,使用paste,webob,router这一套来完成rest入口设定,路由配置,
request/response等各种操作,这些东西具体怎么弄的,我之前总结过不过没哟post到网上,今后我会整理之后放上来,这里不会对nova相关的东西说的很细

1. nova 收到一个请求,说创建一个机器,
在nova的paste.ini文件中nova.api.openstack.compute:APIRouter.factory 作为router的入口,不同版本的rest会有不同的入口,这里使用v2的rest,通过router中的mapper
找到对应的controller,由于是创建机器,属于server相关的操作,插卡nova 的rest api:
http://developer.openstack.org/api-ref-compute-v2.html
POST /v2/​{tenant_id}​/servers Create server
对应的controller在/nova/api/openstack/compute/server.py中的Controller,调用create方法, 方法中会解析post进来的request body做image,flavor,network等等的相关 初始化工作,最后调用nova.compute.API().create方法(这里有cell的判断与使用,先暂时不讲),简单看会调用nova.compute.api.API.create中check一些policy相关的操作, 这个create的调用过程是比较长的,也是整个nova的核心,再经过一堆filter,调用nova.conductor.ConductorTaskAPI.build_instance,和ironic一样,现在的openstack设计 里,conductor中的操作最终编程RPC调用,rpc发送消息到具体的conductor上执行操作或者改动数据库等操作(nova比较复杂,调用跳来跳去,事实上和其他模块一样,调用 跳转都是rest -> conductor(涉及到conductor类型的选择可能会再次跳转) -> rpc call ->compute manager) 此处执行nova.conductor.rpcapi.ComputeTaskAPI.build_instance,rpc调用被conductor_manager收到,再次使用rpc call发到nova.compute.rpcapi接收调用方法变成 "build_and_run_instance",再次rpc调用,执行nova.compute.manager.ComputeManager.build_and_run_instance 2. 正常的nova build instance是上面的过程,但是使用ironic的话,compute_manager变成了
ironic.nova.compute.manager.ClusteredComputeManager, 该类集成自nova.compute.manager.ComputeManager,只是实现了几个方法而已,事实上build_and_run_instance
方法还是在nova的compute_manager中

firefox总是crash。。。打击,待续。。。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值