OpenStack 由 Glance 提供 Image 服务html
获取镜像位置mysql
https://docs.openstack.org/image-guide/obtain-images.html#centoslinux
要理解 Image Service,先得搞清楚什么是 Image 以及为何要用 Image?web
在传统 IT 环境下,安装一个系统要么从安装 CD 从头安装,要么用 Ghost 等克隆工具恢复。这两种方式有以下几个问题:redis
云环境下须要更高效的方案,这就是 Image。 Image 是一个模板,里面包含了基本的操做系统和其余的软件。sql
举例来讲,有家公司须要为每位员工配置一套办公用的系统,通常须要一个 Win7 系统再加 MS office 软件。 OpenStack 是这么玩的:vim
在这个过程当中,第 1 步跟传统方式相似,须要手工操做和必定时间,但第 二、3 步很是快,全自动化,通常都是秒级别。并且 二、3 步能够循环作。 好比公司新上了一套 OA 系统,每一个员工的 PC 上都得有客户端软件。 那么能够在某个现有虚机中先手工安装好 OA 客户端,而后执行 snapshot 操做,获得新的 image,之后能够就直接使用新 image 建立虚机了。另外,snapshot 还有备份的做用,可以很是方便的恢复系统。centos
Image Service 的功能是管理 Image,让用户可以发现、获取和保存 Image。在 OpenStack 中,提供 Image Service 的是 Glance,其具体功能以下:api
glance-api 是系统后台运行的服务进程。 对外提供 REST API,响应 image 查询、获取和存储的调用。bash
glance-api 不会真正处理请求。 若是操做是与 image metadata(元数据)相关,glance-api 会把请求转发给 glance-registry; 若是操做是与 image 自身存取相关,glance-api 会把请求转发给该 image 的 store backend。
在控制节点上能够查看 glance-api 进程
glance-registry 是系统后台运行的服务进程。 负责处理和存取 image 的 metadata,例如 image 的大小和类型。在控制节点上能够查看 glance-registry
Glance 支持多种格式的 image,包括
(1)RAW即常说的裸格式,它其实就是没有格式,最大的特色就是简单,数据写入什么就是什么,不作任何修饰,因此在性能方面很不错,甚至不须要启动这种镜像的虚拟机,只须要把文件挂载,便可直接读写内部数据。而且因为RAW格式简单,所以RAW和其余格式之间的转换也更容易。在KVM的虚拟化环境下,有不少使用RAW格式的虚拟机。
(2)qcow2
qcow2是qcow的升级版本,它是QEMU的CopyOn Write特性的磁盘格式,主要特性是磁盘文件大小能够随着数据的增长而增加。譬如建立一个10GB的虚拟机,实际虚拟机内部只用了5GB,那么初始的qcow2磁盘文件大小就是5GB。与RAW相比,使用这种格式能够节省一部分空间资源。
(3)VHD
VHD也是一种通用的磁盘格式。微软公司的Virtual PC和Hyper-V使用的就是VHD格式。VirtualBox也提供了对VHD格式的支持。若是要在OpenStack上使用Hyper-V的虚拟化,就应该上传VHD格式的镜像文件。
(4)VMDK
VMware建立的一个虚拟机磁盘格式,目前也是一个开放的通用格式,除了VMware自家的产品外,QEMU和VirtualBox也提供了对VMDK格式的支持。
(5)VDI
Oracle公司的VirtualBox虚拟软件所使用的格式。
(6)ISO
ISO是指一种存档数据文件在光盘上的格式。
(7)AKI、ARI、AMI
Amazon公司的AWS所使用的镜像格式。
Image 的 metadata 会保持到 database 中,默认是 MySQL。 在控制节点上能够查看 glance 的 database 信息
Glance 本身并不存储 image。 真正的 image 是存放在 backend 中的。 Glance 支持多种 backend,包括:
具体使用哪一种 backend,是在 /etc/glance/glance-api.conf 中配置的
在咱们的 devstack 环境中,image 存放在控制节点本地目录 /var/lib/glance/images/中
其余 backend 的配置可参考http://docs.openstack.org/liberty/config-reference/content/configuring-image-service-backends.html
查看目前已经存在的 image
查看保存目录
[root@controller ~]# ls /var/lib/glance/images/ a86d1a0c-c388-4702-aaa6-be045cb234c1
每一个 image 在目录下都对应有一个文件,文件以 image 的 ID 命名
OpenStack 为终端用户提供了 Web UI(Horizon)和命令行 CLI 两种交换界面。
可能有些同窗以为既然有更友好的 Web UI 了,干吗还要用 CLI? 这里 给出下面的理由:
第一步:admin 登陆后,Project -> Compute -> Images
第二步:建立镜像
若是勾选共有,该 image 能够被其余 Project 使用 若是勾选受保护的是,该 image 不容许被删除。
第三步:查看建立的镜像
第四步:查看cirros详细信息,点击cirros
cirros 这个 linux 镜像很小,经过 Web UI 上传很快,操做会很顺畅。但若是咱们要上传的镜像比较大(好比好几个 G ),那么操做会长时间停留在上传的 Web 界面,咱们也不知道目前到底处于什么状态。 对于这样的操做,CLI 是更好的选择。
[root@controller tmp]# glance image-create --name cirros1 --file /tmp/cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --progress
[=============================>] 100% +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | f8ab98ff5e73ebab884d80c9dc9c7290 | | container_format | bare | | created_at | 2019-06-07T16:19:58Z | | disk_format | qcow2 | | id | a218e386-bd4d-43df-a7d4-2128cb906f51 | | min_disk | 0 | | min_ram | 0 | | name | cirros1 | | owner | 3c48d267eaa14f44a7cacd7e88bb46b7 | | protected | False | | size | 13267968 | | status | active | | tags | [] | | updated_at | 2019-06-07T16:19:59Z | | virtual_size | None | | visibility | shared | +------------------+--------------------------------------+
在建立 image 的 CLI 参数中咱们用 –progress 让其显示文件上传的百分比 %,是否是比 Web UI更直观呢?
在 /var/lib/glance/images/ 下查看新的 Image
[root@controller tmp]# ls /var/lib/glance/images/ a218e386-bd4d-43df-a7d4-2128cb906f51 fe4bca11-d413-4282-9dd6-08941cae5ba8
web查看
OpenStack 服务都有本身的 CLI。
命令很好记,就是服务的名字,好比 Glance 就是 glance,Nova 就是 nova。
但 Keystone 比较特殊,如今是用 openstack 来代替老版的 keystone 命令。
不一样服务用的命令虽然不一样,但这些命令使用方式却很是相似,能够触类旁通。
1. 执行命令以前,须要设置环境变量。
这些变量包含用户名、Project、密码等; 若是不设置,每次执行命令都必须设置相关的命令行参数
2. 各个服务的命令都有增、删、改、查的操做
其格式是
CMD <obj>-create [parm1] [parm2]… CMD <obj>-delete [parm] CMD <obj>-update [parm1] [parm2]… CMD <obj>-list CMD <obj>-show [parm
例如 glance 管理的是 image,那么:
CMD 就是 glance,obj 就是 image,对应的命令就有
glance image-create glance image-delete glance image-update glance image-list glance image-show
再好比 neutron 负责管理网络和子网,那么:
CMD 就是 neutron;obj 就是 net 和 subnet 对应的命令就有
网络相关操做
neutron net-create neutron net -delete neutron net -update neutron net -list neutron net –show
子网相关操做
neutron subnet-create neutron subnet -delete neutron subnet -update neutron subnet -list neutron subnet–show
有的命令 <obj> 能够省略,好比 nova 下面的操做都是针对 instance
nova boot
nova delete
nova list
nova show
3. 每一个对象都有 ID
delete,show 等操做都以 ID 为参数,例如
4. 可用 help 查看命令的用法
除了 delete,show 等操做只须要 ID 一个参数,其余操做可能须要更多的参数,用 help 查看所需的参数,格式是
CMD help [SUB-CMD]
例如查看 glance 都有哪些 SUB-CMD
查看 glance image-update 的用法
OpenStack 排查问题的方法主要是经过日志,Service 都有本身单独的日志。Glance 主要有两个日志,glance_api.log 和 glance_registry.log,保存在/var/log/glance 目录里。
[DEFAULT] [cors] [cors.subdomain] [database] connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance [glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/ [image_format] [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = glance [matchmaker_redis] [oslo_concurrency] [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_messaging_zmq] [oslo_middleware] [oslo_policy] [paste_deploy] flavor = keystone [profiler] [store_type_location_strategy] [task] [taskflow_executor]
vim /etc/glance/glance-registry.conf
[DEFAULT] [database] connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = glance [matchmaker_redis] [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_messaging_zmq] [oslo_policy] [paste_deploy] flavor = keystone [profiler]