概述
Glance(OpenStack Image Service)
是为虚拟机提供发现,注册,和下载镜像的服务。Glance 提供了虚拟机镜像的集中存储。通过 Glance 的 RESTful API,可以查询镜像元数据、下载镜像。虚拟机的镜像可以很方便的存储在各种地方,从简单的文件系统到对象存储系统(比如 OpenStack Swift)。
在 Glance 里镜像被当做模板来存储,用于启动新实例。Glance 还可以从正在运行的实例建立快照用于备份虚拟机的状态。
Glance 具体功能如下:
- 提供 RESTful API 让用户能够查询和获取镜像的元数据和镜像本身;
- 支持多种方式存储镜像,包括普通的文件系统、Swift、Ceph 等;
- 对实例执行快照创建新的镜像。
Clance 在整个 OpenStack 架构中的位置如下图:
架构
在 Newton 之前的版本中,Glance 支持两种 RESTful API V1和V2,两者区别为:
V1只提供了基本的镜像和用户操作功能:镜像创建、删除、下载、列表、详细信息查询、更新,以及镜像租户成员的创建、删除和列表。
V2除了支持V1的所有功能外,主要是增加了如下功能:
● 镜像 location 的添加、删除和修改等操作;
● metadata namespace 操作;
● 镜像 tag 操作。
V1 和V2对镜像后端存储的支持是相同的。
V1版本的实现,具有 glance-api 和 glance-registry 两个 WSGI 服务,二者都提供 RESTful API,但需要强调的一点是,glance-registry 提供的 RESTful API 是给 glance-api 使用的,并不开放给外部用户。
1)glance-api
glance-api 是系统后台运行的服务进程。 对外提供 RESTful API,响应镜像查询、获取和存储的调用。glance-api 不会真正处理请求。
- 如果是与镜像 metadata(元数据)相关的操作,glance-api 会把请求转发给 glance-registry;
- 如果是与镜像自身存取相关的操作,glance-api 会把请求转发给该 image 的存储后端。
(2)glance-registry
glance-registry 是系统后台运行的服务进程。 负责处理和存取镜像的 metadata,例如镜像的大小和类型。
V2版本的实现就是将 glance-registry 集成到了 glance-api 内部,这么做的好处是减少了一个中间的处理环节。V1版本在 Newton 中标注被弃用,目前已经被移除。
Glance 支持多种格式的镜像,包括:
Glance 自己并不存储镜像。 真正的镜像是存放在后端存储中的。Glance 支持多种后端存储,包括:
- A directory on a local file system:这是默认配置,在本地的文件系统里进行保存镜像。
- GridFS:使用MongoDB存储镜像。
- Ceph RBD:使用Ceph的RBD接口存储到Ceph集群中。
- Amazon S3:亚马逊的S3。
- Sheepdog:专为QEMU/KVM提供的一个分布式存储系统。
- OpenStack Block Storage (Cinder)
- OpenStack Object Storage (Swift)
- HTTP:可以使用英特网上的http服务获取镜像。这种方式只能只读。
- VMware ESX/ESXi or vCenter。
具体使用哪种 backend,是在 /etc/glance/glance-api.conf
中配置的。
安装部署
创建glance数据库授权
1 2 3
| CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456';
|
创建 glance 用户
获得 admin
凭证来获取只有管理员能执行的命令的访问权限:
1 2 3 4 5 6 7 8
| export OS_USERNAME=admin export OS_PASSWORD=keystone export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://master01.boysec.cn:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
|
注意:如果加入到.bashrc
下则不需要再次执行!
创建 glance
用户:
1 2 3 4 5 6 7
| # 非交互式{推荐}密码也是glance openstack user create --domain default --password glance glance #交互式 #openstack user create --domain default --password-prompt glance openstack user create --domain default --password-prompt glance # 添加 admin 角色到 glance 用户和 service 项目上。 openstack role add --project service --user glance admin
|
创建glance服务实体
1 2
| openstack service create --name glance \ --description "OpenStack Image" image
|
创建镜像服务的 API 端点
1 2 3 4 5 6 7 8 9 10
| # 创建公共接口的端点. openstack endpoint create --region RegionOne \ image public http://master01.boysec.cn:9292 # 创建内部接口的端点 openstack endpoint create --region RegionOne \ image internal http://master01.boysec.cn:9292
# 创建管理接口的端点 openstack endpoint create --region RegionOne \ image admin http://master01.boysec.cn:9292
|
安装软件包
1
| yum install openstack-glance
|
配置glance
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 31 32 33 34 35 36 37 38 39 40 41 42
| [root@master01 ~]# cp /etc/glance/glance-api.conf{,.bak} [root@master01 ~]# grep -Ev "^$|#" /etc/glance/glance-api.conf.bak >/etc/glance/glance-api.conf [root@master01 ~]# cat /etc/glance/glance-api.conf [DEFAULT] [cinder] [cors] [database] connection = mysql+pymysql://glance:123456@master01.boysec.cn/glance [file] [glance.store.http.store] [glance.store.rbd.store] [glance.store.sheepdog.store] [glance.store.swift.store] [glance.store.vmware_datastore.store] [glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images [image_format] [keystone_authtoken] www_authenticate_uri = http://master01.boysec.cn:5000 auth_url = http://master01.boysec.cn:5000 memcached_servers = master01.boysec.cn:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = glance password = glance [oslo_concurrency] [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_middleware] [oslo_policy] [paste_deploy] flavor = keystone [profiler] [store_type_location_strategy] [task] [taskflow_executor]
|
初始化glance数据库
1
| su -s /bin/sh -c "glance-manage db_sync" glance
|
启动镜像服务设置为开机自动启动
1 2
| systemctl enable openstack-glance-api.service systemctl start openstack-glance-api.service
|
验证
上传镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 下载 wget http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img # 上传 glance image-create --name "cirros" \ --file cirros-0.5.1-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --visibility public # 验证 [root@master01 ~]# glance image-list +--------------------------------------+--------+ | ID | Name | +--------------------------------------+--------+ | d4e76622-3d1f-43c7-bf0f-5262cd8a3aec | cirros | +--------------------------------------+--------+
|