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