http://ezzze.iteye.com/blog/1164920
workflow:
1.用户向nova-api发送请求
用户发送请求到nova-api,这里有两种:
a.通过openstack
api
从 server.py's controller.create():
-
self.helper.create_instance(req,body,self.compute_api.create)
create_instance_helper.CreateInstanceHelper() 查表获取基本信息b.通过ec2
api 从cloud.py.run_instances()统一调 computer.api.create() 将新的数据插回去
-
self._ask_scheduler_to_create_instance(context,base_options,
-
instance_type,zone_blob,
-
availability_zone,injected_files,
-
admin_password,image,
-
instance_id=instance_id,
-
requested_networks=requested_networks)
2.API 将处理好的数据通过MQ
转发给scheduler .(code from Computer.api)
-
rpc.cast(context,
-
FLAGS.scheduler_topic,
-
{"method":"run_instance",
-
"args":{"topic":FLAGS.compute_topic,
-
"instance_id":instance_id,
-
"request_spec":request_spec,
-
"availability_zone":availability_zone,
-
"admin_password":admin_password,
-
"injected_files":injected_files,
-
"requested_networks":requested_networks}})
3.Scheduler
获取信息并作出决定 哪一个host 可以来run instance.
-
def__getattr__(self,key):
-
returnfunctools.partial(self._schedule,key)
-
def_schedule(self,method,context,topic,*args,**kwargs):
-
.......
-
rpc.cast(context,
-
db.queue_get_for(context,topic,host),
-
{"method":method,
-
"args":kwargs})
-
LOG.debug(_("Castedto%(topic)s%(host)sfor%(method)s")%locals())
4.Computer
从池中获取信息 并让 Networker 去准备一个ip ,让volume 准备卷, 然后初始化相应的信息,例如创建image,映射device,创建domain,
并将domain 放入running pool中 然后就进入等待直到instance的状态变为running.a.
networker 分配ip
-
network_info=self.network_api.allocate_for_instance(context,
-
instance,vpn=is_vpn,
-
requested_networks=requested_networks)
-
defallocate_floating_ip(self,context):
-
returnrpc.call(context,
-
FLAGS.network_topic,
-
{'method':'allocate_floating_ip',
-
'args':{'project_id':context.project_id}})
b 让 volume 准备卷
-
bd_mapping=self._setup_block_device_mapping(context,instance_id)
-
defcreate(self,context,size,snapshot_id,name,description,
-
volume_type=None,metadata=None,availability_zone=None):
-
rpc.cast(context,
-
FLAGS.scheduler_topic,
-
{"method":"create_volume",
-
"args":{"topic":FLAGS.volume_topic,
-
"volume_id":volume['id'],
-
"snapshot_id":snapshot_id}})
c call
nova.virt.libvirt.firewall.IptablesFirewallDriver 建立网络规则 这里是重头戏,单独开个贴记录下....d call
libvirt 创建domian 并launch
-
domain=self._create_new_domain(xml)
-
def_create_new_domain(self,xml,persistent=True,launch_flags=0):
-
ifpersistent:
-
-
domain=self._conn.defineXML(xml)
-
domain.createWithFlags(launch_flags)
-
else:
-
-
domain=self._conn.createXML(xml,launch_flags)
-
returndomain
e call virt.libvirt.connetion.spwan 等待
-
defspawn(self,context,instance,network_info,
-
block_device_info=None):
-
..........
-
def_wait_for_boot():
-
instance_name=instance['name']
-
try:
-
state=self.get_info(instance_name)['state']
-
exceptexception.NotFound:
-
msg=_("Duringreboot,%sdisappeared.")%instance_name
-
LOG.error(msg)
-
raiseutils.LoopingCallDone
-
-
ifstate==power_state.RUNNING:
-
msg=_("Instance%sspawnedsuccessfully.")%instance_name
-
LOG.info(msg)
-
raiseutils.LoopingCallDone
-
-
timer=utils.LoopingCall(_wait_for_boot)
-
returntimer.start(interval=0.5,now=True)
5一旦instance的状态改变至running,他就会去通过networker获取网络信息,
这里有几种方式,取决于你的networkManager
分享到:
相关推荐
OpenStack虚拟机创建交互流程详解.pptx
openstack虚拟机创建的50个步骤和100个知识点
在Openstack中实例指的就是vm,本文档就是在dashboard上创建vm的基本步骤:在创建虚拟机之前,要做一些准备,添加安全组,创建ssh密钥对。本文基于vm所需的网络配置已经创建完毕的情况下进行创建,网络的配置,请...
调用openstack api接口创建用户
简单使用openstack创建实例,详细的图文解析如何创建openstack实例
Openstack 启动instance ‘hvm’错误: 2012-05-25 10:07:12 TRACE nova.rpc.amqp Traceback (most recent call last): 2012-05-25 10:07:12 TRACE nova.rpc.amqp File /usr/lib/python2.7/dist-packages/nova/rpc/...
本文档生产环境中如何使用kolla快速部署openstack,实现短周期内搭建生产可用的私有云平台。
openstack nova创建instance的详细过程。
手把手教您如何使用python语言,创建OpenStack虚拟机。
主要介绍了Openstack 启动instance 'hvm'错误问题解决办法的相关资料,需要的朋友可以参考下
云计算openstack搭建及命令创建云主机
OpenStack 创建windows镜像 创建windows镜像 创建一个img文件 kvm-img create -f qcow2 win7.qcow2 30G 下载virtio驱动 wget ...
高手总结运维OpenStack常见错误排除
主要介绍了Openstack 创建项目和虚拟机详细介绍的相关资料,这里举例说明如何实现,图文教程,需要的朋友可以参考下
OpenStack web界面使用ISO镜像安装启动实例,完美解决
背景:用vmw are创建虚拟机,操作系统选择ubuntu14.04.5,创建了两个虚拟网卡,管理网卡选择了NAT模式,外部网卡选择了仅主机模式。问题描述:问题
Openstack虚拟机创建的50个步骤和100个知识点 Openstack虚拟机创建的50个步骤和100个知识点
云计算OpenStack详尽的安装部署教程,监控运维篇。