1
2
3
4
5
6
7
作者:李晓辉

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

在云计算环境中,镜像管理是确保虚拟机快速部署和高效运行的关键环节。OpenStack作为一个强大的开源云平台,提供了灵活的资源管理和高效的虚拟化能力。而Glance服务作为OpenStack的镜像管理核心组件,负责存储、管理和分发虚拟机镜像,确保用户能够快速创建和启动虚拟机实例。本文将详细介绍如何在OpenStack环境中安装和配置Glance服务,帮你顺利搭建一个功能完善的云平台。

Glance服务概述

Glance的作用

Glance是OpenStack的镜像管理服务,它在OpenStack架构中扮演着至关重要的角色。以下是Glance的主要功能:

  1. 镜像存储:Glance负责存储虚拟机镜像,支持多种存储后端,如本地文件系统、Swift对象存储等。用户可以上传自定义镜像,也可以使用预定义的镜像。

  2. 镜像发现:Glance维护一个镜像目录,供用户发现和使用镜像。用户可以通过Glance API或命令行工具查询可用的镜像。

  3. 镜像格式支持:Glance支持多种镜像格式,包括RAW、QCOW2、VMDK等,这使得用户可以灵活选择适合的镜像格式。

  4. 镜像元数据管理:Glance不仅存储镜像本身,还管理镜像的元数据,如镜像名称、描述、大小等,方便用户管理和查询。

Glance的架构

Glance服务由以下几个主要组件构成:

  1. glance-api:这是Glance的核心服务,负责处理镜像的上传、下载和查询请求。它提供RESTful API接口,供其他OpenStack服务和客户端调用。

  2. glance-registry:这个组件负责管理镜像的元数据。在较新的版本中,glance-registry的功能已经集成到glance-api中,但在某些部署中仍然可以看到它的存在。

  3. 存储后端:Glance支持多种存储后端,包括本地文件系统、Swift对象存储、Ceph等。用户可以根据实际需求选择合适的存储后端。

  4. 配置文件:Glance的主要配置文件是glance-api.conf,其中包含了数据库连接信息、存储后端配置、消息队列配置等。

工作原理

Glance的工作原理可以概括为以下几个步骤:

  1. 镜像上传:用户通过客户端(如OpenStack命令行工具)将镜像上传到Glance服务。Glance将镜像存储在配置的存储后端中,并将镜像的元数据存储在数据库中。

  2. 镜像查询:用户可以通过Glance API或命令行工具查询可用的镜像。Glance从数据库中检索镜像的元数据,并返回给用户。

  3. 镜像下载:用户可以通过Glance API或命令行工具下载所需的镜像。Glance从存储后端中检索镜像,并将其返回给用户。

  4. 镜像删除:用户可以通过Glance API或命令行工具删除不再需要的镜像。Glance从存储后端中删除镜像,并从数据库中删除镜像的元数据。

通过以上机制,Glance确保了镜像管理的高效性和灵活性。接下来我将详细介绍如何安装和配置Glance服务,以确保你的OpenStack环境能够高效地管理虚拟机镜像。

准备glance数据库

创建Glance用户并分配密码和权限,以便Glance服务可以访问数据库。

1
mysql -u root -pLiXiaohui
1
2
3
4
CREATE DATABASE glance; 
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'LiXiaohui';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'LiXiaohui';
exit

加载管理员环境变量文件,以便使用OpenStack命令行工具。

1
source adminrc.sh

创建glance服务的用户和角色

创建出glance用户并添加为管理员角色,这个用户将用于查询、上传、下载、删除等镜像操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@controller ~]# openstack user create --domain default --password LiXiaohui glance
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 34b86e5097f24acfaa9fd185f601a482 |
| name | glance |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+

# 将Glance用户添加到`service`项目,并分配`admin`角色。

[root@controller ~]# openstack role add --project service --user glance admin

创建glance服务和endpoint

创建glance服务

创建Glance服务,并为其定义描述信息。

1
2
3
4
5
6
7
8
9
10
[root@controller ~]# openstack service create --name glance --description "OpenStack Image" image
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Image |
| enabled | True |
| id | b17d10f67e354756aa14adc895c45039 |
| name | glance |
| type | image |
+-------------+----------------------------------+

创建endpoint

为Glance服务创建公共、内部和管理端点。

1. 公共端点(Public Endpoint)

公共端点是供外部用户访问的服务接口。它允许用户从外部网络访问Glance服务,例如上传和下载镜像。公共端点通常会暴露在互联网上,或者在私有云环境中暴露在外部网络中,以便用户可以通过外部网络访问镜像服务。

2. 内部端点(Internal Endpoint)

内部端点是供OpenStack内部服务之间通信的接口。它允许OpenStack的其他服务(如Nova、Neutron等)在内部网络中访问Glance服务。内部端点通常部署在管理网络上,确保服务之间的通信安全且高效。

3. 管理端点(Admin Endpoint)

管理端点是供管理员访问的服务接口。它提供了对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
43
44
[root@controller ~]# openstack endpoint create --region RegionOne image public http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 84f29dc346be4d0cb1dd014017ecee4e |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | b17d10f67e354756aa14adc895c45039 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+

[root@controller ~]# openstack endpoint create --region RegionOne image internal http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | f2f8e0708ade4b6d86fcb566b40e9878 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | b17d10f67e354756aa14adc895c45039 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+

[root@controller ~]# openstack endpoint create --region RegionOne image admin http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 3cfbe27dbecb4f3fbe686f17d8d5ebf2 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | b17d10f67e354756aa14adc895c45039 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+

安装和配置glance组件

安装glance组件

1
yum install openstack-glance -y

准备配置文件

/etc/glance/glance-api.conf 是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
crudini --set /etc/glance/glance-api.conf DEFAULT enabled_backends fs:file
crudini --set /etc/glance/glance-api.conf database connection mysql+pymysql://glance:LiXiaohui@controller/glance
crudini --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_uri http://controller:5000
crudini --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name Default
crudini --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name Default
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_name service
crudini --set /etc/glance/glance-api.conf keystone_authtoken username glance
crudini --set /etc/glance/glance-api.conf keystone_authtoken password LiXiaohui
crudini --set /etc/glance/glance-api.conf glance_store default_backend fs
crudini --set /etc/glance/glance-api.conf fs filesystem_store_datadir /var/lib/glance/images/
crudini --set /etc/glance/glance-api.conf oslo_limit auth_url http://controller:5000
crudini --set /etc/glance/glance-api.conf oslo_limit auth_type password
crudini --set /etc/glance/glance-api.conf oslo_limit user_domain_id default
crudini --set /etc/glance/glance-api.conf oslo_limit username glance
crudini --set /etc/glance/glance-api.conf oslo_limit system_scope all
crudini --set /etc/glance/glance-api.conf oslo_limit password LiXiaohui
crudini --set /etc/glance/glance-api.conf oslo_limit endpoint_id 84f29dc346be4d0cb1dd014017ecee4e #这是public的id
crudini --set /etc/glance/glance-api.conf oslo_limit region_name RegionOne
crudini --set /etc/glance/glance-api.conf paste_deploy flavor keystone

或者

Glance支持多种存储后端,如本地文件系统、Swift对象存储等。这里我们使用本地文件系统作为存储后端。

1
2
3
4
[DEFAULT]
...
enabled_backends = fs:file
# use_keystone_limits = True # 如果想启用配额,启用这行

Glance使用关系型数据库(如MariaDB)存储镜像的元数据。需要配置数据库连接信息。

1
2
3
[database]
...
connection = mysql+pymysql://glance:LiXiaohui@controller/glance

Glance服务需要与Keystone服务进行身份认证,以确保只有经过授权的用户可以访问镜像服务。

1
2
3
4
5
6
7
8
9
10
11
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = LiXiaohui
  • www_authenticate_uri:指定身份认证服务的公共URL。

  • auth_url:指定身份认证服务的API端点。

  • auth_uri:指定身份认证服务的URL。

  • memcached_servers:指定Memcached服务器地址,用于缓存身份认证信息。

  • auth_type:指定身份认证类型,这里使用password

  • project_domain_nameuser_domain_name:指定项目和用户的域名。

  • project_nameusername:指定服务项目和用户名称。

  • password:指定用户密码。

指定Glance的存储后端为本地文件系统,并设置存储路径。

1
2
3
4
5
6
[glance_store]
...
default_backend = fs

[fs]
filesystem_store_datadir = /var/lib/glance/images/

Glance支持配额管理,可以通过以下配置启用配额功能。

1
2
3
4
5
6
7
8
9
[oslo_limit]
auth_url = http://controller:5000
auth_type = password
user_domain_id = default
username = glance
system_scope = all
password = LiXiaohui
endpoint_id = 84f29dc346be4d0cb1dd014017ecee4e #这是public的id
region_name = RegionOne
  • auth_url:指定身份认证服务的API端点。

  • auth_type:指定身份认证类型,这里使用password

  • user_domain_idusername:指定用户域名和用户名。

  • system_scope:指定系统范围。

  • password:指定用户密码。

  • endpoint_id:指定服务端点的ID。

  • region_name:指定区域名称。

配置Paste Deploy以启用Keystone身份认证。

1
2
[paste_deploy]
flavor = keystone

确保Glance用户对系统范围内有读权限,以便可以访问和管理镜像。

1
[root@controller ~]# openstack role add --user glance --user-domain Default --system all reader

填充glance服务数据库

在完成Glance服务的配置后,需要同步数据库,以确保Glance服务能够正确使用配置的数据库。这一步会创建所有必要的表和初始数据结构。

1
su -s /bin/sh -c "glance-manage db_sync" glance

启动glance服务

在数据库同步完成后,需要启动Glance服务,以确保服务正常运行。

1
systemctl enable openstack-glance-api.service --now