openstack创建虚拟机

简单说明一下,openstack创建虚拟机内幕!
实例的实际创建过程是通过调用libvirt函数来完成,在virt/Libvirt/driver.py中spawn方法来完成真正的虚拟机创建过程。

 1     def spawn(self, context, instance, image_meta, injected_files,
 2               admin_password, network_info=None, block_device_info=None):
 3         disk_info = blockinfo.get_disk_info(CONF.libvirt_type,
 4                                             instance,
 5                                             block_device_info,
 6                                             image_meta)
 7         xml = self.to_xml(instance, network_info,
 8                           disk_info, image_meta,
 9                           block_device_info=block_device_info)
10 
11         self._create_image(context, instance, xml,
12                            disk_info['mapping'],
13                            network_info=network_info,
14                            block_device_info=block_device_info,
15                            files=injected_files,
16                            admin_pass=admin_password)
17 
18         self._create_domain_and_network(xml, instance, network_info,
19                                         block_device_info)
20         LOG.debug(_("Instance is running"), instance=instance)
21 
22         def _wait_for_boot():
23             """Called at an interval until the VM is running."""
24             state = self.get_info(instance)['state']
25 
26             if state == power_state.RUNNING:
27                 LOG.info(_("Instance spawned successfully."),
28                          instance=instance)
29                 raise utils.LoopingCallDone()
30 
31         timer = utils.FixedIntervalLoopingCall(_wait_for_boot)
32         timer.start(interval=0.5).wait()

 

to_xml就是利用传过来的各种参数,来构造libvirt用来创建虚拟机的xml文件,其中_create_image函数比较的复杂呢,里边处理了和镜像相关的相关逻辑,如从glance中下载各种类型的所需的文件,并进行备份,将备份的文件考入实例对应的目录下作为实例实际的disk。

    其中有几个非常重要的目录,系统的CONF.instances_path,也就是和实例相关的目录,实例所用到的文件都在此目录下,常见的目录是/var/lib/nova/instances,

  查看目录文件:
.
├── _base
│   ├── 0f7c4295-d5e8-41a3-bc1a-79c99aa0f8f5
│   ├── 5f44ef07-3990-4207-a909-40d66157a21f
│   ├── 6841da6ee6638fb19178e74819c0edc08209259c
│   └── 6841da6ee6638fb19178e74819c0edc08209259c_20
├── instance-00000042
│   ├── console.log
│   ├── disk
│   ├── kernel
│   ├── libvirt.xml
│   └── ramdisk
└── snapshots
其中_base目录下存放着备份或者说缓存的镜像文件,snapshots放的是快照文件instance-xxxxx里边放的就是对应实例的相关文件console.log代表实例输出的日志,libvirt.xml就是libvirt用来生成实例的文件,disk就是对应实例的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值