云主机镜像不同于容器镜像,是一个含有引导分区、操作系统以及必要应用的单一文件,可以理解成是对整个系统安装光盘所有数据的克隆文件。云用户在创建和申请云主机时可通过选择不同的镜像来快速获取相应操作系统的云主机。
在传统的IT环境中,对于每一台主机安装系统都需要系统的镜像文件从头开始安装。但这些方式都存在以下的一些问题:当需要安装的系统数较多时,需要的时间久且效率低下;安装完成后需要对每台主机此意进行配置,如配置IP等操作;备份与恢复系统不够灵活。云环境下提供了更加高效的解决方案,就是使用镜像(Image)。Image是一个模板,里面包含了基本的操作系统和其他的软件及配置信息等。
Cloud OS 兼容CAS、VMware等虚拟化平台,其中在适配CAS 虚拟化平台时支持使用QCOW2(QEMUcopy-on-write version 2)和RAW两种格式的镜像文件。raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来管理的。qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像,也可以用一个文件的形式来表示一块固定大小的块设备磁盘。
通常一个QCOW2格式的镜像文件具有头文件、L1表、refcount表、一个或者多个refcount块、快照头、L2表和数据簇。其中L1表、refcount表和快照偷偷的第一个头为簇对齐。对于QCOW2镜像格式,磁盘设备的内容保存在簇中。每一个簇包含多个512字节的扇区。为了将给定的地址定位到簇的地址,必须要遍历L1表和L2表。L1表中存储了一组到L2表的偏移值,而L2表中存储了一组到簇的偏移值。QCOW2相对于上一代QCOW有以下不同之处:QCOW2支持快照概念,QCOW1仅支持copy-on-write镜像的概念;QCOW2中引用了引用计数的概念,并引用计数用来支持快照的概念;QCOW2中L2表总是可以占据一个单独的簇,而之前簇的大小在头l2_bits中被指定;QCOW2压缩簇的大小以扇区为单位,而非字节为单位。
QCOW2和RAW两种格式可以互相转化。与普通的 raw 格式的镜像相比,QCOW2格式的镜像有以下特性:QCOW2更小的空间占用,但RAW相比QCOW2 格式的镜像具有I/O 效率高的特点;QCOW2支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化;QCOW2支持快照(snapshot),镜像文件能够包含多个快照的历史;QCOW2可选择基于 zlib 的压缩方式;QCOW2可以选择 AES 加密。
云管理平台基于业界标准的OpenStack, OpenStack架构具体如图2.1所示。
图2.1 OpenStack基础架构图
OpenStack架构中有Nova、Neutron、Horizon、Ceilometer、Keystone、Swift。其中Nova为VM提供计算资源;Glance为VM提供镜像;Cinder为VM提供块存储资源;Neutron为VM提供网络资源及网络连接;Horizon(Dashboard)与其他主要模块的关联(包括Nova,Cinder,Glance,Swift,Neutron,Keystone);通过Ceilometer(监控功能)可以监控的模块(包括Nova,Glance,Cinder,Neutron);Keystone(身份验证功能)模块可以对其他模块进行相应操作进行身份及权限验证(包括Nova,Glance,Cinder,Swift,Neutron,Ceilometer); Swift对象存储保存Cinder连接VM后所产生的备份数据及Glance提供的镜像文件。
在OpenStack架构中由Glance提供镜像服务(Image Service)。
Glance架构如图2.2所示。
图2.2 glance结构图
glance组件中主要有glance-api、glance-registry、glance的数据库和image store。
glance-api接收REST API的请求,在功能上与nova-api十分类似,都是接收REST API请求,然后通过其他模块(glance-registry及image store)来完成诸如镜像的查找、获取、上传、删除等操作,默认监听端口为9292。
glance-registry用于与MySQL数据库交互,用于提供镜像元数据相关的REST接口,通过glance-registry可以向数据库中写入或获取镜像的各种数据,glance-registry监听端口为9191。
glance的数据库中有两张表,一张是image表,另一张是image property表。Image表保存了镜像格式、大小等信息;image property表则主要保存镜像的定制化信息。
image store是一个存储的接口层,是镜像保存与获取的接口,它仅仅是一个接口层,具体的实现需要外部的存储支持,目前,支持的接口有Amazon S3、GlusterFS、Swift,sheepdog,ceph分布式存储等。
本文主要介绍适用于CAS虚拟化平台的H3Cloud OS3.0制作云主机镜像的方法,下文中的例子是镜像文件是安装Windows操作系统。
首先在CAS管理平台新建虚拟机,若安装Windows操作系统,则在新建虚拟机页面选择对应的Windows操作系统版本;若安装Linux操作系统,则在新建虚拟机页面选择对应的Linux操作系统版本。
图3.1 CAS虚拟化平台新建虚拟机
上传操作系统镜像文件至主机本地存储或共享存储,修改虚拟机,选择光驱,选择连接要安装的操作系统镜像文件。启动虚拟机并进入虚拟机控制台安装操作系统。
图3.2 上传操作系统文件
图3.3 虚拟机挂载操作系统镜像文件
注意:安装完操作系统设置账号密码时不要设有特殊字符,当密码中有特殊字符时可能导致Cloud OS系统平台无法成功新建镜像。
修改虚拟机,选择光驱,断开与操作系统镜像文件的连接。选择文件类型为CASTools,连接CASTools安装文件,进入虚拟机控制台安装CASTools。
图3.4 虚拟机断开操作系统镜像文件的连接
图3.5 虚拟机连接CASTools安装文件
安装完CASTools后,在修改虚拟机界面断开与CASTools安装文件的连接。在下载虚拟机镜像或上传虚拟机镜像前要先关闭虚拟机,避免虚拟机镜像文件的md5值发生变化。
在虚拟机所在的主机的default存储池中下载对应的虚拟机镜像文件,虚拟机镜像文件的使用者为对应的虚拟机,并可以看到具体镜像文件的大小,文件类型。
图3.6 下载制作好的虚拟机镜像文件
上传云主机镜像有两种方式:本地上传和服务器上传。对于超过5G的镜像,一般通过FTP进行服务器上传。
进入云服务中的镜像界面,选择新建镜像,填写镜像名,选择镜像的镜像格式和虚拟化类型,选择对应的操作系统类型和版本,填写的最小磁盘的值不可以小于镜像文件的大小。上传方式选择本地上传,并从本地选择镜像,界面会提示大于5G的文件需要通过服务器来上传。
使用root账号登录CAS主机后台,根据在CAS页面查看到的VIP02镜像文件的目录为/vms/images,进入到该目录下并通过ll命令检验镜像文件在这个目录下。
图3.8 查看虚拟机镜像文件目录
图3.9ssh远程登录到cvk主机后台进入镜像文件所在目录下
在/vms/images目录下ftp到Cloud OS的IP,并输入pass再回车,提示“Passive mode on.”进入被动模式,再通过put vip02将虚拟机镜像文件上传至Cloud OS后台。且ftp登录用户应该为admin用户,而不是后台(root用户),否则前台可能识别不到该文件。等待1-2min至镜像上传完毕。
图3.10 在镜像文件目录下ftp上传镜像文件至cloudos
Cloud OS新建镜像选择服务器上传镜像为了避免文件上传不完整需要填写md5值进行校验。对镜像文件进行md5值的计算有两种种方式:在CAS本地目录下进行镜像文件的md5值校验;下载md5值计算工具,在本地对镜像文件进行md5值的计算。将计算得到的md5值填写到新建镜像页面。
在CAS本地目录下进行镜像文件的md5值校验:先进入镜像文件所在的目录,“md5sum 文件名”命令计算镜像文件的md5值。注意,需要关闭虚拟机再计算md5值,开启状态的虚拟机的镜像文件的md5值会发生变化。
图3.12在cvk后台对镜像文件进行md5值计算
下载md5值计算工具,在本地对镜像文件进行md5值的计算。首先在新建镜像。服务器上传下图中下载md5值计算工具,在添加本地下载的镜像文件,计算出md5值。
图3.14通过md5值计算工具计算镜像文件的md5值
在Cloud OS新建镜像文件有时会出现任务台新建镜像已执行,但是前台页面并没有新增镜像文件的情况的出现。出现这样问题的原因是新增云主机镜像失败,任务台只会显示动作是否执行,但是并不代表任务成功。失败的原因可能有md5值不正确,glance空间不足或者用户的登录密码含有特殊字符。
当新建云主机镜像失败后,可先检查操作系统的密码是否含有特殊字符,若有,则对密码进行修改;若没有在CloudOS后台查看文件的md5值,与本地镜像通过md5值计算工具和cvk后台计算得到的md5值进行对比,若不一致,则重新进行上传;若一致,则有可能是glance空间不足。
可以通过在Cloud OS的目录下找到ftp上传的文件存储路径,进入到该路径下进行md5值校验:在Cloud OS的目录下先通过“find / -name vip02 ”找到ftp上传的文件存储路径为/var/lib/ftp_server/admin,进入到该路径下进行md5值计算。若镜像上传完整,计算得到的md5值应该与前面两种方式计算得到的md5值一致。另,若是给集群模式的Cloud OS环境,在通过ftp传镜像文件到Cloud OS后台时,文件会存放在运行glance服务的节点的文件路径/var/lib/ftp_server/admin下,并不一定会存放在master节点下。
先运行source /opt/bin/common/tool.sh命令,再通过命令pod | grep glance 查看glance容器所在节点的IP。
图3.15 查找glance容器运行所在的节点IP
图3.16CloudOS后台查找ftp上传的文件并计算md5值
完成新建镜像之后,可以在Cloud OS后台查看到在/var/lib/glance/images/目录下有了新的镜像文件,文件名即为该镜像的ID。
图3.17 在CloudOS后台查看新建云主机镜像信息
本文主要介绍了云主机镜像是一个含有引导分区、操作系统以及必要应用的单一文件,是为了解决传统IT环境中需要给每台虚拟机安装操作系统,耗费时间久、效率低的背景下提出的,也介绍了镜像文件常用的格式为QCOW2,其具有占用磁盘空间小的特点。介绍了OpenStack和为虚拟机提供镜像文件的组件glance基础架构及各组件的作用。主要详细介绍了云主机镜像的制作过程及过程中的注意事项,例如在给虚拟机安装完操作系统和CASTools后,在确定CASTools运行的前提下关闭虚拟机,防止出现镜像文件的md5值发生变化而造成新增云主机镜像失败的情况;将镜像文件通过ftp上传至Cloud OS时,需要先用root账户ssh登录cvk主机,用CloudOS的前台账号(admin)进行ftp连接登录,否则前台页面可能识别不到上传上去的文件,不要混淆。