本文主要是介绍深挖Openstack Glance - 基本知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一. glance的作用:提供虚拟机镜像的发现、注册、检索,使用RESTful接口接收外部请求
二. 版本说明
glance有两个版本API v1/v2,其中v2版本(F版)较为简洁,将glance-api和glance-registry合并在一块。
1. glance-api:接收REST API的请求,分析消息请求信息并分发命令(如新增、删除、更新等)
2. glance-registry:负责接收响应镜像元数据命令的Restful请求,分析消息请求信息并分发命令(如获取元数据、更新元数据等)
三. 任意一个用户都可以向glance上传和注册image,还可以设定该image是否可以公开为其他tenant用户使用。
四. image使用URI作为唯一标识:
<Glance ServerLocation>/images/<ID>
其中,Glance Server Location是镜像的所在位置,ID是镜像在Glance的唯一标识
五. image状态:
1. queued:没有上传image数据,只有db中的元数据
2. saving:image data正在被上传
3. active:image完全可用
4. killed:image元数据不正确,等待被删除
5. deleted/pending_delete:已删除/等待删除
六. glance目录解析:(待完善)
1. /glance/api/v1/router.py:将WSGI收到的HTTP操作映射到glance-api模块的Controller类的方法
2. /glance/api/v1/images.py:提供与image相关的操作
3. /glance/registry/client/v1/api.py:registry API入口,调用client.py中的函数
4. /glance/api/v2/image_data.py:提供对image上传下载的操作
七. Paste模块
在/etc目录下有两个文件glance-api-paste.ini和glance-registry-paste.ini,当WSGI Server接收到URL_Path形式的HTTP Request时,这些Request首先会被这些paste文件处理,执行其文件中标注的需要执行的WSGIapp和middleware。
在paste文件中,每个Section的格式均为[type:name],主要有这几种类型的Section:
1. composite section
request进来后第一个通过的Section,表示需要将一个HTTP URL Request调度到一个或多种Application上。
[composite:rootapp]
paste.composite_factory = glance.api:root_app_factory
/: apiversions
/v1: apiv1app
/v2: apiv2app
/v3: apiv3app
2. app section
一个app就是实际处理REST API请求的python类,表明这是一个独立的服务程序。
[app:apiv1app]
# paste.app_factory: 表明调用哪个函数来获得application
paste.app_factory = glance.api.v1.router:API.factory
3. filter section
一种装饰器,为app提供一层封装,起过滤作用,用于过滤Request和Response,在app处理请求之前会先调用filter对象。
[filter:healthcheck]
# paste.filter_factory: 表明调用哪个函数来获得这个filter中间件
paste.filter_factory = oslo_middleware:Healthcheck.factory
backends = disable_by_file
disable_by
4. pipeline section
是对多个filter和某个app进行封装,表明在app处理请求之前会先调用pipeline所指定的多个filter对象。
在pipeline section中,最后一个名字对应的section一定是app类型,其它名字对应的一定是filter类型。
# Use this pipeline for no auth or image caching = DEFAULT
[pipeline:glance-api]
pipeline = healthcheck versionnegotiation osprofiler unauthenticated-context rootapp
比如pipeline:glance-api表明在访问glance-api之前需要先调用healthcheck、versionnegotiation等一系列filter对象,而最后的rootapp就是一个app section。
八. URL的Routes分发
首先WSGI接收到用户请求,经过几层过滤器,到达rootapp处理,rootapp内部根据用户提供的版本信息(v1/v2)交由apiv1app或apiv2app处理。
以v1版本为例,从horizon传过来的HTTP请求首先来到/glance/api/v1/router.py,查找匹配的HTTP请求。类API继承wsgi.Router:
class API(wsgi.Router):
mapper.connect匹配对应的请求,比如获取image详情:
mapper.connect("/images/detail",controller=images_resource,action='detail',conditions={'method': ['GET', 'HEAD']})
当用户的glance操作请求通过WSGI,通过分发dispatch进入控制器Controller之后,接下来就是开始glance镜像的具体操作。
这篇关于深挖Openstack Glance - 基本知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!