问题描述
我们需要创建多台虚拟机,那对于我们的场景来说,最简单的方法便是虚拟机克隆。
该笔记将记录:在 KVM 中,如何克隆虚拟机,以及常见问题处理。
解决方案
注意事项:
1)克隆虚拟机不能克隆原主机的特征信息,比如 主机密钥、日志文件、用户帐号、网络设置 等等。所以,在克隆前,需要进行准备工作。
实验环境:Ubuntu 20.04 LTS
第一步、安装命令工具
# apt-file search -x bin/virt-sysprep libguestfs-tools: /usr/bin/virt-sysprep # apt-file search -x bin/virt-clone virtinst: /usr/bin/virt-clone # apt-get install -y libguestfs-tools virtinst
第二步、安装虚拟机
虚拟机的创建过程不再赘述,假设我们已创建名为 tmpl-ubuntu-1804 的虚拟机。
第三步、准备虚拟机
停止虚拟机:
virsh shutdown tmpl-ubuntu-1804
处理虚拟机(创建模板):
# virt-sysprep -d tmpl-ubuntu-1804 [ 0.0] Examining the guest ... [ 175.9] Performing "abrt-data" ... [ 175.9] Performing "backup-files" ... [ 176.7] Performing "bash-history" ... ... [ 177.7] Performing "yum-uuid" ... [ 177.7] Performing "customize" ... [ 177.7] Setting a random seed [ 177.8] Setting the machine ID in /etc/machine-id [ 178.2] Performing "lvm-uuids" ...
该操作将处理虚拟机的诸如主机密钥、日志文件、用户帐号、网络设置等等,防止在克隆时复制这些信息。
第四步、克隆虚拟机
执行如下命令,将自动克隆虚拟机,创建名为 k8s-cp-01 的虚拟机,并创建新的存储:
# virt-clone --original tmpl-ubuntu-1804 --name k8s-cp-01 --auto-clone Allocating 'k8s-cp-01.qcow2' | 15 GB 00:00:14 Clone 'k8s-cp-01' created successfully.
第五步、启动虚拟机
# virsh start k8s-cp-01 Domain k8s-cp-01 started
注意事项
1)通过克隆产生的虚拟机,虽然具有不同的配置,但是部分配置仍旧无法随克隆而修改,比如主机名。该方法无法比拟无人值守安装。
2)在执行 virt-sysprep 命令后,主机相关的配置文件被删除。但是,通过克隆创建的虚拟机并不会创建这些配置文件,而是需要我们手动创建。比如,SSH Host Key 无法在克隆生成的虚拟机中自动生成,而需要执行 ssh-keygen -A 重新生成。
参考文献
How to clone existing KVM virtual machine images on Linux
kvm 虚拟化 virt-clone 克隆虚拟机
KVM Snapshot and Clone
How to Create a KVM Virtual Machine Template
Creating a template for KVM virtual machines – Marin Atanasov Nikolov
Creating a new KVM virtual machine from a template – Marin Atanasov Nikolov
KVM – Clone Guests from Template Image
debian – How to change a SSH host key? – Server Fault