openstack单机ubuntu虚拟机环境安装部署经验及源码结构简单介绍(适合入门者)
openstack单机ubuntu虚拟机环境安装部署经验及源码结构简单介绍(适合入门者)分类: openstack2012-08-1923:01 118人阅读 评论(1) 收藏 举报参考:OneStack脚本本文主要关于近一个月对Openstack学习的一个总结,包括单机环境安装部署中出现的问题记录和源码学习的过程,适合入门者阅读。一、openstac
参考:OneStack脚本
本文主要关于近一个月对Openstack学习的一个总结,包括单机环境安装部署中出现的问题记录和源码学习的过程,适合入门者阅读。
一、openstack安装部署
目前看到的一个是官方的安装部署文档,一个是中文的OneStack脚本。
根据两个文档都能在虚拟机Ubuntu环境搭建好环境,中间也许或出现某些问题,搜一下应该可以得到解决。
因为OneStack的是中文的,在脚本每一句都有详细说明介绍,学习起来会轻松很多。
可以直接将脚本中IP修改为自己机器IP,运行脚本基本就能正常工作。
/etc/network/interfaces可改可不改,看具体情况,比如虚拟机使用的DHCP自动分配IP,会在一定时间后换一个IP才能访问网络,反正只要IP和配置对应上就OK。
一般虚拟机无法支持KVM的,所以这个地方记住得改VIRT_TYPE为qemu。
如果失败了又不知道原因,也可以自己一个一个模块根据脚本手动安装,找到原因就好解决掉。
比如从keystone开始安装,完了测试下是否正常,再依次安装glance和nova,dashbord。
如果搭建源码调试环境,可以git clone或者apt-get source获得源码,我使用的IDE是eclipse+pdev,以前用eclipse习惯
从源码安装可以使用pip install
如果还有遇到问题没解决的可以看下面的,也许是我遇到过的问题。
还有些问题一时不记得,先记到这,有问题再补充,下面简答介绍下几个模块的源码。
二、源码阅读
keystone,glance,nova结构都非常相似,使用wsgi协议,webob,paste,routes几个框架,像我这样以前Python没接触过的人可能也没接触过这些东西,先可以大致了解下这几个框架,再来看源码就大致知道怎么回事了。
先来说下keystone过程,下面是刚学习的时候记录的,直接贴过来,可能存在错误,有问题请指出,谢谢。
启动keystone服务时,需要查找keystone.conf配置文件并解析,通过keystone.conf配置的logging.conf解析logging日志配置。
2.glance-api和glance-registry启动服务后,分别根据应用名和项目名查找paste配置文件,并部署路由信息
1)compute API获取请求后判断实例类型是否满足创建实例个数
2) 在创建image_service时会判断image_href是否为如http://myglanceserver:9292/images/42的形式,是的话则获取指定glance服务,如果为ID串则获取默认glance服务。
3) 请求glance获取image metadata
4) 获取metadata后判断访问权限问题,首先是auth-token,有则返回,没则继续判断image是否是public或者当前用户是否是admin
5) 过滤获取的metadata
只得到属于IMAGE_ATTRIBUTES = ['size', 'disk_format',
'container_format', 'checksum', 'id',
'name', 'created_at', 'updated_at',
'deleted_at', 'deleted', 'status',
'min_disk', 'min_ram', 'is_public']中的属性
把timestamp转成datetime
转换'block_device_mapping', 'mappings'属性json字符串为map
6) 确保存在default安全组,没有则创建
7) 为新的实例更新db数据,增加实例数据和更新实例与安全组的关联数据,更新block_device_mapping,更新vm状态为building,更新task状态为scheduling
8) 向scheduler发出启动实例请求,rpc远程方法调用run_instance
9) compute-manager启动实例时先请求instance元数据
10) 之后分配网络,更新float ip并关联fixed ip,返回网络信息
11)创建instance维护目录(如/var/lib/nova/instances/instance-00000009/)
12) 实例信息写入libvirt.xml
13) image_id做sha1摘要作为镜像名
14) 缓存镜像,如果存在disk文件,则获取_base目录中的缓存镜像,
Create COW image:
qemu-img create -f qcow2 -o cluster_size=2M,backing_file=
/var/lib/nova/instances/_base/80256f8ca341d522ac141d187481a03f5e61bce5 /var/lib/nova/instances/instance-00000007/disk
15) 往disk注入key,net,metadata和admin_password数据
16) 开启loopCaller判断虚拟机状态是否为Running,是则跳出完成
2.nova发布快照
1) 进入nova.image.glance.image_service.create方法->glance client创建镜像glance.client:add_image->
2) compute API使用RPC调用computeManager做snapshot
3) computeManager获取实例的virtDomain对象,镜像元数据和snapshot元数据
4) 查找libvirt xml描述,解析出disk所在路径
5) 如果虚拟机在运行,libvirt则暂停虚拟机,保存内存内容至文件
6) 使用libvirt命令创建快照
qemu-img snapshot -c ${快照名的十六进制} ${disk-path}
7) 提取快照到临时文件夹
qemu-img convert -f qcow2 -O qcow2 -s ${快照名的十六进制} ${disk-path} ${out-path}
8) 从disk中删除快照
qemu-img snapshot -d ${快照名的十六进制} ${disk-path}
9) 如果虚拟机创建快照前在运行则将虚拟机从暂停转到运行状态
10) 用glance client更新快照元数据信息
11) 更新数据库中实例元数据(Task_State=None)
更多推荐
所有评论(0)