快速创建KVM虚拟机

以前写到一篇文章制作CentOS6基础镜像,今天在工作中突然要临时创建很多虚拟机,于是结合那篇文章得到的基础镜像,写了个简单的脚本快速创建KVM虚拟机。

快速创建一个虚拟机的脚本

这里假设创建的基础镜像为centos6.7-sys.img,而且是qcow2格式的。

create_vm.sh

#!/bin/bash
domain_name=$1
ip_fetch_method=$2
static_ip=$3
static_netmask=$4
static_gateway=$5
static_dns1=$6
static_dns2=$7
base_img_path=/vmdata/base/centos6.7-sys.img
vm_img_dir=/vmdata
#创建虚拟机的磁盘镜像文件
qemu-img create -f qcow2 -b $base_img_path$vm_img_dir/$domain_name.img
#将磁盘镜像文件挂载至宿主机目录,便于修改内部文件
guestmount -i -w -a $vm_img_dir/$domain_name.img /mnt
#设置主机名
echo"
NETWORKING=yes
HOSTNAME=$domain_name
" > /mnt/etc/sysconfig/network
#如采用静态IP,则设置IP地址相关信息
if [ $ip_fetch_method == "static" ] ; then
echo"
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=$static_ip
NETMASK=$static_netmask
GATEWAY=$static_gateway
DNS1=$static_dns1
DNS2=$static_dns2
" > /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
fi
#取消挂载
umount /mnt
#创建并启动虚拟机
virt-install --import --name=$domain_name --vcpus=2 --ram 2048 --boot hd --disk path=$vm_img_dir/$domain_name.img,format=qcow2,bus=virtio --network bridge=br0,model=virtio --autostart --graphics vnc,keymap=en-us --noautoconsole

脚本的逻辑比较简单,注释写得很清楚。需要注意跟以前不太一样的地方有两点:

  • 这次是使用guestmount命令将磁盘文件先挂载至临时目录,这样修改磁盘文件里的内容就很方便了,个人感觉这个比以前用的virt-copy-in命令方案还是简单一些的。guestmount命令的用法可直接man guestmount查看。
  • 这次是使用virt-install命令创建并启动虚拟机。这种方式相当快速,也是一般推荐的快速命令行创建虚拟机的办法。virt-install命令的参数相当多,虚拟机配置的方方面面都有参数,这里只使用了一些必须的,再详细的参数说明可直接man virt-install查看。

快速创建N个虚拟机

再写一个脚本,根据业务需要,调用上述脚本快速创建虚拟机。

#!/bin/bash

vm_name_prefix='test'

#循环创建20个虚拟机
for((i=1; i<=20; i++))
do
  create_vm.sh $vm_name_prefix$i static 10.10.10.$i 255.255.255.0 10.10.10.254 202.96.134.133 8.8.8.8
done

其它

/usr/sbin/virt-install本身就是用python编写的,使用了libvirt库API的python绑定,如果想了解如何使用libvirt库API,个人觉得这个源码还是可以读一读的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

IIS7的应用程序池

最近将原来的系统迁移到IIS7.5上了,发现AspNetUpload只能运行在"程序程序池"的"经典"模式之下,采用"集成"模式后,AspnetUpload....

22710
来自专栏静下来

windows 2003 iis服务器设置301重定向

最近在给公司之前的网站做调整,我发现网站没有301重定向。 系统是Windows Server 2003的,IIS6.0服务器。 第一步:首先得有2个站点 ...

3205
来自专栏蛋未明的专栏

windows配置node环境

2153
来自专栏小车博客

Nginx给网站添加用户认证配置( Basic HTTP authentication)

1683
来自专栏A周立SpringCloud

在CentOS 7中,使用yum安装Nginx

最近在筹备Docker系列课程,其中涉及到在CentOS 7中安装Nginx。 然而,当使用以下命令安装Nginx时,发现无法安装成功。 yum install...

4297
来自专栏人工智能LeadAI

腾讯云服务器CentOS安装JDK+Tomcat+MySQL详细步骤(以及遇到的各种坑)

前言 趁着学生期间,买了一个云服务器拿来自己练练手,刚配置一个环境就让自己各种无语,把自己配置的步骤和遇到的问题整理一下。 安装过程: 安装JDK 看了很多资料...

1.5K13
来自专栏编程之路

CentOs下安装Nginx与反向代理Tomcat

vi /usr/local/nginx/conf/nginx.conf ,添加如下配置:

1292
来自专栏运维技术迷

LNMP无法删除.user.ini文件的解决方法

问题 [root@tokyo wwwroot]# rm -rf dl.lianst.com/ rm: cannot remove `dl.lianst.com/...

3498
来自专栏奇梦博客

AppNode面板网站管理搭建反向代理 Linux 面板 AppNode Ng

1523
来自专栏Youngxj

emlog插件评论者信息显示1.3修复版

4433

扫码关注云+社区