Glance服务详解
# Glance服务详解
Glance是为OpenStack提供虚拟机镜像管理的组件,在搭建起来的OpenStack集群中,我们在创建虚 拟机的时候需要指定使用的镜像,例如CentOS还是Ubuntu。然后在虚拟机创建的过程中,Nova就会 向Glance服务申请镜像。Glance服务自己负责管理镜像的存储,会告诉虚拟机在哪里可以获取镜像, 然后Nova服务就到指定地址去读取镜像并启动虚拟机。
# Glance体系结构
Glance只负责镜像管理工作,镜像存储工作由后端的存储组件负责,Glance只负责对接后端的存储。 因此Glance可以认为是OpenStack几大核心组件中最简单的组件。Glance的体系结构如下所示:
从图上可以看到整个架构比较简单,glance-api负责接收镜像相关的请求,然后调用glance-registry服务进行镜像相关的CRUD操作,glance-api还可以直接调用后端存储进行镜像的读写操作。但这里的图片中大家可以看到,glance-api到glance-registry,然后到db这里用的是虚线,这里的原因是从S版本开始,glance-registry组件被废弃了,它的功能直接集成到了glance-api组件里。因此在S之前的版本中,我们还可以看到glance-registry这个组件,之后的版本中就没有了,例如我们在前面使用rpm包部署Train版本时,就没有启动这个组件,但是我们的虚拟机创建过程中还是可以正常获取到镜像信息。
Glance组件里的store模块实现了一个存储框架,可以对接多种后端存储,例如S3、Swift、Ceph、本地文件系统等,然后向glance-api提供一个统一镜像读写接口。
# Glance存储配置
根据上面的架构图我们知道,glance组件只有两块配置,分别是:
- 数据库配置,一般是设置数据库的连接信息,包括地址、端口、账号密码等;
- 存储配置,根据存储类型会有不同的配置信息,下面会详细介绍。
[DEFAULT]
# ...
bind_host = 192.168.31.185
# ..
[database]
# ...
connection = mysql+pymysql://glance:35ktJazstxE8ZzHv@192.168.31.185/glance
# ...
[keystone_authtoken]
# ...
www_authenticate_uri = http://192.168.31.185:5000
auth_version = v3
# auth_url = http://192.168.31.185:5000
memcached_servers = 192.168.31.185:11211
service_token_roles_required = True
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = Tn3Ss1mmh7WPQOpk
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 数据库配置
数据库配置只有一个,就是数据库的连接信息,是在/etc/glance/glance-api.conf里配置的,如下所 示:
[database]
connection = mysql+pymysql://glance:35ktJazstxE8ZzHv@192.168.31.185/glance
2
# 本地存储
除了数据库配置以外,重要的就是存储配置了,根据存储的类型,我们可以简单的分为本地存储和网络存储,先来看本地存储。本地存储就是使用部署了glance-api组件的机器硬盘空间。配置如下:
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images
2
3
4
配置项说明:
- stores,指定后端存储的类型;
- file,本地硬盘存储;
- http,网络存储
- rbd,Ceph RBD块存储;
- default_store,默认的存储类型;
- filesystem_store_datadir 指定了存储镜像的路径,如果你的所有镜像都要存放在本地存储时,你需要给对应的目录提供足够的硬盘空间。
# Ceph存储
如果在glance_store指令的store配置项里提供了RBD类型,那么就可以在下面提供Ceph RBD块存储的连接信息,参考配置示例如下所示:
[rbd]
rbd_store_user = glance
rbd_store_pool = images
2
3
提供了Ceph 存储中的存储池名称images和连接这个存储的用户glance,因此我们在使用Glance对接Ceph存储时,需要提前在Ceph集群中创建好存储池和用户。 然后在安装Glance组件的机器上,需要把Ceph集群的配置文件ceph.conf 和 glance用户的认证keyring文件,ceph.client.glance.keyring 放到/etc/ceph目录下,因为glance组件默认会到这个路径下寻找配置文件和认证文件。通过这两个文件才能和Ceph存储正常对接。
# Glance镜像管理
# 镜像的基本属性
镜像是创建虚拟机的模板,一般是提前安装好虚拟机,在这个模板虚拟机上安装好我们企业内部需要的一些基本软件。例如CentOS镜像我们通常会预装vim、netstat等常用的命令工具,安装好以后,把这个虚拟机做成镜像,然后上传到Glance中进行管理。 Glance管理的镜像具备下面的基本属性:
- id,镜像的id,唯一值;
- checksum,镜像的校验码,唯一值;
- name,镜像的名称
- owner,镜像的所有者
- size,镜像大小
- created_at、updated_at,镜像的创建、更新时间等;
- location,镜像的位置
- disk_format,镜像的格式,常见的有:
- raw
- qcow2
- vdi
- vmdk
- status,镜像的状态,在镜像的生命周期中有多种状态,分别是:
- queued,创建镜像时,镜像ID已经生成,但是镜像文件还在排队上传中;
- saving,镜像文件上传中;
- active,镜像上传成功,目前可用。
- killed,上传时发生错误,此时镜像不可用,在v2版本API中这个状态被废弃,上传失败后会变成queued状态便于重试;
- deleted,此时Glance还保留了这个镜像的信息,但是镜像不可用。在未来某个时间会被glance-scrubber程序彻底删除。
- pending_delete,和deleted类似,但是并不会彻底删除镜像,此时镜像还可以恢复(怎么恢复?)
- visibility,可见性
- private,私有的,
- 只有创建镜像的用户才能在默认的镜像列表中可以看到这个镜像,
- 查看镜像详情;
- 使用这个镜像启动虚拟机;
- public,公有,所有用户,
- 在默认的镜像列表中可以看到这个镜像,
- 查看镜像的详情;
- 使用这个镜像启动虚拟机;
- shared,共享的,
- 创建镜像的用户
- 在默认的镜像列表中可以看到这个镜像
- 查看镜像的详情;
- 使用这个镜像启动虚拟机;
- 用户的id在镜像的成员列表中可以
- 查看镜像的详情
- 使用这个镜像启动虚拟机;
- 用户的id在镜像的成员列表中,且member_status=="accept", *可以在他们默认的镜像列表中看到这个镜像;
- 创建镜像的用户
- community,社区
- 所有用户
- 查看镜像的详情
- 使用这个镜像启动虚拟机;
- 用户的id在镜像的成员列表中,且member_status=="accept",
- 可以在他们默认的镜像列表中看到这个镜像;
- private,私有的,
# 镜像管理操作
镜像管理有两种方式,在web页面上进行管理和使用命令行进行管理,web页面上管理比较简单,下面主要介绍命令行管理镜像,常见的操作子命令有:
- openstack image create 创建一个新镜像
- openstack image list,列出当前用户可以查看的所有镜像
- openstack image delete 删除一个镜像
- openstack image show 显示一个镜像的详情信息;
- openstack image save 把Glance中镜像导出并保存到本地;
- openstack image set/unset 给镜像设置属性或取消属性,操作的时镜像上的键值对元数据,这些数据一般用于镜像筛选过滤等操作;
- openstack image add project,把项目和镜像关联起来
- openstack image member list,显示这个镜像关联的项目数量
- openstack image remove project,从镜像上移除某个项目的关联
这些子命令的用法示例如下所示: 镜像创建
openstack image create
列出镜像
openstack image list
镜像详情
openstack image show <image-id>
镜像删除
openstack image delete <image-id>
镜像保存到本地
openstack image save --file <image-filename> <image-id>
镜像添加项目关联
openstack image add project <image-id> <project-id>
镜像项目成员查看
openstack image member list
镜像移除项目关联
openstack iamge remove <image-id> <project-id>