实验目标
OpenStack 的镜像服务 (glance) 允许用户发现、注册和恢复虚拟机镜像。它提供了一个 REST API,允许您查询虚拟机镜像的 metadata 并恢复一个实际的镜像。您可以存储虚拟机镜像通过不同位置的镜像服务使其可用,就像OpenStack 对象存储那样从简单的文件系统到对象存储系统。
OpenStack 镜像服务包括以下组件:
glance-api 接收镜像 API 的调用,诸如镜像发现、恢复、存储。
glance-registry 存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。
glance-registry 是私有内部服务,用于服务 OpenStack Image 服务。不要向用户暴露该服务数据库存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用 MySQL 或 SQLite

创建数据库、凭证和 endpoint

  • 实现要求
    创建 glance 数据库,创建 glance 服务的 API endpoint
  • 实现过程
    创建 glance 数据库,创建 glance 用户并授权
MariaDB > CREATE DATABASE glance;
MariaDB > GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456';
MariaDB > GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456';
MariaDB > GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'controller' IDENTIFIED BY '123456';

glance创建镜像失败 glance镜像服务可实现_ci


授权以后重启数据库服务

# systemctl restart mariadb

找到认证服务安装过程中创建的 admin-openrc 文件,执行

# . admin-openrc

创建用户 glance,会提示输入密码,我这里是 123456

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

glance创建镜像失败 glance镜像服务可实现_云计算_02


添加 admin 角色到 glance 用户和 service 项目上,命令没有输出

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

创建 glance 服务实体

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

glance创建镜像失败 glance镜像服务可实现_glance创建镜像失败_03


创建镜像 endpoint

# openstack endpoint create --region RegionOne image public http://controller:9292

glance创建镜像失败 glance镜像服务可实现_数据库_04

# openstack endpoint create --region RegionOne image internal http://controller:9292

glance创建镜像失败 glance镜像服务可实现_数据库_05

# openstack endpoint create --region RegionOne image admin http://controller:9292

glance创建镜像失败 glance镜像服务可实现_数据库_06

安装服务

  • 实现要求
    安装 glance 服务,并配置 glance
  • 实现过程
    安装服务
# yum install openstack-glance -y

进入/etc/glance/目录,备份 glance-api.conf 文件 glance-api.conf.bak

# cp glance-api.conf glance-api.conf.bak

修改 glance-api.conf,编辑文件 vi glance-api.conf

[database]
connection = mysql+pymysql://glance:123456@controller/glance
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = 123456
[paste_deploy]
flavor = keystone
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

备份 glance-registry.conf 文件 glance-registry.conf.bak

# cp glance-registry.conf glance-registry.conf.bak

修改 glance-registry.conf,编辑文件 vi glance-registry.conf

[database]
connection = mysql+pymysql://glance:123456@controller/glance
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = 123456
[paste_deploy]
flavor = keystone

检查数据库 glance 中是否有表,如果无,则查看/var/log/glance/api.log

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

如果会报错,需要对日志文件赋权限:

cd /var/log/glance/api.log
chown -R glance:glance /var/log/glance/api.log

进入数据库:mysql -uroot -p123456 (进入数据库之前要打开数据库,use tables)

glance创建镜像失败 glance镜像服务可实现_云计算_07


启动镜像服务、配置开机启动

# systemctl start openstack-glance-api.service openstack-glance-registry.service
# systemctl enable openstack-glance-api.service openstack-glance-registry.service
# systemctl status openstack-glance-api.service openstack-glance-registry.service

==注意:==如果 openstack-glance-api.servicde 状态失败,请检查 9292 端口。

验证安装

  • 实现要求
    下载测试镜像,上传镜像,验证安装
  • 实现过程
    执行环境变量
# . admin-openrc

下载一个比较小的镜像测试

# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它

# openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public

glance创建镜像失败 glance镜像服务可实现_数据库_08


==注意:==如果命令报错,请 source admin-openrc。确认镜像的上传并验证属性,有输出证明 glance 配置正确

# openstack image list

glance创建镜像失败 glance镜像服务可实现_数据库_09


参考资料:

《OpenStack 从零开始学》–卢万龙著,电子工业出版社第 2 篇安装配置篇,第 12章(P122)