文章目录
[隐藏]

相对于Windows镜像制作,Linux镜像制作略微简单,制作教程较为丰富,Openstack插件也相对成熟,本文主要参考Openstack官网,在Linux图形化环境下,利用virt-manager制作CentOS7.3镜像。

一、镜像及工具准备

CentOS7.3安装镜像:CentOS-7-x86_64-DVD-1611.iso

Acpid、Cloud-init、Cloud-utils-growpart等软件直接yum源安装即可

二、镜像制作

创建一个15GB的CentOS镜像盘

利用virt-install加载配置

利用virt-manager安装操作系统

选择光盘启动

启动后,进入安装界面

安装位置及分区这里要注意,磁盘分区选择标准磁盘分区,文件系统类型可以是XFS或EXT4,本人在测试了CentOS7 采用LVM磁盘管理方式,制作镜像后创建虚拟机均无法扩展分区,结果详见附录部分。

常规配置完成后进入安装,安装完成后重启,进入操作系统后,设置网卡为DHCP模式。

为保证宿主机能够对虚拟机进行重启、关机等操作,需要在镜像中安装Acpid服务,命令如下:

为能够获取Openstack的元数据服务,从而对虚拟机进行主机名、SSH等相关配置,安装Cloud-init,如下:

如果默认允许Root SSH密码访问,需要修改cloud-init配置文件/etc/cloud/cloud.cfg

此外,如果不允许虚拟机重启后恢复初始的主机名,允许意味着虚拟机重启后会修改已经更改的主机名为初始值,这对某些依赖hostname的应用非常不利,这里需要禁用cloud-init的更新主机名配置,即删除或注释update_hostname配置

为保证磁盘的根分区能够动态调整大小,安装Cloud-utils-growpart

为保证能够获取元数据服务,需禁止零配置路由

为保证利用nova console-log命令或在Dashboard中能够获得虚拟机的日志信息,需修改GRUB引导程序配置。编辑/etc/default/grub配置文件,删除rhgb quiet,并增加console=tty0 console=ttyS0,115200n8配置项,配置项如下:

执行以下命令保存配置项:

完成配置,关闭系统。

在制作环境服务器上清除镜像制作过程中产生的/etc/sysconfig/network-scripts/ifcfg-eth0、/etc/udev/rules.d/70-persistent-net.rules网卡等信息,这是因为虚拟机创建后都会生成不同的MAC地址。

镜像制作完毕,清除libvirt中正在编辑镜像的域名,清除后在virt-manager中不会显示

三、验证操作

格式转换并上传镜像

创建虚拟机,检查新创建虚拟机的磁盘、网络等是否正常。

在测试镜像时,遇到了一个错误:

本来以为是镜像制作的问题,后来发现这是一个bug,虚拟机名称需要符合RFC 1123和RFC 952,不允许“.数字”结尾,具体请参考https://bugs.launchpad.net/nova/+bug/1581977

四、【附】讨论及实用脚本

1、讨论

考虑到LVM磁盘管理比较灵活,另外社区镜像制作文档中也说明LVM磁盘分区没有问题,但本人采用了LVM磁盘分区测试了多个CentOS镜像制作,CentOS7下采用LVM分区方式创建虚拟机后根分区大小均没有自动扩展,测试结果如下:

版本 分区方式 分区情况 根分区自动扩展 备注
CenOS 6.8 i386 LVM /boot、/swap(lvm)、/(lvm) 成功 分区扩展工具为linux-rootfs-resize
CenOS 7.1 x86_x64 标准分区 / 成功 cloud-utils-growpart
CenOS 7.2 i386 LVM /boot、/swap(lvm)、/(lvm) 失败 在epel7中未找到cloud-utils-growpart安装包,安装Fedora 25 for i386安装包
/boot、/(lvm) 失败
标准分区 / 失败
CenOS 7.2 x86_x64 LVM /boot、/swap(lvm)、/(lvm) 失败 cloud-utils-growpart
/boot、/(lvm) 失败
标准分区 / 成功
CenOS 7.3 x86_x64 LVM /boot、/swap(lvm)、 失败 cloud-utils-growpart
/(lvm) 失败
标准分区 / 成功

cloud-init源码中resizefs模块中支持多种xfs/ext/btrfs等文件系统的制动扩展,文件系统格式与自动扩展不成功没有关系。 此外,查看了阿里云、腾讯云的CentOS镜像,均未采用LVM分区,cloud-init、cloud-utils-growpart是不支持LVM分区的自动扩展?

(这些文档中有提及No LVM  )

https://www.ibm.com/support/knowledgecenter/en/SS4KMC_2.5.0/com.ibm.ico.doc_2.5/c_adding_cloud_init_to_linux_ima.html

https://platform9.com/support/file-system-resize-issues-with-scientific-linux-6-x-cloud-init-0-7-4/

https://bugzilla.redhat.com/show_bug.cgi?id=1343571

2、实用脚本

镜像配置脚本

镜像格式转换、镜像上传、创建虚拟机脚本

五、参考文档

https://git.launchpad.net/cloud-init

http://www.cnblogs.com/resn/p/6207715.html

https://docs.openstack.org/image-guide/centos-image.html

https://www.rdoproject.org/resources/creating-centos-and-fedora-images-ready-for-openstack/