Glance多后端功能介绍
所谓Glance多后端,其实是针对Cinder的多后端功能对比的,我们知道在Cinder中,cinder-volume后面可以接多个存储后端,并且通过cinder types来选择使用哪个存储后端,Cinder中的这个功能很早就有了,因为Cinder要纳管多种存储,对外提供统一的接口,这个功能是刚需。但是对于Glance来说,类似Cinder的这种Glance多后端就没那么刚了,没有多后端也是可以用的,拿Ceph作为后端存储来说,如果镜像只是存在其中一个存储池A的话,要在另外的存储池B中建虚拟机,发现不能执行rbd clone操作,那么它会将该镜像下载到本地,然后再传到存储池B中,而且下载下来的镜像会缓存到本节点,只要在该节点下载过一次,后面在该节点再使用相同的镜像建虚拟机,就不需要再下载了,这种方式虽然效率低一些,但是不影响使用。但是毕竟不完美啊,所以社区一直到R版,才实现了这个功能,到T版算是生产可用,但是仍然有一些bug还在修复,不过不影响使用。
如何配置
参考这里的文档进行配置,主要配置下面几个配置项:
1 | [DEFAULT] |
enabled_backends
配置的是多个后端的ID号和类型,冒号左边是ID号,跟下面的以ID为section名字的配置组对应,冒号右边的是后端存储的类型,支持rbd, file等。default_backend
配置的是默认后端,即上传镜像时不指定存储后端的话,默认使用这里配置的后端- 下面配置的就是各个存储后端的详细信息了。
配置好之后,可以通过如下的命令,来查看多后端的信息:
1 | [root@control1 ~]# glance stores-info |
注意,该命令是直接读取的配置文件,不存数据库。
如何使用
在Glance Interoperable Image Import功能介绍中介绍过上传镜像的三种方式,目前,这三种方式,都支持多后端特性,跟Cinder通过指定type不同的是,Glance中是通过Header来指定使用哪个存储后端的,我们以最简单的image upload的方式为例,来看下如何使用多后端:
首先需要创建一个镜像记录:
1
glance image-create --disk-format raw --container-format bare --visibility public --name testfast
该命令对应的API调用如下:
1
curl -g -i -X POST http://10.110.105.30:9292/v2/images -H "Content-Type: application/json" -H "User-Agent: python-glanceclient" -H "X-Auth-Token: {SHA1}53b399279a96b953fc584fc4091ec78bbc47eea1" -d '{"container_format": "bare", "disk_format": "raw", "name": "testfast", "visibility": "public"}'
返回值如下:
1
RESP: [201] Openstack-Image-Import-Methods: glance-direct,web-download Openstack-Image-Store-Ids: rbd,fast,file X-Openstack-Request-Id: req-ad9f63ef-184a-4b35-96f8-59ba7ab00975
注意到HTTP Response中有一个Header:
Openstack-Image-Store-Ids: rbd,fast,file
,它表示当前系统支持哪些存储后端,即上面glance stores-info
列出的内容。然后向该镜像记录上传镜像
1
glance image-upload --file CentOS---7.3-64bit---2017-12-11-a.dsk e80e40ea-8567-4919-83b5-632829cf530b --backend fast
通过
--backend
参数来指定要向哪个后端传镜像,其对应的API调用如下:1
curl -g -i -X PUT http://10.110.105.30:9292/v2/images/e80e40ea-8567-4919-83b5-632829cf530b/file -H "Content-Type: application/octet-stream" -H "User-Agent: python-glanceclient" -H "X-Auth-Token: {SHA1}3b3d90bfe99d476eef59a67725e9436b35f0853b" -H "x-image-meta-store: fast" -d '<generator object _chunk_body at 0x7fb4c606b870>'
可以看到在Header中通过”x-image-meta-store: fast”来指定要使用fast存储后端。
以上命令可以合并成一条命令来执行:1
glance image-create --disk-format raw --container-format bare --visibility public --name testfast --file CentOS---7.3-64bit---2017-12-11-a.dsk --backend fast
上传完成后,可以通过image-show命令查看Location属性,指定了该镜像使用哪个后端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30[root@control1 ~]# glance image-show 00f121f4-929f-4a0c-b706-cfef2e4764ca
+------------------+----------------------------------------------------------------------------------+
| Property | Value |
+------------------+----------------------------------------------------------------------------------+
| checksum | 7050b89af6d23f80aa5776f51f5387af |
| container_format | bare |
| created_at | 2020-11-12T09:23:55Z |
| direct_url | rbd://c5f578c9-2026-4413-bab0-963c63748a6c/fastimages/00f121f4-929f- |
| | 4a0c-b706-cfef2e4764ca/snap |
| disk_format | raw |
| id | 00f121f4-929f-4a0c-b706-cfef2e4764ca |
| locations | [{"url": "rbd://c5f578c9-2026-4413-bab0-963c63748a6c/fastimages/00f121f4-929f- |
| | 4a0c-b706-cfef2e4764ca/snap", "metadata": {"store": "fast"}}] |
| min_disk | 0 |
| min_ram | 0 |
| name | testfast |
| os_hash_algo | sha512 |
| os_hash_value | 367dcbf754cee36ad2823bf40d0efa36b902954d1d97eded078634eb277b0fe6cbb4d4af382a608f |
| | d3e4cbf0656204e7a8418c7b9a194815f73601a4f2912149 |
| os_hidden | False |
| owner | 3c638b2eb36b4da6944040bb31084421 |
| protected | False |
| size | 3221225472 |
| status | active |
| stores | fast |
| tags | [] |
| updated_at | 2020-11-12T09:25:05Z |
| virtual_size | Not available |
| visibility | public |
+------------------+----------------------------------------------------------------------------------+
而对于Interoperable Image Import
方式来说,除了可以使用Header来指定存储后端外,还可以通过POST body中的”stores”参数来同时指定多个后端一起上传,或者”all_stores”指定所有后端,并且通过”all_stores_must_succeed”参数来设置部分后端上传失败后的行为,如下:
1 | { |
不过这些参数在U版才可用,而且还有些Bug正在修复,使用时需要注意:
总结:
在配置了Glance的多后端之后,就可以跟Cinder的多后端结合,通过boot from volume的方式,从同一个存储后端建虚拟机,volume直接从image做clone,加快了虚拟机的创建速度,也简化了镜像的管理。
参考资料: