OpenStack模块(T版)—Glance镜像服务详解
⽂章⽬录
前⾔
镜像的概念
镜像的英⽂为lmage,⼜译为映象,通常是指⼀系列⽂件或⼀个磁盘驱动器的精确副本。镜像⽂件其实和ZIP压缩包类似,它将特定的⼀系列⽂件按照⼀定的格式制作成单⼀的⽂件,以⽅便⽤户下载和使⽤。
Glance镜像
Glance服务是openstack的⼀个核⼼项⽬,它允许⽤户发现、注册和获取虚拟机镜像,提供了⼀个RESET API,允许查询虚拟机镜像的元数据,并获取⼀个现存的镜像。
⼀、Glance镜像简介
1.1 什么是glance镜像服务
它在open stack中的项⽬名称为Glance.在早期的open stack版本中,Glance只有管理镜像的功能,并不
具备镜像存储功能。现
在,Glance已经发展称为集上传,检索,管理和存储等多种功能的open stack核⼼服务。
1.2 glance的主要功能
1. 查询和获取镜像的元数据和镜像本⾝
2. 注册和上传虚拟机镜像,包括镜像的创建、上传、下载和管理
3. 维护镜像信息,包括元数据和镜像本⾝
4. ⽀持多种⽅式存储镜像,包括普通的⽂件系统、swift、Amazon、S3等
5. 对虚拟机实例执⾏创建快照命令来创建新的镜像,或者备份虚拟机的状态
1.3 glance的组成及重要组件
glance由两部分组成:
(1)glance-api: 接受云系统镜像的创建,删除,读取请求
(2)glance-Registry: 云系统的镜像注册服务
(1)Glance-api
glance-api⽤于接收镜像API的调⽤,诸如镜像发现、恢复以及存储等。作为⼀个后台进程, glance-api对外提供 REST API接⼝,响应⽤户发起的镜像查询、获取和存储的调⽤
(2)Glance-registry
glance- registry⽤于存储、处理和恢复镜像的元数据,元数据包括镜像的的⼤⼩和类型等属性, registry是⼀个内部服务接⼝,不建议暴露给普通⽤户
(3)Database
database⽤于存放镜像的元数据,可以根据需要选择数据库,如 MySQL、 SQLite等
(4)Storage repository for image files
⼀般情况下, glance并不需要存储任何镜像,⽽是将镜像存储在后端仓库中。 Glance⽀持多种 repository。主要包括对象存储 Swift、块存储 Cinder、 VMware的ESX/ESXi或者vCenter、亚马逊的S3、HTTP可⽤服务器、Ceph等
Glance REST API 的版本
Glance有两个版本的REST API V1 和 V2
功能区别:
(1)V1只提供了基本的image和member操作功能:镜像创建、删除、下载、列表、详细信息查询、更新,以及镜像tenant成员的创建、删除和列表。
(2)V2除了⽀持V1的所有功能外,主要是增加了如下功能:
镜像 location 的添加、删除和修改等操作
metadata namespace 操作
image tag 操作
(3)V1 和V2对 image store 的⽀持是相同的
⼆、Glance镜像服务架构
2.1 常见的镜像⽂件格式
(1) 镜像⽂件容器格式
bare:没有容器或元数据“信封”
ovf:开放虚拟化格式
ova:在glance中存储的amazon内核格式
ari:在glance中存储的amazon虚拟内存盘(Ramdlsk)格式
aki:在glance中存储的amazon内核格式
docker:在glance中存储的容器⽂件系统的docker的tar归档
如果不能确定选择哪种容器格式,那么简单地容器格式指定为bare是安全
(2)虚拟机镜像⽂件磁盘格式
raw:⽆结构的磁盘格式
vhd:该格式通⽤于VMware、Xen、VirtualBox以及其他虚拟机管理程序
vhdx:vhd格式的增强版本,⽀持更⼤的磁盘尺⼨
vmdk:—种⽐较通⽤的虚拟机磁盘格式
vdi:由VirtuaBox虚拟机监控程序和QEMU仿真器⽀持的磁盘格式
iso:⽤于光盘(CD-ROM)数据内容的档案格式
ploop:由Virtuozzo⽀持,⽤于运⾏OS容器的磁盘格式
qcow2:由QEMU仿真⽀持,可动态扩展,⽀持写时复制(Copy on Write)的磁盘格式aki:在Glance中存储的Amazon内核格式
ari:在Glance中存储的Amazon虚拟内存盘(Ramdisk)格式ami:在Glance中存储的Amazon机器格式
2.2 镜像状态
queued:这是⼀种初始化状态,镜像⽂件刚被创建,在glance数据库只有其元数据,镜像数据还没有上传⾄数据库中
saving:是镜像的原始数据在上传到数据库中的⼀种过渡状态,表⽰正在上传镜像
uploading指⽰已进⾏导⼊数据提交调⽤,此状态下不允许调⽤put/file(saving状态会执⾏put/file,这是另外⼀种上传的⽅法)deleted : 镜像将在不久后被⾃动删除,该镜像不可再⽤,但是⽬前Glance仍然保留该镜像的相关信息和原始数据
pending_delete:与deleted相似,Glance还没有清除镜像数据,但处于该状态的镜像不可恢复
active:表⽰当镜像数据成功上传完毕,成为Glance中可⽤的镜像
deactivated:表⽰任何⾮管理员⽤户都⽆权访问镜像数据,禁⽌下载镜像,禁⽌镜像导出和镜像克隆之类的操作
killed:表⽰镜像上传过程中发⽣错误,镜像不可读
2.3 Glance镜像服务架构图
1. 客户端是Glance服务应⽤程序使⽤者,是OpenStack命令⾏⼯具、Horizon或Nova服务;
2. glance-api是系统后台运⾏的服务进程。是进⼊Glance的⼊⼝。它对外提供REST API,负责接收⽤户的RESTul请求,响应镜像查
询、获取和存储的调⽤。
3. glance-registry是系统后台运⾏的glancei注册服务进程,负责处理与镜像元数据相关的RESTful请求,元数据包括镜像⼤⼩、类型等
信息。Glance-api接收的请求如果是与镜像的元数据相关的操作, glance-api会把请求转发给glance-registry.glance-registry会解析请求内容,并与数据库交互。存储,处理、检索镜像的元数据。glance-api对外提供API。⽽gllance-registry的API只由glance-api使⽤。
4. Glance的DB模块存储的是镜像的元数据,可以选⽤MYSQL、MariaDB、SQLite等数据库。镜像的元数据通过glance-registry存放
在数据库中。注意,镜像本⾝(chunk数据)是通过glance存储驱动存放到各种存储后端中的。
5. 存储后端(Store Backend) Glance⾃⾝并不存储镜像,它将镜像存放在后端存储系统中。镜像本⾝的数据 通过glance_store存放在
各种后端,并可从中获取。⽀持本地存储、对象存储、RBD块设备、Sheepdog分布式存储、Cinder块存储、VMware数据存储。
具体使⽤哪种backend,是在/f 中配置的[glance_store]
简单来说:
Client端发送请求,api端router.py中将请求下发,选择相应的⽅法处理请求,⽬前我们测试环境中使⽤的api是v1版本
经过中间auth, notifier, policy, quota到location,会调⽤到glance_store进⾏底端存储,并返回存储的位置信息,需要写到数据库中
在跟数据库的交互中需要⽤到glance_registry,将镜像的相关信息写到数据库中,值得注意的是会将上⾯镜像存储的位置信息location_uri 写⼊到数据库中,在进⾏删除等操作会直接从数据库中读取这个uri,进⾏删除
三、Glance镜像服务部署
3.1 创建数据库、授权
[root@ct ~]# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE glance;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
3.2 创建openstack⽤户、授权、管理
1、创建OpenStack的Glance⽤户
#创建⽤户前,需要⾸先执⾏管理员环境变量脚本(此处已经在~/.bashrc 中定义过了)
[root@ct ~]# openstack user create --domain default --password GLANCE_PASS glance  ###创建glance⽤户
[root@ct ~]# openstack role add --project service --user glance admin    #将glance⽤户添加到service项⽬中,并且针对这个项⽬拥有admin权限;注册glanc e的API,需要对service项⽬有admin权限
[root@ct ~]# openstack service create --name glance --description "OpenStack Image" image  创建⼀个service服务,service名称为glance,类型为image;创建完成后可以通过 openstack service list 查看
2、创建镜像服务 API 端点,OpenStack使⽤三种API端点代表三种服务:admin、internal、public
[root@ct ~]# openstack endpoint create --region RegionOne image public ct:9292
[root@ct ~]# openstack endpoint create --region RegionOne image internal ct:9292
[root@ct ~]# openstack endpoint create --region RegionOne image admin ct:9292
3.3 修改配置⽂件(f、f)
1、安装 openstack-glance 软件包。
[root@ct ~]# yum -y install openstack-glance
2、修改glance配置⽂件
#glance有两个配置⽂件:
/etc/f
/etc/f
/etc/f
(1)修改f配置
[root@ct ~]# cp -a /etc/f{,.bak}  #备份
[root@ct ~]# grep -Ev '^$|#' /etc/f.bak > /etc/f  #过滤空⾏和注释⾏
# ⼀⼤波传参
[root@ct ~]# openstack-config --set /etc/f database connection mysql+pymysql://glance:GLANCE_DBPASS@ct/glance [root@ct ~]# openstack-config --set /etc/f keystone_authtoken www_authenticate_uri ct:5000
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken auth_url ct:5000
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken memcached_servers ct:11211
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken auth_type password
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken project_domain_name Default
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken user_domain_name Default
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken project_name service
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken username glance
[root@ct ~]# openstack-config --set /etc/f keystone_authtoken password GLANCE_PASS
[root@ct ~]# openstack-config --set /etc/f paste_deploy flavor keystone
[root@ct ~]# openstack-config --set /etc/f glance_store stores file,http
[root@ct ~]# openstack-config --set /etc/f glance_store default_store file
[root@ct ~]# openstack-config --set /etc/f glance_store filesystem_store_datadir /var/lib/glance/images/
[root@ct ~]# cd /etc/glance
[root@ct glance]# f
[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 = ct:5000  ##指定认证的keystone的URI
auth_url = ct:5000
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service    #glance⽤户针对service项⽬拥有admin权限
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]
(2)修改f 配置⽂件
#备份、过滤注释信息
cp -a /etc/f{,.bak}
grep -Ev '^$|#' /etc/f.bak > /etc/f
#修改参数(配置与f相同)
openstack-config --set /etc/f database connection  mysql+pymysql://glance:GLANCE_DBPASS@ct/glance openstack-config --set /etc/f keystone_authtoken www_authenticate_uri  ct:5000
openstack-config --set /etc/f keystone_authtoken auth_url  ct:5000
openstack-config --set /etc/f keystone_authtoken memcached_servers  ct:11211
openstack-config --set /etc/f keystone_authtoken auth_type  password
openstack-config --set /etc/f keystone_authtoken project_domain_name  Default
openstack-config --set /etc/f keystone_authtoken user_domain_name  Default
openstack-config --set /etc/f keystone_authtoken project_name  service
mysql社区版国内镜像下载openstack-config --set /etc/f keystone_authtoken username  glance
openstack-config --set /etc/f keystone_authtoken password  GLANCE_PASS
openstack-config --set /etc/f paste_deploy flavor  keystone
[root@ct glance]# f
[DEFAULT]
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
[keystone_authtoken]
www_authenticate_uri = ct:5000
auth_url = 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]
3.4 初始化数据库、上传实例镜像

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。