OpenStack运维之安装Glance

概述

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,两者区别为:

  1. V1只提供了基本的镜像和用户操作功能:镜像创建、删除、下载、列表、详细信息查询、更新,以及镜像租户成员的创建、删除和列表。

  2. V2除了支持V1的所有功能外,主要是增加了如下功能:

    ● 镜像 location 的添加、删除和修改等操作;
    ● metadata namespace 操作;
    ● 镜像 tag 操作。

  3. 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

验证

image-20220122190118883

上传镜像

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 |
+--------------------------------------+--------+