「KVM」- 快速创建虚拟机:虚拟机克隆

  CREATED BY JENKINSBOT

问题描述

我们需要创建多台虚拟机,那对于我们的场景来说,最简单的方法便是虚拟机克隆。

该笔记将记录:在 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

第二步、安装虚拟机

参考 Create a Guest VM 笔记,这里不再叙述详细过程。

至此,我们已经创建名为 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