openstack:nova中“从云硬盘启动”创建虚拟机的流程
来源:互联网 发布:淘宝可以用黑体吗 编辑:程序博客网 时间:2024/05/16 14:11
原文网址:http://blog.csdn.net/xiangpingli/article/details/47912601
先使用cinder创建云硬盘
然后在nova中创建示例的时候,会先在_prep_block_device中挂载cinder中创建的卷,然后创建虚拟机
流程如下:
- (1)从cinder创建系统盘的流程
- cinder.volume.rpcapi.VolumeAPI.create_volume
- ->cinder.volume.manager.VolumeManager.create_volume
- ->cinder.volume.flows.manager.create_volume.get_flow
- ->cinder.volume.flows.manager.create_volume.CreateVolumeFromSpecTask.execute
- ->cinder.volume.flows.manager.create_volume.CreateVolumeFromSpecTask._create_from_image (_create_raw_volume、_create_from_snapshot)
- ->cinder.volume.derivers.glusterfs.create_volume (这里是具体驱动的create_volume, VS底层使用glusterfs)
- ->cinder.volume.derivers.glusterfs._do_create_volume (这里很重要,可能是我们的切入点)
- ->cinder.volume.derivers.remotefs._create_sparsed_file(class GlusterfsDriver(remotefs_drv.RemoteFSSnapDriver)会调到父类的方法)
- ->cinder.volume.flows.manager.create_volume.CreateVolumeFromSpecTask._copy_image_to_volume
- ->cinder.volume.derivers.remotefs.copy_image_to_volume(class GlusterfsDriver(remotefs_drv.RemoteFSSnapDriver)会调到父类的方法)
- ->cinder.image.image_utils.fetch_to_raw
- ->cinder.image.image_utils.fetch_to_volume_format
- ->cinder.image.image_utils.fetch (从fetch到fetch再到download和2.6中的流程很像了)
- ->cinder.image.glance.download(从glance下载镜像到卷)
- ->cinder.volume.flows.manager.create_volume.CreateVolumeFromSpecTask._handle_bootable_volume_glance_meta (设置为可启动)
- 创建镜像完毕
- (2)nova中从云硬盘启动虚拟机的流程
- 从云硬盘启动还是从虚拟机启动,在如下地方有差别:
- A 在Nova.virt.libvirt.driver._create_image中有差别
- nova.api.openstack.compute.servers.Controller.create
- ->nova.compute.api.API.create
- ->nova.compute.api.API._create_instance
- ->nova.comductor.ComputeTaskAPI.build_instances
- ->nova.conductor. rpcapi.ComputeTaskAPI.build_instances
- ->nova.conductor. manager.ComputeTaskAPI.build_instances
- ->nova.compute.rpcapi.ComputeManager.build_and_run_instance
- ->nova.compute.manager.ComputeManager.build_and_run_instance
- ->nova.compute.manager.ComputeManager._locked_do_build_and_run_instance
- ->nova.compute.manager.ComputeManager._do_build_and_run_instance
- ->nova.compute.manager.ComputeManager._build_and_run_instance
- ->nova.compute.manager.ComputeManager._build_networks_for_instance //准备网络资源
- ->nova.compute.manager.ComputeManager._prep_block_device //准备块设备
- ->nova.compute.manager.ComputeManager.attach_block_devices
- ->nova.virt.block_device.DriverImageBlockDevice.attach:volume_api.attach
- ->Nova.volume.API.attach
- ->nova.volume.cinder.API.attach
- -> client = cinderclient(context) ; client.volumes.attach(size, **kwargs)//挂载cinder创建好的卷(云硬盘)
- ->nova.virt.libvirt.driver.LibvirtDriver.spawn
- ->Nova.virt.libvirt.driver._create_image //创建系统盘
- 这里会检查是从云硬盘启动,还是不从云硬盘启动:
- booted_from_volume = self._is_booted_from_volume(
- instance, disk_mapping)
- ...
- if not booted_from_volume:
- ->Nova.virt.libvirt.driver._try_fetch_image_cache
- ->Nova.virt.libvirt.imagebackend.Image.cache
- ->Nova.virt.libvirt.imagebackend.Qcow2.create_image
- ->Nova.virt.libvirt.imagebackend.Qcow2.create_image:prepare_template即fetch_image
- ->Nova.virt.libvirt.utils.fetch_image
- ->Nova.virt.images.fetch_to_raw
- ->Nova.virt.images.fetch #下载系统镜像到/var/lib/nova/instances/_base/目录
- ->nova.image.glance.GlanceImageService.download
- ->nova.image.glance.GlanceClientWrapper.call
- ->Nova.virt.images.convert_image #若镜像不是raw格式,且nova.conf中force_raw_images=True,则将backing file强制转换为raw格式
- ->Nova.virt.libvirt.imagebackend.Qcow2.create_image:copy_qcow2_image
- ->nova.virt.libvirt.utils.create_cow_image
0 0
- openstack:nova中“从云硬盘启动”创建虚拟机的流程
- openstack:nova中“从镜像启动(创建一个新卷)”创建虚拟机的流程
- openstack:nova中“从镜像启动”创建虚拟机的流程
- OpenStack中nova组件创建虚拟机的源码流程
- Openstack:Nova中“从云硬盘启动”、“从镜像启动”、“从镜像启动(创建一个卷)”_prep_block_device中的差异
- OpenStack Nova启动一个虚拟机内部流程
- OpenStack Nova启动一个虚拟机内部流程
- OpenStack Nova启动一个虚拟机内部流程
- openstack.nova.manager创建虚拟机流程(run_instance)
- openstack.nova.manager创建虚拟机流程
- 【openstack】Nova创建虚拟机流程1
- 【openstack】Nova创建虚拟机流程2 -scheduler
- 【openstack】Nova创建虚拟机流程3-compute
- openstack nova 创建虚拟机流程 liberty版本
- OpenStack Nova 虚拟机创建流程分析
- openstack创建虚拟机流程,从界面任务发起,到nova等组件处理,到虚机创建完成
- openstack Nova分析之 创建虚拟机流程(4)
- nova 创建虚拟机流程
- iOS-生成随机数
- 使用Android.Transition框架创建动画(2)
- linux之i2c设备注册
- 详解Android动画之 属性动画(Property Animation) 完全解析 (下)
- [驱动注册]platform_driver_register()与platform_device_register()
- openstack:nova中“从云硬盘启动”创建虚拟机的流程
- ios MVP模式
- boost 时间与日期处理
- Hive-2.HiveQL查询中ORDER BY 和SORT BY 语句|包含SORT BY 的DISTRIBUTE BY|CLUSTER BY
- ionic调试跨域(Access-Control-Allow-Origin)问题
- 一个好看的winfrom datagridview样式
- Mac安装Protobuf编译Java
- Qt5列出并检测可用串口号及其他信息
- Objective-C中的instancetype和id关键字