(以下内容为个人工作经验所总结,按步骤可制作出镜像,但细节知识上可能不够严谨,仅供制作镜像参考)

1、制作镜像的目的:

      希望使用自己制作的镜像,可以有更好的个性化使用体验;

      需要将服务进行打包,以虚机的形式提供服务,这样可以更快的上线测试,缺点是性能不如直接使用物理机。

2、制作镜像的基本原理:

      使用过vmware workstation、vsphere的人都知道,创建一个虚拟机后,会生成一个虚拟机文件,我们只需要拷贝这个文件,在另一个环境中打开,效果和之前的虚拟机完全相同;在openstack平台上类似,我们先用qemu-img创建一个qcow2格式的虚拟磁盘,再用libvirt的虚拟光驱导入cnetos系统的iso文件,按照安装系统步骤装好系统,进入系统做一些必要的配置修改,关机后,那个qcow2格式的文件就是一个镜像文件了,也就是说,镜像本质上是一块虚拟磁盘。技术层面的封装关系是kvm<qemu<libvirt<openstack,所以其实我们是用libvirt启动一个虚拟机,做成符合条件的镜像,提供给openstack或其他libvirt使用而已,libvirt启动虚拟机的过程可以是纯敲命令,也可以是界面操作。

3、进入系统需要做的配置:

qemu-guest-agent等等,后面会说每个工具的作用。

4、制作镜像的具体步骤:

      1)准备好一台装有centos7桌面版系统的物理机,进入后yum update

(安装过程交互的三种方式:这里我们使用桌面系统上的界面操作,更方便简单,推荐;纯敲命令,使用vnc登陆安装的方式较为麻烦,不推荐;纯敲命令,不使用界面交互的方式理论上可行,较麻烦,不推荐)

      2)安装libvirt各项组件

         yum install kvm python-virtinst libvirt libvirt-python virt-installvirt-manager virt-viewer libguestfs-toolskvm kmod-kvm qemu kvm-qemu-img bridge-utils

           其中kvm和qemu相关的软件系统自带,这里是以防万一;virt-manager安装后会在系统工具中看到虚拟机管理程序,可以界面操作;virt-install是启动虚拟机命令;其他相关组件具体作用不做交代,请自行查询。

      3)创建qcow2磁盘:

            qemu-img create -f qcow2 centos7.qcow2 10G

      4)启动虚拟机:(用虚拟机管理程序创建qcow2磁盘、导入iso文件安装更简单,不必考虑下列各项参数具体含义)

           

virt-install --virt-type kvm --name centos --ram 1024 \
  --disk /tmp/centos7.qcow2,format=qcow2 \
  --network network=default \
  --graphics vnc,listen=0.0.0.0 --noautoconsole \
  --os-type=linux --os-variant=rhel7 \
  --location=/data/isos/CentOS-7-x86_64-NetInstall-1511.iso

           disk:指定虚拟磁盘路径

 

           network:网络连接方式,默认使用NAT;使用bridge方式参数:--network bridge:br0,使用网桥方式需要先在物理机上创建网桥br0

          graphices: 界面交互方式;这里创建了一个vnc连接,使用vnc方式;我们实际使用的是virt-manager界面;如果想纯敲命令不进行界面交互,参数为--graphics none,并添加--extra-args="console=tty0 console=ttyS0,115200",再使用virsh console centos7登陆

    location:指定iso文件路径

(我们制作完镜像后,使用时会修改硬件资源的参数,所以启动虚拟机时可以指定任意参数,如这里ram是1024M,vcpu没有指定,网络使用NAT,修改为其他参数也可以)

  5)对镜像进行配置修改:

      a.允许ssh root登陆:

      b.安装acpid

 

        为了hypervisor能够管理虚拟机生命周期(shutdown、reboot等),虚拟机需要安装acpid服务:

  

                  yum install -y acpid

                  systemctl enable acpid

               c.记录虚拟机的启动日志供nova console-log使用

              Edit the /etc/default/grub file and configure the GRUB_CMDLINE_LINUX option. Delete the rhgb quiet and add

           the console=tty0 console=ttyS0,115200n8 to the option:

               GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8"

               运行grub2-mkconfig -o /boot/grub2/grub.cfg保存修改

             d.yum update

             e.安装qemu-guest-agent:用于从面板在线更新密码/密钥

                yum install -y qemu-guest-agent

配置qemu-ga,修改/etc/sysconfig/qemu-ga

TRANSPORT_METHOD="virtio-serial"
DEVPATH="/dev/virtio-ports/org.qemu.guest_agent.0"
LOGFILE="/var/log/qemu-ga/qemu-ga.log"
PIDFILE="/var/run/qemu-ga.pid"
BLACKLIST_RPC=""
FSFREEZE_HOOK_ENABLE=0
             f.禁用zeroconf route:
               echo "NOZEROCONF=yes" >> /etc/sysconfig/network
             g.安装cloud-init:实现密码注入功能
                # yum install epel-release.noarch
                # yum install cloud-init

                (这一部分使用的不是官方版本,使用官方版本会怎样会实际考察)

安装growpart:在创建虚拟机时能够自动识别根分区大小并自动调整

 

            

yum install -y epel-release
                 yum install -y cloud-utils-growpart
                 rpm -qa kernel |sed 's/^kernel-//'  | xargs -I {} dracut -f /boot/initramfs-{}.img {}

              i.关机

                shuedown now

              j.删除硬件信息:

                virt-sysprep -d centos7

.删除虚拟机配置文件:

                 virsh undefine centos7

             (至此镜像制作完成)

5、使用镜像:

      1)在openstack平台上,导入镜像文件验证密码注入、磁盘根分区大小修改等功能是否正常;

new-domain-name>启动虚拟机,virsh console <new-domain-name>进入虚拟机,使用制作镜像时配置的用户名和密码登录。

以上内容参考链接:

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

http://jacken.me/openstack/centos/create-centos6-image-for-openstack/

https://linux.dell.com/files/whitepapers/KVM_Virtualization_in_RHEL_7_Made_Easy.pdf