一、glance
1.为什么要glance?
现在自己电脑出了问题,要重装系统,会有以下步骤
1.制作一个PE启动盘
2.进行PE,选择(ISO/GHO)镜像开始安装
3.进行系统后,设置网络,安装常用软件
如果现在要为一个机房的电脑去装系统,那么会出现
- 数量太多,花费时间长,工作量大
- 安装好以后还要逐个配置
- 如果出了问题,备份和恢复不灵活
如果在云环境中有成千上万的主机需要安装系统,那太慢了,怎么办呢?
- Glance组件就可以解决这个问题
有一个CTF比赛环境需要为每台靶机都配置Centos7系统,并行里面集成了各种漏洞测试环境、各种渗透测试工具
在OpenStack中做法如下
- 先在虚拟机中自己手工安装好Centos7环境
- 然后把比赛要用到中各种的工具都放里面
- 然后把虚拟机导出成qcow2格式,做成一个模板,上传到OpenStack里去
- 下次再建立虚拟机的时候,可以直接使用这个模板来创建虚拟机
- 如果还有什么新的测试工具或者新的漏洞测试环境,可以直接加上模块虚拟机中,做一个快照
- 下次想里面新东西时,可以基于快照创建虚拟机
上面的这些功能都是由glance完成的
2.理解glance
glance的功能是,通过glance-api接收用户对镜像的增、删、查、改的请求,并管理镜像的元数据,使用后端的储存系统,来保存镜像。
3.glance架构功能
Glance-api
- 接收REST API的请求,然后通过其他模块(glance-registry及image store)来完成对镜像的上传、查找、获取、删除等操作,默认监听端口9292。
Glance-registry
- 用于与MariaDB数据库交互,用于存储或获取镜像的元数据(metadata);
- 通过glance-registry,可以向数据库中写入或获取镜像的各种数据,glance-registry监听端口9191。
Store Adapter
- 是一个后端存储系统的接口,通过这个接口,glance在这时可以对镜像进行储取
- image store支持的存储有ceph、Swift,本地文件储存,其他分布式文件存储。
4.Glance几个重要概念
镜像状态(image status)
Queued | 初始化镜像状态,在镜像文件刚刚被创建,在glance数据库中已经保存了镜像标示符,但还没有上传至后端储存中 |
---|---|
Saving | 镜像的原始数据在上传中的一种过度状态,它产生在镜像数据上传至glance的过程中 |
Active | 当镜像成功上传完毕以后的一种状态,它表明glance中可用的镜像。 |
Killed | 出现在镜像上传失败或者镜像文件不可读的情况下,glance将镜像状态设置成Killed。 |
Deleted | 表明一个镜像文件马上会被删除,只是当前glance这种仍然保留该镜像文件的相关信息和原始镜像数据。 |
Pending_delete | 类似于deleted,虽然此时的镜像文件没有删除,但镜像文件不能恢复的。 |
磁盘格式(Disk Forma)
格式类型 | 格式描述 |
---|---|
raw | 非结构化的镜像格式 |
vhd | 一种通用的虚拟机磁盘格式, 可用于Vmware、Xen、Microsoft Virtual PC/Virtual Server/Hyper-V、VirtualBox等。 |
vmdk | Vmware的虚拟机磁盘格式, 同样也支持多种Hypervisor |
vdi | VirtualBox、QEMU等支持的虚拟机磁盘格式 |
iso | 光盘存档格式 |
qcow2 | 一种支持QEMU并且可以动态扩展的磁盘格式 |
aki | Amazon Kernel 镜像 |
ari | Amazon Ramdisk 镜像 |
ami | Amazon 虚拟机镜像 |
容器格式(Container Format)
格式类型 | 格式描述 |
---|---|
bare | 没有容器的一种镜像元数据格式 |
ovf | 开放虚拟化格式 (Open Virtualization Format) |
ova | 开放虚拟化设备(Open Virtualization Appliance) |
5.glance组件的工作过程
6.Glance配置文件
api
/etc/glance/glance-api.conf
glance-API服务ip端口、安装调度、镜像后端存储、身份验证、日志位置
registry
/etc/glance/glance-registry.conf
Registry服务的网络地址、监听的端口号、glance与Registry间通信的协议、数据库连接、消息队列rabbitmq连接信息
log
/var/log/glance/registry.log
/var/log/glance/api.log
实验
使用swift作为glance的存储方式
K版
编辑配置文件
代码语言:txt复制[root@controller glance]# vim /etc/glance/glance-api.conf
#修改默认存储方式为swift,之前报错的原因就是这里没改成swift
default_store=swift
#把前面的注释打开,中间用了一个逗号隔开表示它们是stores的同一条配置项
stores=glance.store.swift.Store,
glance.store.http.Store
#swift存储认证地址,填控制节点的keystone的地址
swift_store_auth_address=192.168.150.10:5000/v2.0/
#存储用户名,填写项目名称:用户名称
swift_store_user=service:swift
#用户密码,在安装openstack应答的ans.txt文件中去搜SWIFT相关的内容
swift_store_key=a55532c6cdd941ca
#使用那个swift的容器,名字可以自己取
swift_store_container=myimages
#如果容器不存在则自动创建
swift_store_create_container_on_put=True
#单个文件的最大大小,单位MB
swift_store_large_object_size=10240
RDO版
编辑配置文件
代码语言:txt复制#设置默认存储
default_store=swift
#存储类型
stores=file,http,swift
#存储容器,自动创建,注意大小写
swift_store_create_container_on_put=true
swift_store_container=myimages
#单个文件大小
swift_store_large_object_size=10240
#注意这里版本是3,不是2,可以参照/root/keystonerc_admin文件内容
swift_store_auth_version=3
swift_store_auth_address=http://192.168.150.10:5000/v3
#项目名称和密码
swift_store_user=services:swift
swift_store_key=560699fead294ca5
重启服务
代码语言:txt复制systemctl restart openstack-glance-api.service
上传镜像
- 在admin里面上传镜像测试,为了保证权限充足,admin组中加入glance和swift用户
[root@controller glance]# tailf /var/log/glance/api.log
#没找到myimages容器
2019-12-11 11:09:55.155 28432 TRACE swiftclient File "/usr/lib/python2.7/site-packages/swiftclient/client.py", line 685, in head_container
2019-12-11 11:09:55.155 28432 TRACE swiftclient http_response_content=body)
2019-12-11 11:09:55.155 28432 TRACE swiftclient ClientException: Container HEAD failed: http://192.168.150.10:8080/v1/AUTH_2ba3cf54d30c4055a901e5b6ded2c96e/myimages 404 Not Found
2019-12-11 11:09:55.155 28432 TRACE swiftclient
2019-12-11 11:09:55.156 28432 INFO glance_store._drivers.swift.store [381a6450-8096-4192-8a0f-b7a44bc8241a
------------------------------------------------------------------------------------------------------------------------
#自动创建myimages容器
5a5306abff4c4db19fe935b27cfbc29d 2ba3cf54d30c4055a901e5b6ded2c96e - - -] Creating swift container myimages
2019-12-11 11:09:57.825 28432 INFO glance.wsgi.server [381a6450-8096-4192-8a0f-b7a44bc8241a 5a5306abff4c4db19fe935b27cfbc29d 2ba3cf54d30c4055a901e5b6ded2c96e - - -] 192.168.150.10 - - [11/Dec/2019 11:09:57] "HEAD /v1/images/c269c908-85c8-496e-be79-cf446c32d5dc HTTP/1.1" 200 724 0.025709
------------------------------------------------------------------------------------------------------------------------
#上传镜像成功
2019-12-11 11:10:04.619 28432 INFO glance.api.v1.images [381a6450-8096-4192-8a0f-b7a44bc8241a 5a5306abff4c4db19fe935b27cfbc29d 2ba3cf54d30c4055a901e5b6ded2c96e - - -] Uploaded data of image c269c908-85c8-496e-be79-cf446c32d5dc from request payload successfully.
- 查看对象存储数据的位置
[root@controller objects]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 41153760 4694324 34345900 13% /
devtmpfs 2966508 0 2966508 0% /dev
tmpfs 2976304 84 2976220 1% /dev/shm
tmpfs 2976304 17420 2958884 1% /run
tmpfs 2976304 0 2976304 0% /sys/fs/cgroup
/dev/sda1 487634 85777 372161 19% /boot
tmpfs 2976304 17420 2958884 1% /run/netns
/dev/loop0 1900368 610740 1168388 35% /srv/node/swiftloopback
#就是在/srv/node/swiftloopback下面了
- 去到对象存储文件夹,查看数据结构
[root@controller /]# cd /srv/node/swiftloopback/objects
[root@controller objects]# tree 19787/
19787/
├── cf3
│ └── 1352f04d2e39df25a08b0e87298b5cf3
│ └── 1576033795.21699.data
└── hashes.pkl
2 directories, 2 files
- 查看具体文件大小信息
[root@controller objects]# ls -lhR 19787/
19787/:
总用量 8.0K
drwxr-xr-x 3 swift swift 4.0K 12月 11 11:10 cf3
-rw------- 1 swift swift 48 12月 11 11:10 hashes.pkl
19787/cf3:
总用量 4.0K
drwxr-xr-x 2 swift swift 4.0K 12月 11 11:10 1352f04d2e39df25a08b0e87298b5cf3
19787/cf3/1352f04d2e39df25a08b0e87298b5cf3:
总用量 591M
-rw------- 1 swift swift 591M 12月 11 11:10 1576033795.21699.data