倘若对认知的技术很模糊,那么分解将是必不可少的梳理过程!统一性和基本型
—-致
openstack虚拟化部署方式:
1、libvirt驱动:libvirt提供了很好的python绑定,所以基于python的nova只要imput一个名为libvirt的python模块,就可以像c语言程序那样方便地调用libvirt的功能。
libvirt的python模块也提供了类似C库的python类:virConnect代表一个到VMM的连接,virConnect代表了一个虚拟机。
2、XenAPI驱动:比如XenAPI有”主机池”概念,是指一些共享存储的宿主机的集合,在主机池中进行动态迁移就没有必要迁移虚拟磁盘。这对Nova的实现十分重要(openstack与
虚拟化联系最紧密的是nova!)
http://www.alice.org/wp-content/uploads/2017/08/Alice3_unix_3_3_1_2.sh
openstack项目的架构:
1、openstack项目都是通过RESTful API向外提供服务。(RESTful—-互联网软件架构 >>>>> 此架构核心概念是”资源”。)
2、WSGI(web网关接口)则是python语言中定义的web服务器和web应用程序或架构之间的通用接口标准。也可把WSGI理解为服务端和应用端交互的一种包装,经过不同中间件的包装,便具有不同的功能,比如URL路由转发,在比如权限认证。这些不同中间件的组合便形成了WSGI的框架,比如paste。
3、openstack使用paste的deploy的组件来完成WSGI服务器和应用的构建,每个项目源码的etc目录下都有一个paste配置文件。
4、除了routers和paste deploy外,openstack中另一个与WSGI密切相关的是webob。webob通过对WSGI的请求与响应进行封装,来简化WSGI应用的编写。webob中两个重要的对象:
一是webob.request,对WSGI请求的environ参数进行封装;
一是webob.response,包含了标准WSGI响应的所有要素。
5、所有项目的源码目录都可以在/usr/lib/python2.7/site-packages/项目名称/下查到。比如:若为计算项目则把前句项目名称处改为nova,则进入可查看到nova源码!!
*单独说明(openstack模块源码简介):*
nova api的实现:
1、nova api请求路由:
nova api目录在:/usr/lib/python2.7/site-packages/nova/api,其目录下metadata文件夹是提供给所创建的虚拟机来获得一些配置信息的API。
nova api目录下:openstack文件夹下包含WSGI基础架构代码以及如何解析请求和分发请求的核心代码。
/usr/lib/python2.7/site-packages/nova/api/openstack/compute中可以找到对应每个API的入口点。
nova使用python paste作为工具来加载WSGI stack。WSGI stack通过文件/etc/nova/api-paste.ini配置。当解析每个URL请求的时候,可以通过URL映射找到API对应的resource object,目录文件/usr/lib/python2.7/site-packages/nova/wsgi.py。
2、nova API的实现:
/usr/lib/python2.7/site-packages/nova/api/openstack/compute此目录下打开keypairs类的文件是keypairs.py:(以下注解皆在配置文件内)
keypairs类描述了要注册的资源或者所要扩展的资源。
get_resourxes方法用来返回所要注册的资源,这里(见配置文件326–)注册了一个资源,名字为ALIAS所指定,此资源所对应的controller是keypairscontroller。
配置文件内除了添加新资源还可以扩展现有资源,扩展新资源见配置文件38–261。
其中多个声明代表对应不同版本的microversion,方法所对应的microversion通过decorator”wsgi.Controller_version”来指定。
分别对应配置文件中@wsgi.Controller.api_version后所代表的版本。
错误返回码在配置文件的@extensions.expected_errors((400, 403, 409)),代表拦截了所有未预期的错误。
@wsgi.response(201)则表示API请求正常返回码。
再然后通过方法的接口可以得到webob.request对象,从request对象中可以获取其他请求参数。除了这些标准的CURD方法,还可以添加action,从/usr/lib/python2.7/sitepackages/nova/api/openstack/compute/下的evacuate.py中可以看到如何注册evacuate action(配置文件中75—