虚拟机镜像的制作,是私有云定制化必要的工作之一。每个业务都有自己定制的系统配置,比如磁盘的划分、系统组件的配置等等。可以说虚拟机镜像就是虚拟机的模板。
虚拟机镜像在制作过程,就要预先把自己的系统参数优化好,系统服务先安装上,甚至也会把业务软件安装上。所以这个镜像生成后,一件部署虚拟机就包含了所有组件,软件都不用安装了。这样的使用场景在我们使用公有云产品的时候就见到了,几乎所有的云平台都提供WEB服务器、数据库服务器等等,就是预先把WEB软件或者数据库软件安装在镜像中,当你生成虚拟机实例后,软件也就生成了。当然这不是唯一快速安装部署软件的方法,还有比如使用注入文件自动化下载安装软件的方式。
本文就讲解如何制作一个Openstack的镜像
以redhat 操作系统为例,redhat系统也是在VMWare上装一个虚拟机搞定。
宿主机(制作镜像的机器)操作
1、思路
首先,创建KVM虚拟机,并按照正常物理机的方式安装操作系统及相关服务的设置,并根据应用的需要安装依赖和软件等
然后,为虚拟机安装电源管理、日志打印、分区自动扩展、主机名和IP地址自动设置等相关组件及服务以便更好被openstack支持。
2、安装制作软件
安装虚拟机组件并启动libvirt服务
yum groupinstall Virtualization "Virtualization Client" -yyum install libvirt –yservice libvirtd restart
准备工作目录并创建虚拟机所需要的硬盘镜像文件
mkdir openstack-imagecd openstack-imageqemu-img create -f qcow2 rhel66-kvm.qcow2 100Gchown qemu:qemu /home/openstack-image/ -R
创建并启动虚拟机(注意,这里需要VNC支持)
virt-install -n rhel66-kvm -r 40960 --cpu host -c /home/RHEL6u6-x64-EMS-V1.3_ENG_20150728.iso --disk path=/home/openstack-image/rhel66-kvm.qcow2,bus=virtio,size=300,format=qcow2 --vnc --vncport=5900 --vnclisten=0.0.0.0 -v
上面行末的 “” 表示换行,如果复制出来执行失败,那么把去掉并把所有命令弄成一行
相关参数解释:-n 虚拟机的名字,-r 虚拟机的内存大小,--cpu 虚拟机的CPU,-c 虚拟机的安装光驱 --disk 设置虚拟机磁盘相关的参数如文件、格式等等,--vnc 设置虚拟机启动后图形界面显示的方式。
然后会在图形界面中进行操作的安装,操作系统的安装和你在VMWare上手动安装一样,想安装什么软件也尽量装上,不过可能会导致镜像很大。
VNC安装的图形化界面
虚拟机(就是上面步骤创建出来的虚拟机)操作
1、为虚拟机安装电源管理模块,便于后续Openstack对虚拟机进行关机(非下电)操作
yum install acpid -ychkconfig acpid on 345service acpid start
2、安装cloud-init工具,从而使得可以通过Openstack为虚拟机注入密钥、设置虚拟机主机名等,当然cloud-init的功能还不仅仅是这些。
cloud-init是OpenStack对虚拟机操作的重要组件,在虚拟机刚创建时,就是使用这个组件进行配置的,
yum install parted -yyum install cloud-init -yyum install cloud-utils -yyum install cloud-utils-growpart -y
安装完cloud-init后默认是不允许root用户远程访问的,需要做以下操作
sed -i "s,disable_root.*,disable_root: 0,g" /etc/cloud/cloud.cfgsed -i "s,ssh_pwauth:.*,ssh_pwauth: 1,g" /etc/cloud/cloud.cfg
3、设置虚拟机console口打印
便于虚拟机出现问题无法正常进入系统时进行排查。修改 /boot/grub/menu.lst文件,在相应的启动项中增加红色字体标注的内容
cat /boot/grub/menu.lst …… title CentOS release 6.6 (Santiago) 2.6.32-504.16.2.el6.x86_64 modroot (hd0,0)kernel /boot/vmlinuz-2.6.32-504.16.2.el6.x86_64-mod ro root=UUID=e06273eb-33f2-4aa2-b84e-790b8e0b0034 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=tty0 console=ttyS0,115200n8……
在最后一行末尾添加console=tty0 console=ttyS0,115200n8。
4、关闭虚拟机操作系统
init 0
镜像封装(在宿主机操作)
待镜像虚拟机关闭后,在宿主机中执行以下命令清除镜像硬件信息
virt-sysprep -d rhelimg
压缩镜像,便于镜像的保存及传输
virt-sparsify --compress /home/openstack-image/rhel66-kvm.qcow2 /home/rhel66-kvm.qcow2
镜像上传到Openstack环境及使用
通过Openstack界面直接上传镜像
上传界面
在使用镜像创建虚拟机后,可以从控制台进入操作系统如下:
制作的镜像生成的操作系统