Chapter 5 镜像服务(Image service)
5.1 镜像服务的概念
OpenStack镜像服务能够使用户发现、注册(导入)、查询虚拟机镜像。它通过REST API来查询虚拟机镜像的元数据从而获取镜像文件。这里镜像服务安装在控制节点上,默认存储镜像的路径为/var/lib/glance/images/,可以在/etc/glance/glance-api.conf文件来修改路径参数filesystem_store_datadir。注意,镜像文件将存放在之前配置的共享存储上。
OpenStack镜像服务包括以下几个组件:
glance-api:接受关于镜像发现、检索、存储的API调用
glance-registry:存储、处理和检索关于镜像的元数据,元数据包括如大小,类型等选项
数据库
镜像文件存储仓库
5.2 安装配置镜像服务(Image service)
5.2.1 配置预先环境
1. 创建镜像服务数据库、用户及权限:
[root@controller ~]# mysql -uroot -piforgot
MariaDB [(none)]> CREATE DATABASE glance;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glancepw';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glancepw';
MariaDB [(none)]> flush privileges;
2. 创建镜像服务用户、角色、服务实体以及API终端:
[root@controller ~]# source admin-openrc.sh
[root@controller ~]# openstack user create --password glancepw glance
[root@controller ~]# openstack role add --project service --user glance admin
[root@controller ~]# openstack service create --name glance \
--description "OpenStack Image service" image
[root@controller ~]# openstack endpoint create \
--publicurl http://controller:9292 \
--internalurl http://controller:9292 \
--adminurl http://controller:9292 \
--region RegionOne \
image
5.2.2 安装配置镜像服务组件
1. 安装相关软件包:
[root@controller ~]# yum -y install openstack-glance python-glance python-glanceclient glusterfs-fuse
由于镜像文件存储在GluterFS存储系统发布的共享空间里,所以需要安装glusterfs-fuse客户端。
2. 编辑/etc/glance/glance-api.conf文件:
[root@controller ~]# cp /etc/glance/glance-api.conf{,.bak}
[root@controller ~]# > /etc/glance/glance-api.conf
[root@controller ~]# vi /etc/glance/glance-api.conf
[DEFAULT]
notification_driver = noop
verbose = True
[database]
connection = mysql://glance:glancepw@controller/glance
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = glancepw
[paste_deploy]
flavor = keystone
[glance_store]
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
backup-volfile-servers = compute2
另外,根据设置需求将glusterfs文件系统设置为开机自动挂载:
[root@controller ~]# vi /etc/fstab
compute1:/glance-volume /var/lib/glance/images glusterfs defaults,_netdev 0 0
3. 编辑/etc/glance/glance-registry.conf文件:
[root@controller ~]# cp /etc/glance/glance-registry.conf{,.bak}
[root@controller ~]# > /etc/glance/glance- registry.conf
[root@controller ~]# vi /etc/glance/glance- registry.conf
[DEFAULT]
notification_driver = noop
verbose = True
[database]
connection = mysql://glance:glancepw@controller/glance
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = glancepw
[paste_deploy]
flavor = keystone
4. 填充镜像服务数据库:
[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance
5. 启动镜像服务并将其设置为开机自启:
[root@controller ~]# systemctl start openstack-glance-api openstack-glance-registry
[root@controller ~]# systemctl enable openstack-glance-api openstack-glance-registry
5.3 虚拟机镜像介绍
虚拟机镜像(virtual machine image)其实就是一个单独的文件,包含一个已安装了可引导的操作系统的磁盘。虚拟机镜像可以是多种格式(后面章节将介绍如何进行格式转换):
Raw:原始镜像是最简单的格式,KVM和Xen Hypervisor都可以支持这种格式。可以认为它就是一个块设备文件。这里不推荐使用dd命令生成一个块设备文件来创建原始镜像
qcow2:qcow2(QEMU copy-on-write version 2)是KVM hypervisor最常用的一种镜像格式。它具有一些原始镜像所不具备的特性:
使用稀疏表示(sparse representation),使镜像文件更小,这也意味着在上传时速度更快
支持快照功能,因此在必要时OpenStack会自动将原始镜像(raw image)转换成qcow2格式
VMDK:VMware ESXi使用VMDK镜像格式
VDI:VirtualBox使用VDI镜像格式
ISO:ISO是标准的磁盘镜像格式,通过CD或DVD来启动系统
5.3.1 磁盘镜像格式
虚拟机镜像磁盘格式其实就是底层磁盘镜像格式。虚拟厂商提供了不同的格式,常见的有:
raw:一种非结构化的磁盘镜像格式,如果一个文件不具备扩展性,它可能就是原始格式(raw format)
qcow2:QEMU仿真器(emulator)所支持的、可动态扩展并可进行拷贝(Copy on Write)的格式
5.4 手动创建镜像
获得镜像最快的方式就是下载官方发布的镜像文件、或者别人已创建的镜像文件。如果需要定制个性化的镜像文件,可根据需求手动创建镜像文件。
5.4.1 预设环境
在使用libvirt启动一台虚拟机之前,确认libvirt默认网络"default"是否已开启,这个网络必须是激活状态,并能连接到网络。通过virsh net-list命令来进行查看:
[root@test_env ~]# virsh net-list
Name State Autostart Persistent
------------------------------------------------------------------------------
default active yes yes
如果网络没有启动,可以通过下面命令将其开启:
[root@test_env ~]# virsh net-start default
注意,test_env是实验环境的宿主机,安装了CentOS6.5-x86_64系统,因此支持KVM虚拟机创建。
5.4.2 使用virt-manager X11 GUI图像界面安装CentOS虚拟机
如果使用图形界面进行虚拟机的安装,可以通过virt-manager命令开启图形配置界面来设置虚拟机安装所需参数:
[root@test_env ~]# virsh manager
接下来配置安装环境,这里安装的操作系统是CentOS6.5 x86_64:
存放位置为/var/lib/libvirt/images/目录下,名称为CentOS6-x86_64-test.img。
启动虚拟机后,通过图形界面完成操作系统的安装:
重启之后,需要完成下面几个步骤:
清空/etc/udev/rules.d/70-persistent-net.rules文件的内容
(如有该文件的话)清空/lib/udev/rules.d/75-persistent-net-generator.rules文件的内容,该文件用于生成上面的70-persistent-net.rules文件
移除/etc/sysconfig/network-scripts/ifconfigeth0中配置参数HWADDR和UUID,并确认参数ONBOOT为yes
另外,如有必要请关闭防火墙和SELinux服务
5.4.3 上传镜像到OpenStack镜像服务
首先将宿主机上的镜像文件上传到控制节点,然后通过glance命令创建OpenStack Image:
[root@test_env ~]# cd /var/lib/libvirt/images/
[root@test_env images]# scp CentOS6-x86_64-test.img 10.0.0.11:~
[root@test_env images]# ssh 10.0.0.11
[root@controller ~]# source admin-openrc.sh
[root@controller ~]# glance image-create --name "CentOS6-x86_64-test" --file CentOS6-x86_64-test.img \
--disk-format qcow2 --container-format bare --visibility public --progress
[root@controller ~]# glance image-list
| ID | Name |
| 534d920c-02eb-4c17-beb9-918650e92bb9 | CentOS6-x86_64-test |
5.5 修改镜像文件
当获取了一个镜像文件,在上传到OpenStack Image服务之前可能需要对其进行修改,这时需要使用特定工具来执行。
5.5.1 guestfish
guestfish是一个出自libguestfs项目用于修改虚拟机内部文件的工具。guestfish不能直接将镜像文件挂载到本地文件系统,取而代之,它提供了一个shell交互接口,允许用户查看、编辑、删除文件等操作。
其功能在于,当需要修改一些配置信息(而不是直接启动虚拟机来进行修改),通过它来完成更加地方便实用。例如在上传镜像文件到OpenStack镜像服务时,需要修改一些特定的文件,包括清空/etc/udev/rules.d/70-persistent-net.rules等:
[root@controller ~]# guestfish --rw -a CentOS6-x86_64-test.img
><fs> run
><fs> list-filesystems
/dev/sda1: ext4
/dev/vgsys/lvroot: ext4
/dev/vgsys/lvswap: swap
><fs> mount /dev/vgsys/lvroot /
><fs> vi /etc/udev/rules.d/70-persistent-net.rules
(清空文件内容,然后rw保存退出)
...
><fs> vi /etc/sysconfig/network-scripts/ifcfg-eth0
...
ONBOOT=yes
BOOTPROTO=dhcp
...
><fs> exit