设为首页 收藏本站
查看: 1542|回复: 0

[经验分享] openstack Nova镜像处理机制及缓存机制探讨

[复制链接]

尚未签到

发表于 2015-4-12 16:20:17 | 显示全部楼层 |阅读模式
  实例的实际创建过程是通过调用libvirt函数来完成,在virt/Libvirt/driver.py中spawn方法来完成真正的虚拟机创建过程。


DSC0000.gif DSC0001.gif View Code


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, DSC0002.jpg
  其中_base目录下存放着备份或者说缓存的镜像文件,snapshots放的是快照文件instance-xxxxx里边放的就是对应实例的相关文件console.log代表实例输出的日志,libvirt.xml就是libvirt用来生成实例的文件,disk就是对应实例的文件。关于_base目录要说的一点是。manager中有一个定时方法_run_image_cache_manager_pass定期清除同glance不相关的和超过配置文件中定义的时间的缓存。
  对于镜像的处理策略是,镜像从glance服务器上下载到_base目录,镜像的名字变为他的image_id的sha1 hash形式,如果镜像支持CoW,那么就会将镜像变为实例配置的大小,如果不支持CoW,就直接将镜像拷贝到实例对应的目录中,我想这就可以解释为什么会出现配置的硬盘大小同实际实例中的大小不一致的一个原因,另一个原因就是配置的镜像小于glance中的实际镜像,程序会直接忽略配置信息。
  (注:实例,虚拟机,域(dom)其实是一个概念)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-56396-1-1.html 上篇帖子: openstack ovs-gre 网速慢解决方案 下篇帖子: OpenStack学习系列-----第二篇 由一个错误看理解整个架构的重要性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表