KVM之实现批量创建KVM虚拟机

KVM之通过virsh制作image 实现批量创建KVM虚拟机

*******通过KVM虚拟机xml模板文件创建虚拟机(制作一个raw格式的image,并安装ubuntu操作系统)******************
一、准备工作
1、准备一个KVM虚拟机配置文件模板
KVM虚拟机配置文件模板文件已上传至附件:kvm_vm_raw_template.xml
复制一份虚拟机配置文件模板:kvm_vm_raw_template.xml
2、确定image的存储路径
3、创建raw格式的image文件
4、准备ubuntu14.4的ISO文件

二、定义kvm_vm_raw_template.xml虚拟机配置文件
注意:xml文件中的所有“%%”均为变量,比如:%VM_NAME%
通过sed 替换变量,这时候,虚拟机名称为:ubuntu14.04_temp

1、虚拟机整体信息配置
  <name>%VM_NAME%</name> 虚拟机名字
  <uuid>%UUID%</uuid>    UUID值
  <memory>1048576</memory>    内存总大小,已KB为单位
  <currentMemory>1048576</currentMemory>    当前内存大小
  <vcpu>1</vcpu>    CPU数量
配置如下:
sed -i "s,%VM_NAME%,ubuntu14.04_temp,g" ubuntu14.04.xml

通过uuidgen命令生成UUID值
uuid=`uuidgen`
sed -i "s,%UUID%,$uuid,g" ubuntu14.04.xml

2、系统信息配置
<os>
    <type arch=‘x86_64‘ machine=‘pc-0.14‘>hvm</type> 系统架构和机器类型,hvm代表是基于硬件虚拟化,如要查看支持的机器类型:qemu-system-x86_64 -M ?
    <boot dev=‘hd‘/>    启动介质,首先使用hard disk作为首选启动介质,比如cdrom,floppy
    <bootmenu enable=‘yes‘/>    是否开启启动选项菜单,虚拟机启动时可按F12进入启动菜单
  </os>

3、创建image文件和配置
3.1、创建一个raw格式image
qemu-img create -f raw ubuntu14.04.raw 20G

sed -i "s,%IMAGE_PATH%,/datapool/vm/ubuntu14.04.raw,g" ubuntu14.04.xml

<disk type=‘file‘ device=‘disk‘>
      <driver name=‘qemu‘ type=‘raw‘ cache=‘none‘/>
      <source file=‘/datapool/vm/ubuntu14.04.raw‘/>
      <target dev=‘vda‘ bus=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x08‘ function=‘0x0‘/>
    </disk>

4、挂载ISO
    <disk type=‘file‘ device=‘cdrom‘>
      <driver name=‘qemu‘ type=‘raw‘ cache=‘none‘/>
      <source file=‘/datapool/iso/ubuntu-14.04.3-server-amd64.iso‘/> #指定ISO文件路径
      <target dev=‘hda‘ bus=‘ide‘/>
      <readonly/>
      <address type=‘drive‘ controller=‘0‘ bus=‘1‘ unit=‘0‘/>
    </disk>

5、虚拟网卡
随机生成mac地址命令:openssl rand -hex 6 | sed ‘s/(..)/1:/g; s/.$//‘
40:d9:44:0c:55:ac

<interface type=‘bridge‘>
      <mac address=‘40:d9:44:0c:55:ac‘/>
      <source bridge=‘br100‘/>
      <target dev=‘vnet0‘/>
      <alias name=‘net0‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
    </interface>

6、定义虚拟机
virsh define ubuntu14.04.xml    定义虚拟机,define告诉libvirt,要被libvirt管理

#查看虚拟机列表
[email protected]:/datapool/vm# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     ubuntu14.04_temp               关闭

#启动虚拟机
virsh start ubuntu14.04_temp

7、vnc查看虚拟机,#查看VNC端口
[email protected]:/datapool/vm# virsh vncdisplay ubuntu14.04_temp    
:0

安装vncviewer工具
apt-get -y install vncviewer
vncviewer 192.168.89.3:0    连接,注意这里的IP地址为br100的IP

8、接着开始安装操作系统,当操作系统和需要的软件安装好之后,将虚拟机关闭,并且将虚拟机raw格式image保存

至此,一个raw格式image文件就已经创建完成,而且操作系统也完成安装,等会利用raw格式的image作为backing_file,批量创建qcow2磁盘(作为虚拟机的磁盘)

***************************利用raw格式image作为backing_file,批量创建qcow2磁盘(作为虚拟机的磁盘)********************************
一、批量创建ubuntu虚拟机解决方案:
方案1、手动安装,繁琐、蛋疼
方案2、直接复制,复制已经安装好系统的raw格式image文件,需要创建多少台虚机就复制多少份,分别利用备份文件创建虚拟机,但主要的时间会花费在复制image上
方案3、qcow2快速创建,利用已经安装好系统的raw格式image文件作为backing_file文件,需要创建多少台虚机就复制多少份qcow2格式image,再分别利用qcow2文件创建虚拟机,时间花费非常少

*在这里选择方案3
之前制作好的raw格式image(操作系统已安装好),需要注意的地方:
1、尽量不要修改image
2、不要直接利用这个image创建虚拟机
3、避免人为读写进程对这个image进行操作,比如挂载

二、开始编写批量创建脚本
1、脚本已经写完
脚本文件可参考:create_qcow2_vm.bash 脚本文件已上传至附件

2、利用这种方法建立起来的虚拟机,有如下问题:
2.1、主机名完全相同
2.2、虚拟机内存保存的MAC地址仍然是backing_file中MAC地址(经测试发现,较新版本的KVM不会出现MAC地址相同的情况)

解决方案:将qcow2 image挂载之后,再对主机名和MAC地址进行修改
1、挂载qcow2文件,首先需要安装依赖包kpartx,使用kpartx工具来挂载虚拟机磁盘镜像文件
2、使用nbd模块挂载qcow2文件(modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。 modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。)

#********************命令如下:***********************
apt-get -y install kpartx

#激活nbd模块
modprobe nbd max_part=63

#将qcow2文件挂载到/dev/nbd0设备(注意:如果/dev/nbd0被占用,可以使用/dev/nbd1设备)
qemu-nbd -c /dev/nbd0 ubuntu14.04_vm5.qcow2

#处理/dev/nbd0下的分区
kpartx -a /dev/nbd0

#这里需要暂停一下
sleep 1

#查看qcow2文件中的各种分区(这里看到带nbd字样的才是可挂载的分区,哪个分区是根分区需要尝试之后才能确定)
ls /dev/mapper

#确定根分区
[email protected]:/datapool/vm/ubuntu14.04_vm5# temp_file=`mktemp`
[email protected]:/datapool/vm/ubuntu14.04_vm5# rm -rf $temp_file; mkdir -p $temp_file
[email protected]:/datapool/vm/ubuntu14.04_vm5# mount /dev/mapper/nbd0p1 $temp_file
[email protected]:/datapool/vm/ubuntu14.04_vm5# ls $temp_file/usr    #没有挂载的这个分区/usr这个目录,说明不是根分区
ls: 无法访问/tmp/tmp.nmt6d15vlK/usr: 没有那个文件或目录
[email protected]:/datapool/vm/ubuntu14.04_vm5# ls $temp_file    #查看了一下,这个估计是/boot分区
abi-3.19.0-25-generic  config-3.19.0-25-generic  grub  initrd.img-3.19.0-25-generic  lost+found  memtest86+.bin  memtest86+.elf  memtest86+_multiboot.bin  System.map-3.19.0-25-generic  vmlinuz-3.19.0-25-generic
[email protected]:/datapool/vm/ubuntu14.04_vm5# umount $temp_file #取消这个分区的挂载  
[email protected]:/datapool/vm/ubuntu14.04_vm5# mount /dev/mapper/nbd0p2 $temp_file #挂载nbd0p2分区
[email protected]:/datapool/vm/ubuntu14.04_vm5# ls $temp_file #挂载成功后,查看分区的内容,原来这个就是根分区了
bin  boot  dev  etc  home  initrd.img  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  vmlinuz
[email protected]:/datapool/vm/ubuntu14.04_vm5# ls $temp_file/usr    #这个分区有/usr目录
bin  games  include  lib  local  sbin  share  src

#确保无误后,下面开始修改主机名
HOST_NAME="vm5"
sed -i "s,127.0.0.1.*,127.0.0.1 $HOST_NAME,g" $temp_file/etc/hosts
echo $HOST_NAME > $temp_file/etc/hostname

#修改MAC地址
经测试发现,较新版本的KVM不会出现MAC地址相同的情况,我的环境是ubuntu14.04
下面是我批量创建的4台VM,可以看出MAC地址真的没有重复,或许真的和版本有关系
vm4 fa:92:28:bd:1a:79
vm2 fa:92:15:28:d7:d5
vm3 fa:92:ad:51:87:54  
vm1 fa:92:38:68:52:e0

#卸载挂载的分区(一定要注意卸载顺序)
[email protected]:/datapool/vm/ubuntu14.04_vm5# umount $temp_file
[email protected]:/datapool/vm/ubuntu14.04_vm5# qemu-nbd -d /dev/nbd

自此全部完成,就可以启动qcow2磁盘的虚拟机了

时间: 2024-10-31 05:24:21

KVM之实现批量创建KVM虚拟机的相关文章

Azure PowerShell批量创建Azure虚拟机

在我们工作过程当中,可能会需要创建多台相同配置的虚拟机.我们是不是只能通过Portal 页面一台台创建呢?答案是否定的,我们可以通过Azure PowerShell脚本来批量创建虚拟机.接下来我将介绍通过Powershell来批量创建Azure虚拟机. 以下分割线内的内容是要powershell脚本用来批量创建虚拟机的内容 ---------------------------------------分割线---------------------------------------------

批量创建kvm虚拟机

1.批量复制已安装好系统的虚拟磁盘 #!/bin/bash for i in `seq 31 50` do cp /kvm/win7_templete.qcow2 /kvm/win7_10.$i.qcow2 echo "$i copy" done 2.批量复制虚拟机配置文件并开启虚拟机 #!/bin/bash for i in `seq 31 50` do cp /qemu/win7-templete.xml /qemu/win7-10.$i.xml #复制模版配置 uuid=`uui

Powercli批量创建删除虚拟机快照

注意事项: 1.客户端需要安装vmware powercli client 2.连接vcenter或esxi主机的用户需要具有连接和创建删除快照权限 1.创建虚拟机快照 #添加vmware module command Add-PSSnapin -Name *vmware* #填写连接相关信息,按要求输入vcenter/esxi 服务器ip 用户名 密码 $vcenterip = Read-Host "请输入vcenter/esxi服务器ip......" $domainname = 

Azure之批量创建虚拟机(托管磁盘)

一.背景 今天准备整理一个批量创建Azure虚拟机的Json脚本,是基于Stan大神分享的脚本的基础上进行修改编辑,作为学习和自己使用. (源脚本路径:https://github.com/pjshi23/azure-quick-start-china/tree/master/201-2-vms-loadbalancer-lbrules) 环境描述:规划Azure的架构环境时,已经提前规划好虚拟网络,并依照不同的业务创建好了对应的子网,并对子网通过NSG的做访问控制. Azure上的所有虚拟机,

windows azure使用powershell批量创建虚拟机

这里向大家介绍下如何使用powershell批量创建vm虚拟机,本博文中,我打算用powershell批量创建100台VM. 首先,从官网下载页面,下载并安装Windows Azure PowerShell:http://www.windowsazure.cn/zh-cn/downloads/#cmd-line-tools 安装完毕后以管理员身份运行,右键点击PowerShell图标然后选择以管理员身份运行执行命令Get-AzurePublishSettingsFile-Environment

在centos6.7上安装kvm,批量创建虚拟机

实验环境:dell r710 linux系统使用centos6.7 内存32G,硬盘800G 服务器主机:172.18.204.1 kickstart文件主机:172.18.11.115 ]# modprobe kvm ]# lsmod |grep kvm 显示如下即可继续: 验证:如下文件存在即可 ]# ls /dev/kvm 关闭selinux: ]# vim /etc/sysconfig/selinux selinux=dsabled ]# service NetworkManager s

kvm批量创建虚拟机并自动设定ip和服务器名

1. 说明 kvm比起vmware来说最没有的功能就是用模板部署虚拟机的时候可以自定义ip地址,这对于大量创建vm的场景来说你需要一台台vnc的登录改动ip,显然是很累的,最近我就遇到这种场景(大型的cloudstack和openstack架构不说) 想到了一个方法,就是用一台关了机的虚拟机作为模板,复制它的xml文件可以改mac地址,这样就可以通过mac地址的唯一性而在模板虚拟机中加入一个脚本来根据一个写好在虚拟机中的列表文件来设定相应的ip地址和服务器名.这种方法要求以下步骤 1.模板虚拟机

CentOS 5.6下创建KVM虚拟机

首先要保证你的CPU支持虚拟化.执行以下命令查看CPU的flag信息,里面包含svm的flag就说明支持虚拟化: [[email protected] ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxe

创建kvm虚拟机

1.通过图形界面或通过命令的方式创建kvm虚拟机,通过vnc方式连接到虚拟机中进行管理和配置虚拟机.并实现开启自动启动虚拟机. #规划网络 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" TYPE="Ethernet" ONBOOT="yes" BRIDGE="br1" vi /etc/sysconfig/network-scripts/ifcfg-br1