KVM:通过模板快速创建虚拟机
KVM:通过模板快速创建虚拟机
当我们需要快速创建大量虚拟机时,逐个安装的效率无疑是低下的,好在kvm给我们提供了clone操作,可以从已有的虚拟机clone出新的虚拟机。这样,只要我们手动安装一个模板虚拟机,之后就可以从这个模板虚拟机生产出大量虚拟机了。
但有些场景,我们需要将虚拟机分发到不同机器上,这样直接通过domain进行clone也不够完美,所以更进一步,将模板虚拟机抽导出成文件,通过文件模板来创建虚拟机。
制作模板文件
首先需要一台安装好的虚拟机。可以通过下面的命令安装一台ubuntu2004虚拟机。
virt-install \
--connect=qemu:///system \
--virt-type=kvm \
--name=vm1 \
--vcpus=8 \
--memory=16384 \
--location=/data/kvm/iso/Ubuntu2004.iso \
--disk path=/data/kvm/vm/vm1_0.qcow2,size=200,format=qcow2 \
--network network=default \
--graphics none \
--extra-args='console=ttyS0' \
--force
安装完成后,关闭虚拟机
virsh shutdown vm1
将原虚拟机的vm1_0.qcow2文件copy一份,作为镜像模板
cp /data/kvm/vm/vm1_0.qcow2 /data/kvm/template/tpl.qcow2
使用virsh dumpxml命令获得配置文件
virsh dumpxml --domain vm1 > /data/kvm/template/tpl.xml
修改tpl.xml中镜像文件的指定位置为/data/kvm/template/tpl.qcow2,即我们复制的镜像文件的路径。
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/data/kvm/template/tpl.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
删除tpl.xml中如下四行内容,其中<source ../>是必删的,其它三行只是为了避免歧义。
<name>vm1</name>
<uuid>47cdbba1-3551-407d-a03c-90d2a60bfa71</uuid>
<mac address='52:54:00:83:79:76'/>
<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0'/>
通过 virt-sysprep 命令处理tpl.qcow2,so that clone操作可以用于这个镜像。
virt-sysprep -a /data/kvm/template/tpl.qcow2
这样,我们的模板文件和模板就制作好了。其root密码同vm1的root密码一致。
[root@localhost /data/kvm/template]# tree .
.
├── tpl.qcow2
└── tpl.xml
如果用像前文直接使用virt-sysprep 来重置镜像,不加任何其他参数,会把镜像重置成几乎是完全新安装的状态。其执行的步骤,可以通过list命令查看。
virt-sysprep --list-operations
一些定制的配置,可以通过参数来设置,比如hostname和root密码。
virt-sysprep -a /data/kvm/template/tpl.qcow2 --hostname localhost --root-password password:testpwd
通过模板创建虚拟机
virt-clone --connect qemu:///system \
--original-xml /data/kvm/template/tpl.xml \
--name vm5 \
--file /data/kvm/vm/vm5_0.qcow2
virt-clone --connect qemu:///system \
--original-xml /data/kvm/template/tpl.xml \
--name vm3 \
--file /data/kvm/vm/vm3_0.qcow2
clone操作会为新的虚拟机分配新的uuid和mac地址。