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 ~]
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 ~]
+---------------------+----------------------------------+
| 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 ~]
- 创建一个service服务,service名称为glance,类型为image;创建完成后可以通过 openstack service list 查看
[root@ct ~]
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Image |
| enabled | True |
| id | e198a634a26549f994278a0339412e4c |
| name | glance |
| type | image |
+-------------+----------------------------------+
[root@ct ~]
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 6c3a23f3102a4d23894fd3cd76048231 | keystone | identity |
| e198a634a26549f994278a0339412e4c | glance | image |
+----------------------------------+----------+----------+
- 创建镜像服务 API 端点,OpenStack使用三种API端点代表三种服务:admin、internal、public
[root@ct ~]
+--------------+----------------------------------+
| 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 ~]
+--------------+----------------------------------+
| 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 ~]
+--------------+----------------------------------+
| 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 |
+--------------+----------------------------------+
[root@ct ~]
- 修改glance配置文件,glance有两个配置文件:
/etc/glance/glance-api.conf /etc/glance/glance-registry.conf
[root@ct ~]
[root@ct ~]
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 ~]
[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 ~]
[root@ct ~]
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 ~]
[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 ~]
- 开启glance服务(此处开启之后会生成存放镜像的目录/var/lib/glance/image)
[root@ct ~]
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 ~]
[root@ct ~]
tcp 0 0 0.0.0.0:9292 0.0.0.0:* LISTEN 42732/python2
- 赋予openstack-glance-api.service服务对存储设备的可写权限
[root@ct ~]
- 先上传cirros镜像到控制节点的/root,然后导入glance,最后查看是否创建成功
[root@ct ~]
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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 ~]
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 4df06b9e-187b-4a28-a21a-823f3dbd1b13 | cirros | active |
+--------------------------------------+--------+--------+
[root@ct ~]
+--------------------------------------+--------+
| ID | Name |
+--------------------------------------+--------+
| 4df06b9e-187b-4a28-a21a-823f3dbd1b13 | cirros |
+--------------------------------------+--------+
小结
glance部署思路
- 创建数据库、授权
- 创建openstack用户、授权、管理
- 修改配置文件(glance-api.conf、glance-registry.conf)
- 初始化数据库、上传实例镜像
- 查看是否上传成功
|