当前位置: 首页 > 工具软件 > Glance > 使用案例 >

介绍OpenStack(T版)的组件之一glance

程彭祖
2023-12-01

glance镜像服务介绍

  • 在OpenStack中的项目名称为glance,以前只有管理镜像的功能,并不具备镜像存储功能,现在已经发展成集镜像上传,检索,管理和存储等多种功能的OpenStack核心服务

glance功能

镜像服务用于管理镜像,能够让用户发现,获取和保存镜像,其主要功能:

  • 查询和获取镜像的元数据和镜像本身
  • 注册和上传虚拟机镜像,包括镜像创建上传,下载和管理
  • 维护镜像信息,包括元数据和镜像本身
  • 支持多种方式存储镜像,包括普通文件系统,swift,Amazon S3等系统
  • 对虚拟机实例执行创建快照命令来创建新的镜像,或者备份虚拟机的状态

glance提供的API版本

  • v1:只提供剧本的镜像和成员操作功能,包括镜像创建,删除,下载,列表,详细信息查询,更新,以及镜像租户成员的创建,删除和列表
  • v2:除了支持v1的功能外,增加了镜像位置的添加,删除,修改,元数据和名称空间操作,镜像标记操作

虚拟机镜像文件的磁盘格式

  • raw:无结构的磁盘格式
  • vhd:通用于VMware、Xen、 VirtualBox以及 其他虚拟机管理程序
  • vhdx:vhd格式的增强版本,支持更大的磁盘尺寸
  • iso:用于光盘(CD- ROM)数据内容的档案格式
  • ari:在Glance中存储的Amazon虚拟内存盘(Ramdisk)格式
  • ami:在Glance中存储的Amazon机器格式
  • aki:在Glance中存储的Amazon内核格式
  • qcow2:由QEMU仿真支持,可动态扩展,支持写时复制(Copy on Write)的磁盘格式
  • vmdk:一种比较通用的虚拟机磁盘格式
  • ploop 由Virtuozzo支持,用于运行OS容器的磁盘格式
  • vdi:由VirtualBox虛拟机监控程序和QEMU仿真器支持的磁盘格式

glance文件容器格式

  • bare:没有容器或元数据"信封"的镜像
  • ovf:开放虚拟化格式
  • ova:在glance中存储的开放虚拟化设备格式
  • aki:在glance中存储的Amazon内核格式
  • ari:在Glance中存储的Amazon虚拟内存盘(Ramdisk) 格式
  • docker:在glance中存储的容器文件系统的docker的tar档案
    注:如果不能确定选择哪种容器格式,可以指定bare最为安全

glance镜像状态

镜像上传成功前状态

  • queued:初始状态,镜像刚被创建,,在Glance数据库只有其元数据,镜像数据还没有上传至数据库中
  • saving:镜像的原始数据在上传数据库的一种过渡状态,表示正在上传
  • uploading:已进行导入数据提交调用,此状态下不允许调用put/file
  • importing:已经完成导入调用,但是镜像还未准备好给虚拟机提供服务

镜像上传成功后状态

  • active:表示镜像上传完毕,可以使用
  • deactivated:任何非管理员用户都无权访问镜像数据,禁止下载镜像,禁止导出镜像和克隆之类
  • killed:在镜像上传过程中发生错误,镜像不可读
  • deleted:镜像将在不久后被自动删除,该镜像不可再用,但是目前Glance仍然保留该镜像的相关信息和原始数据,该状态镜像可恢复
  • pending_delete:与deleted相似, Glance还没有清除镜像数据,但处于该状态的镜像不可恢复

glance镜像的访问权限

  • public公共的:可以被所用项目使用
  • private私有的:只有被镜像所有者所在的项目使用
  • shared共享的:非公有镜像可以共享个以其他项目,通过项目成员操作实现
  • protected受保护的:这种镜像不能被删除

glance的工作流程

  • 创建虚拟机首先找keystone认证并被颁发一个token令牌
  • 然后keystone给客户一个URL位置点来指引到glance的API
  • glance内部认证会将token交给keystone查看是否有权限操作
  • 然后API将操作交给glance控制器,让控制器接到的任务分发给对应的子功能模块
  • 如果去找存储后端的话需要再次跟keystone做一次认证,因为我们使用的存储方式不一定都是OpenStack内部的存储方式,认证完成后返回给存储后端的auth认证
  • 如果去找元数据,回去将任务交给数据库的调用的组件,然后返回,不需要二次认证

glance组件部署

  • 先进入数据库中创建glance库,然后将用户glance提权并刷新权限
[root@ct ~]# mysql -u root -pabc123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 25
Server version: 10.3.20-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE glance;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

  • 创建OpenStack的glance用户,创建用户前,需要首先执行管理员环境变量脚本(此处已经在~/.bashrc 中定义过了)
[root@ct ~]# openstack user create --domain default --password GLANCE_PASS glance
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 539dd6579c324d5594fdebade87ba27f |
| name                | glance                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

  • 将glance用户添加到service项目中,并且针对这个项目拥有admin权限;注册glance的API,需要对service项目有admin权限
[root@ct ~]# openstack role add --project service --user glance admin

  • 创建一个service服务,service名称为glance,类型为image;创建完成后可以通过 openstack service list 查看
[root@ct ~]# openstack service create --name glance --description "OpenStack Image" image
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image                  |
| enabled     | True                             |
| id          | e198a634a26549f994278a0339412e4c |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+
[root@ct ~]#  openstack service list 
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| 6c3a23f3102a4d23894fd3cd76048231 | keystone | identity |
| e198a634a26549f994278a0339412e4c | glance   | image    |
+----------------------------------+----------+----------+

  • 创建镜像服务 API 端点,OpenStack使用三种API端点代表三种服务:admin、internal、public
[root@ct ~]# openstack endpoint create --region RegionOne image public http://ct:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 365c6da6423d43a5919191c0ab0ef69a |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | e198a634a26549f994278a0339412e4c |
| service_name | glance                           |
| service_type | image                            |
| url          | http://ct:9292                   |
+--------------+----------------------------------+
[root@ct ~]# openstack endpoint create --region RegionOne image internal http://ct:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 77786f0ca7554ca4a8f27c2c1d1d86c8 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | e198a634a26549f994278a0339412e4c |
| service_name | glance                           |
| service_type | image                            |
| url          | http://ct:9292                   |
+--------------+----------------------------------+
[root@ct ~]# openstack endpoint create --region RegionOne image admin http://ct:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | f91feec141274b4fbbaa08dcd2b88a0d |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | e198a634a26549f994278a0339412e4c |
| service_name | glance                           |
| service_type | image                            |
| url          | http://ct:9292                   |
+--------------+----------------------------------+

  • 安装 openstack-glance包
[root@ct ~]# yum -y install openstack-glance
  • 修改glance配置文件,glance有两个配置文件:
    /etc/glance/glance-api.conf
    /etc/glance/glance-registry.conf
[root@ct ~]# cp -a /etc/glance/glance-api.conf{,.bak}		//先备份文件
[root@ct ~]# grep -Ev '^$|#' /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf			//将模块写到原来配置中

  • 开始传递参数
openstack-config --set /etc/glance/glance-api.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_name service
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken username glance
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken password GLANCE_PASS
openstack-config --set /etc/glance/glance-api.conf paste_deploy flavor keystone
openstack-config --set /etc/glance/glance-api.conf glance_store stores file,http
openstack-config --set /etc/glance/glance-api.conf glance_store default_store file
openstack-config --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/

[root@ct ~]# cat /etc/glance/glance-api.conf
[DEFAULT]
[cinder]
[cors]
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@ct/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			//存储类型,file:文件,http:基于api调用的方式,把镜像放到其他存储上
default_store = file		//默认存储方式
filesystem_store_datadir = /var/lib/glance/images/			//指定镜像存放的本地目录
[image_format]
[keystone_authtoken]
www_authenticate_uri = http://ct:5000				//指定认证的keystone的URI
auth_url = http://ct:5000
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default				//glance用户针对service项目拥有admin权限
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS
[oslo_concurrency]
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[paste_deploy]
flavor = keystone				//指定提供认证的服务器为keystone
[profiler]
[store_type_location_strategy]
[task]
[taskflow_executor]

  • 然后修改glance-registry.conf 配置文件
[root@ct ~]# cp -a /etc/glance/glance-registry.conf{,.bak}
[root@ct ~]# grep -Ev '^$|#' /etc/glance/glance-registry.conf.bak > /etc/glance/glance-registry.conf		//同样将模块拷过来

  • 然后传递参数,跟api.conf相同
openstack-config --set /etc/glance/glance-registry.conf database connection  mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken www_authenticate_uri   http://ct:5000
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_url  http://ct:5000
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken memcached_servers  ct:11211
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_type  password
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_domain_name  Default
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken user_domain_name  Default
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_name  service
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken username  glance
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken password  GLANCE_PASS
openstack-config --set /etc/glance/glance-registry.conf paste_deploy flavor  keystone

[root@ct ~]# cat /etc/glance/glance-registry.conf
[DEFAULT]
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
[keystone_authtoken]
www_authenticate_uri = http://ct:5000
auth_url = http://ct:5000
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_policy]
[paste_deploy]
flavor = keystone
[profiler]

  • 初始化glance数据库,生成相关表结构,只需要初始化一次即可
[root@ct ~]# su -s /bin/sh -c "glance-manage db_sync" glance
  • 开启glance服务(此处开启之后会生成存放镜像的目录/var/lib/glance/image)
[root@ct ~]# systemctl enable openstack-glance-api.service
Created symlink from /etc/systemd/system/multi-user.target.wants/openstack-glance-api.service to /usr/lib/systemd/system/openstack-glance-api.service.
[root@ct ~]# systemctl start openstack-glance-api.service
[root@ct ~]# netstat -natp | grep 9292
tcp        0      0 0.0.0.0:9292            0.0.0.0:*               LISTEN      42732/python2       
  • 赋予openstack-glance-api.service服务对存储设备的可写权限
[root@ct ~]# chown -hR glance:glance /var/lib/glance/		//-h代表对符号连接/软链接的文件修改

  • 先上传cirros镜像到控制节点的/root,然后导入glance,最后查看是否创建成功
[root@ct ~]# openstack image create --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field            | Value                                                                                                                                                                                      |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| checksum         | f8ab98ff5e73ebab884d80c9dc9c7290                                                                                                                                                           |
| container_format | bare                                                                                                                                                                                       |
| created_at       | 2021-08-25T15:41:42Z                                                                                                                                                                       |
| disk_format      | qcow2                                                                                                                                                                                      |
| file             | /v2/images/4df06b9e-187b-4a28-a21a-823f3dbd1b13/file                                                                                                                                       |
| id               | 4df06b9e-187b-4a28-a21a-823f3dbd1b13                                                                                                                                                       |
| min_disk         | 0                                                                                                                                                                                          |
| min_ram          | 0                                                                                                                                                                                          |
| name             | cirros                                                                                                                                                                                     |
| owner            | 2b924d5597424a75b3ff5283c980b44c                                                                                                                                                           |
| properties       | os_hash_algo='sha512', os_hash_value='f0fd1b50420dce4ca382ccfbb528eef3a38bbeff00b54e95e3876b9bafe7ed2d6f919ca35d9046d437c6d2d8698b1174a335fbd66035bb3edc525d2cdb187232', os_hidden='False' |
| protected        | False                                                                                                                                                                                      |
| schema           | /v2/schemas/image                                                                                                                                                                          |
| size             | 13267968                                                                                                                                                                                   |
| status           | active                                                                                                                                                                                     |
| tags             |                                                                                                                                                                                            |
| updated_at       | 2021-08-25T15:41:42Z                                                                                                                                                                       |
| virtual_size     | None                                                                                                                                                                                       |
| visibility       | public                                                                                                                                                                                     |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

  • 查看镜像
[root@ct ~]# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 4df06b9e-187b-4a28-a21a-823f3dbd1b13 | cirros | active |
+--------------------------------------+--------+--------+
[root@ct ~]# glance image-list
+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 4df06b9e-187b-4a28-a21a-823f3dbd1b13 | cirros |
+--------------------------------------+--------+

小结

glance部署思路

  • 创建数据库、授权
  • 创建openstack用户、授权、管理
  • 修改配置文件(glance-api.conf、glance-registry.conf)
  • 初始化数据库、上传实例镜像
  • 查看是否上传成功
 类似资料: