Clone KVM虚拟机实战
虚拟机克隆(vm clone)是快速根据已有虚拟机批量创建相同OS和配置虚拟机的最佳方法。
本文案例是在CentOS 7物理服务器上对CentOS 7虚拟机和Windows 2012虚拟机的clone操作实践
克隆虚拟机
登陆到KVM物理服务器
检查当前运行的虚拟机
显示输出
克隆虚拟机之前,被克隆的虚拟机需要处于停机状态或者暂停状态(
pause
)
暂停虚拟机
然后检查虚拟机状态,可以看到虚拟机已经处于paused
状态,如果此时你有远程登陆在上述2个虚拟机操作系统中,也会发现没有响应
显示虚拟机处于暂停状态
克隆centos7虚拟机,这里我们要构建一个用于OpenStack开发环境的
devstack
,所以采用如下命令
可以看到极快的速度完成clone,并提示输出
此时检查/var/lib/libvirt/images/
目录可以看到复制出的虚拟机镜像
克隆windows 2012虚拟机,这里我们要构建日常工作的名为
windev
的虚拟机
此时使用
virsh list --all
检查所有的虚拟机,可以看到克隆出的虚拟机处于关机状态
恢复源虚拟机
centos7
和win2012
的运行
现在已经成功克隆了虚拟机,我们需要进一步将新克隆的虚拟机中原配置清除掉(例如主机名)
virt-sysprep
:准备虚拟机
virt-sysprep
:准备虚拟机virt-sysprep
命令行工具用于reset或unconfigure虚拟机。这个过程包括移除SSH host keys,移除持久化的网络MAC地址配置,以及清楚用户账号。virt-sysprep
参考 virt-sysprep: command not found 在RHEL/CentOS中,
virt-sysprep
工具位于libguestfs-tool-c
软件包中,在Debian/Ubuntu则位于libguestfs-tools
软件包中。参考 Create a CentOS Virtual Machine Image from Scratch :
cloud-init
是包含在OpenStack中的一个流行的在虚拟机首次启动时配置虚拟机器操作系统的工具。如果部署OpenStack则可以使用这个工具来做系统初始化。
现在我们使用virt-sysprep
工具重置刚才克隆出来的devstack
和windev
这两个虚拟机:
处理
devstack
虚拟机
-d
参数等同于--domain
,表示处理的虚拟机
--hostname
表示将初始化的虚拟机主机名设置成devstack
--root-password password:CHANGE_ME
表示将初始化主机的root用户密码设置成CHANGE_ME
详细的
virt-sysprep
参考virt-sysprep man手册
修订
devstack
虚拟机的定义,调整虚拟机最大可分配vCPU和内存,以便后期根据系统负载动态调整KVM虚拟机内存和vcpu实战
配置修改如下
通过virsh edit devstack
修改vCPU配置
启动虚拟机
devstack
虚拟机
virt-sysprep
初始化说明检查发现Linux系统中每个用户目录下
.ssh
子目录都会被删除,所以如果原先是通过ssh登陆账号,克隆以后将不能使用这种方法,需要重新设置源虚拟机中开设的账号在克隆后的虚拟机中依然存在,并且
/etc/sudoers
不变,所以原有账号的sudo方式依然存在
处理windows虚拟机
windev
这里出现报错
难道是windows虚拟机初始化不是采用如同linux虚拟机的方法?
参考
How to clone virtual machines in KVM - tutorial - 这篇博客更趋向于底层命令操作,可以作为clone vm的原理借鉴
Last updated