CentOS 7.9部署OpenStack Glance镜像服务详解

1. 项目概述与背景

在CentOS 7.9系统上部署OpenStack Train版本的Glance镜像服务,是构建私有云平台的关键步骤。作为OpenStack核心组件之一,Glance承担着虚拟机镜像的存储、管理和分发职能,直接影响着后续计算节点创建虚拟机的效率与稳定性。

我曾在多个企业级OpenStack部署项目中负责Glance服务的配置工作,发现Train版本相比之前版本有几个显著改进:首先是API响应速度优化,镜像上传效率提升约30%;其次是增强了对多种存储后端(包括Ceph RBD和NFS)的原生支持;最重要的是引入了镜像签名验证功能,大幅提升了安全性。

2. 环境准备与依赖安装

2.1 系统基础配置

在开始前需要确保:

  • 已配置好CentOS 7.9基础环境(建议最小化安装)
  • 网络连通性正常(能访问外部软件源)
  • 时间同步服务(chrony/NTP)正常运行
  • SELinux设置为permissive模式

重要提示:生产环境建议使用本地yum源,可显著提高软件安装速度。可通过yum install -y createrepo创建本地仓库。

2.2 数据库准备

Glance需要MySQL/MariaDB作为元数据存储,推荐使用MariaDB 10.3+版本。以下是数据库初始化命令:

mysql -u root -p CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;

2.3 OpenStack基础服务配置

需要提前完成Keystone认证服务的部署,并获取admin-openrc环境变量文件。关键配置项包括:

  • OS_AUTH_URL
  • OS_PROJECT_NAME
  • OS_USERNAME
  • OS_PASSWORD
  • OS_REGION_NAME

3. Glance服务部署详解

3.1 软件包安装

执行以下命令安装必要组件:

yum install -y openstack-glance python-glanceclient

安装过程中会自动解决依赖关系,包括:

  • python-keystoneclient
  • python-glance-store
  • python-oslo.db

3.2 配置文件修改

主配置文件/etc/glance/glance-api.conf需要调整以下关键部分:

[database] connection = mysql+pymysql://glance:密码@控制器IP/glance [keystone_authtoken] www_authenticate_uri = http://控制器IP:5000 auth_url = http://控制器IP:5000 memcached_servers = 控制器IP:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = glance password = 密码 [glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images

生产环境建议将存储后端配置为Ceph RBD,可显著提升性能:

[glance_store] stores = rbd default_store = rbd rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf

3.3 数据库初始化

执行数据库迁移命令:

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

成功后会显示"Database is synced successfully"提示。

4. 服务启动与验证

4.1 服务管理

启动服务并设置开机自启:

systemctl enable openstack-glance-api systemctl start openstack-glance-api

检查服务状态:

systemctl status openstack-glance-api

4.2 镜像上传测试

下载测试镜像:

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

上传镜像到Glance:

openstack image create "cirros-test" \ --file cirros-0.4.0-x86_64-disk.img \ --disk-format qcow2 \ --container-format bare \ --public

验证镜像列表:

openstack image list

5. 高级配置与优化

5.1 存储后端选择

根据实际需求可选择不同存储后端:

  • 文件系统:简单易用,适合测试环境
  • Ceph RBD:高性能,支持快照和克隆
  • Swift对象存储:适合大规模分布式部署
  • NFS:便于共享但性能较低

5.2 性能调优参数

在glance-api.conf中添加以下优化参数:

[glance_store] rbd_store_chunk_size = 8 show_image_direct_url = True [DEFAULT] workers = 4

5.3 安全加固措施

  1. 启用TLS加密:
[keystone_authtoken] auth_uri = https://控制器IP:5000 auth_url = https://控制器IP:5000
  1. 配置镜像签名验证:
[signing] enabled = true certificate_file = /etc/glance/ssl/cert.pem key_file = /etc/glance/ssl/key.pem

6. 常见问题排查

6.1 镜像上传失败

现象:上传过程中断或报错解决方法:

  1. 检查存储目录权限:
chown -R glance:glance /var/lib/glance/images
  1. 确认磁盘空间充足:
df -h /var/lib/glance
  1. 查看详细日志:
journalctl -u openstack-glance-api -f

6.2 服务无法启动

可能原因:

  • 数据库连接失败
  • Keystone认证配置错误
  • 端口冲突(默认9292)

排查步骤:

  1. 检查配置文件语法:
glance-api --config-file=/etc/glance/glance-api.conf --check
  1. 测试数据库连接:
mysql -u glance -p -h 控制器IP
  1. 验证Keystone令牌:
openstack token issue

6.3 镜像下载缓慢

优化方案:

  1. 启用镜像缓存:
[glance_cache] enabled = true backend = dogpile.cache.memcached memcache_servers = 控制器IP:11211
  1. 配置多区域复制(适用于分布式部署)
  2. 使用P2P镜像分发工具(如OpenStack的Image Caching)

7. 生产环境部署建议

根据实际运维经验,给出以下建议:

  1. 存储规划:

    • 为/var/lib/glance单独挂载高性能存储
    • 建议使用XFS文件系统(处理小文件性能更优)
    • 预留至少20%的额外空间
  2. 高可用方案:

    • 部署多个glance-api实例
    • 配置负载均衡(如HAProxy)
    • 使用Galera集群替代单点MySQL
  3. 监控指标:

    • 镜像上传/下载成功率
    • API响应时间(P99应<500ms)
    • 存储空间使用率
    • 并发连接数
  4. 备份策略:

    • 定期备份数据库(mysqldump)
    • 使用rsync同步镜像文件到备份节点
    • 测试镜像恢复流程

在实际部署中遇到过的一个典型问题:当使用Ceph后端时,如果rbd_cache配置不当会导致镜像上传超时。解决方案是在ceph.conf中添加:

[client] rbd cache = false

这个配置虽然会略微降低性能,但能保证上传过程的稳定性。