摘要

Glance 服务主要负责虚拟机镜像的注册、发现和获取,相当于云平台里的“镜像仓库”。这篇手册会从创建底层数据库开始,一步步完成 Glance 相关凭证和服务实体的配置。

实验架构
实验架构

Glance 组件简介

Glance(镜像服务) 是 OpenStack 项目中负责镜像生命周期管理的核心组件。它在云平台中扮演着“数字资产仓库”的角色,不仅负责存储镜像文件,还负责维护镜像的详细描述信息。

它的核心职能包括:

  • 记录信息(元数据):记录镜像的名字、大小、格式等。
  • 妥善存放:把镜像文件存放在服务器的硬盘上。
  • 快速分发:当你想创建虚拟机时,Glance 会立刻把对应的镜像分发给计算节点,让云主机能顺利开机。

简而言之,Glance 解决了云平台中镜像“存在哪、怎么找、如何发”的问题,是实现自动化、规模化部署操作系统的必备组件。

准备工作

1、重置实验环境

执行以下脚本完成实验环境准备:

curl -s http://192.168.192.205/scripts/env3-2-local.sh | bash

2、准备登录脚本

在 root 用户的家目录中创建名为 admin-openstack.sh 的脚本,内容如下:

export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3

执行 source admin-openstack.sh 命令使脚本生效。

3、创建项目

在 OpenStack 中,各个独立的服务(如我们之后要安装的计算服务 Nova、网络服务 Neutron 等)都需要有自己的账号来互相通信。我们把它们统一放到 service 项目下进行统一管理。

创建名为 service 的项目:

openstack project create service -domain default

在 OpenStack 中管理多租户权限,就像管理一家大型集团公司:

  • 域(Domain):相当于一个大集团或分公司(多租户顶层隔离容器)。
  • 项目(Project):相当于公司里的部门或项目组。
  • 用户(User):就是部门里的具体员工/操作者。
  • 角色(Role):代表员工的职位与权限标签(如经理、普通员工),决定了他们在项目中能做什么。

一、创建与授权数据库

在正式安装配置 Glance 服务之前,Glance 需要一个专门的数据库来存储镜像的元数据信息(比如镜像的名称、格式、大小等)。

首先,以 root 管理员身份登录到数据库。

mysql -u root -p
提示

连接时需要输入在之前环境准备阶段设置的 MariaDB 密码(默认密码是 123456)。

创建 glance 数据库

登录成功后,创建一个名为 glance 的专属数据库。

CREATE DATABASE glance;

给 glance 数据库授权

为了让 Glance 服务能够正常读写这个数据库,我们需要给它分配足够的权限。执行下面的 SQL 语句,将 glance 数据库的所有权限授予任意来源的 glance 用户,并设置密码为 glance。

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';
FLUSH PRIVILEGES;

dVh1x2
dVh1x2

退出数据库

操作完成后,输入以下命令退出数据库控制台。

exit

二、创建 Glance 服务的凭证

OpenStack 各个组件之间互相通信需要经过 Keystone(身份认证服务)的验证。因此,接下来要在 Keystone 中为 Glance 创建专属的用户、角色和服务实体,给它办理“通行证”。

1、获取管理员权限

在执行 OpenStack 命令之前,需要先加载管理员的环境变量脚本,以此获得操作权限。

source admin-openstack.sh

2、创建 glance 用户

在身份服务中创建一个名为 glance 的用户,为了方便记忆,这里我们将密码设置为 glance。

openstack user create --domain default --password glance glance

创建glance用户
创建glance用户

3、分配管理员角色

接下来,我们需要把刚才创建的 glance 用户加入到 service(服务)项目中,并且给它赋予 admin(管理员)角色。这样 Glance 就有权限进行系统级别的操作了。

openstack role add --project service --user glance admin

4、创建 glance 服务实体

最后一步,在 Keystone 中注册 Glance 服务实体。这相当于在服务目录中给 Glance 挂个牌子,告诉其他组件:“我是负责镜像服务的 Glance”。

openstack service create --name glance --description "OpenStack Image" image

5、 创建镜像服务的 API 端点

在 OpenStack 中,Endpoint(端点) 就像是服务的“门牌号”或“窗口地址”。其他组件如果想找 Glance 办事,就必须通过这些端点(通常是 URL)来访问。

OpenStack 的 Endpoint 通常分为三种类型:

  • public(公共):给普通用户或云平台外部使用的地址。
  • internal(内部):云平台内部各个服务(如 Nova、Cinder)之间互相沟通的地址。
  • admin(管理):专门给管理员进行维护和管理操作的地址。

在本次实验中,我们把这三种类型的地址都统一指向 http://controller:9292。

a. 创建公共端点:

openstack endpoint create --region RegionOne image public http://controller:9292
  • --region RegionOne:指定区域名称为 RegionOne。
  • image:指定这个端点属于镜像服务(Glance)。
  • public:指定端点类型为公共类型。
  • http://controller:9292:指定服务的实际访问地址。

公共端点
公共端点

b. 创建内部端点:

openstack endpoint create --region RegionOne image internal http://controller:9292
  • internal:指定端点类型为内部类型,供云平台内部服务通讯使用。

内部端点
内部端点

c. 创建管理端点:

openstack endpoint create --region RegionOne image admin http://controller:9292
  • admin:指定端点类型为管理类型,供管理员维护使用。

管理端点
管理端点

验证端点列表:

创建完成后,可以查看当前所有的服务端点,确认 Glance(image)的相关记录已经存在。

openstack endpoint list

OQQw4V
OQQw4V

三、安装并配置 Glance 组件

1、 安装 glance 软件包

在控制节点上安装负责镜像处理的核心软件包。

yum install -y openstack-glance

2、 配置 glance-api

编辑 /etc/glance/glance-api.conf 配置文件。这个文件决定了 Glance 如何连接数据库、如何进行身份认证以及镜像存放在哪里。

# 数据库
[database]
# glance:glance 表示:用户名:密码
connection = mysql+pymysql://glance:glance@controller/glance

# 身份认证
[keystone_authtoken]
www_authenticate_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 = glance

[paste_deploy]
flavor = keystone

# 镜像存储方式
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

3、 配置 glance-registry

接下来编辑另一个配置文件 /etc/glance/glance-registry.conf。

# 数据库访问
[database]
connection = mysql+pymysql://glance:glance@controller/glance

# 身份认证
[keystone_authtoken]
www_authenticate_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 = glance

[paste_deploy]
flavor = keystone

四、 同步数据库

配置完成后,我们需要把 Glance 所需的数据表结构导入到刚才在 MariaDB 中创建的 glance 数据库中。

su -s /bin/sh -c "glance-manage db_sync" glance
  • su -s /bin/sh:切换 Shell 环境执行命令。
  • -c "glance-manage db_sync":执行具体的数据库同步指令。
  • glance:以 glance 用户的身份来运行这条命令。

同步数据成功
同步数据成功

验证数据库表

同步完成后,进数据库看看表是不是已经创建成功了。如果看到一长串表名,就说明成功了。

mysql -uglance -pglance -e "use glance; show tables;"

数据表
数据表

启动服务并设置自启动

最后,让 Glance 的两个核心服务运行起来。

# 重新加载系统服务配置
systemctl daemon-reload

# 启动服务并设置为开机自动启动
systemctl start openstack-glance-api openstack-glance-registry
systemctl enable openstack-glance-api openstack-glance-registry

五、验证 Glance 服务

1、 加载管理员环境

在进行操作前,确保已经加载了 admin 的环境变量,这样你才有权限上传镜像。

source ./admin-openstack.sh

2、 获取测试镜像

由于我们现在还没镜像,可以先从网上下载一个非常小巧的 Linux 镜像(CirrOS)来做测试。

wget http://192.168.192.205/cirros-0.4.0-x86_64-disk.img

下载完成后,可以用 ls -lh 命令确认一下文件是否完整。

查看文件
查看文件

3、 将镜像上传到云平台

使用下面的命令将下载好的镜像文件正式上传到 Glance 服务中。

openstack image create "cirros" \
  --file cirros-0.4.0-x86_64-disk.img \
  --disk-format qcow2 \
  --container-format bare \
  --public
  • --disk-format qcow2:指定磁盘格式为 QCOW2(OpenStack 常用的格式)。
  • --container-format bare:指定容器格式为 bare(裸格式)。
  • --public:设置为公共可见,这样所有租户都能用这个镜像。

OpenStack镜像格式
OpenStack镜像格式

ZXZdLs
ZXZdLs

4、 查看镜像列表

确认镜像是否成功上传到 Glance 中,并且状态为 active(激活状态)。

openstack image list

镜像列表
镜像列表

检查完成情况

curl -s http://192.168.192.205/scripts/3.3.sh | bash

检查完成情况
检查完成情况