kvm批量创建虚拟机并自动设定ip和服务器名
发表于:2025-12-05 作者:千家信息网编辑
千家信息网最后更新 2025年12月05日,1. 说明kvm比起vmware来说最没有的功能就是用模板部署虚拟机的时候可以自定义ip地址,这对于大量创建vm的场景来说你需要一台台vnc的登录改动ip,显然是很累的,最近我就遇到这种场景(大型的c
千家信息网最后更新 2025年12月05日kvm批量创建虚拟机并自动设定ip和服务器名
1. 说明
kvm比起vmware来说最没有的功能就是用模板部署虚拟机的时候可以自定义ip地址,这对于大量创建vm的场景来说你需要一台台vnc的登录改动ip,显然是很累的,最近我就遇到这种场景(大型的cloudstack和openstack架构不说)
想到了一个方法,就是用一台关了机的虚拟机作为模板,复制它的xml文件可以改mac地址,这样就可以通过mac地址的唯一性而在模板虚拟机中加入一个脚本来根据一个写好在虚拟机中的列表文件来设定相应的ip地址和服务器名。
这种方法要求以下步骤
1.模板虚拟机中有开机启动的脚本,该脚本会根据列表文件设定自己的ip和服务器名,并在设定后建立锁文件,以免再次重启后重新设定。
2.列表文件写在模板虚拟机中,这就限制了灵活场景的时候,只有在预先设定好的虚拟机创建场景中才有效,如果要临时添加虚拟机,并且数量不多(一两台)的时候,你还花功能去重新更新模板虚拟机中的列表文件显得很费力。
3.kvm创建的虚拟机mac地址要和模板虚拟机中的列表文件保持一致。
2. 模板虚拟机的准备
模板虚拟机需要完成的任务主要有以下
1.跟kvm创建虚拟机用的模板虚拟机路径相同
2./etc/rc.local中有相应的启动设定脚本
3.列表文件
开机启动脚本
[root@linux-host2 ~]# cat init_setting.sh #!/bin/bashsetting_list="/root/setting_list"if [ ! -f $setting_list ];then echo "[$setting_list] not exist" exit 1filock_file="/root/setting_lock"if [ -f $lock_file ];then echo "this vm has been set.exit" exit 0fimyeth0mac=`ip a|awk '/eth0/{getline;print}'|grep 'link/ether'|awk '{print $2}'|awk -F':' '{print $4":"$5":"$6}'`myinfoline=`cat $setting_list|grep $myeth0mac`#if [ ! -f "$myinfoline" ];then# echo "sorry,can't fine info from [$setting_list]"# exit 1#fimyip=`echo $myinfoline|awk '{print $2}'`myhostname=`echo $myinfoline|awk '{print $3}'`sed -ir "s/IPADDR=.*/IPADDR=$myip/" /etc/sysconfig/network-scripts/ifcfg-eth0systemctl restart networkhostnamectl set-hostname $myhostnameecho "this vm has been set">$lock_file把以上脚本加入开机启动
echo "/root/init_setting.sh > /root/init.log 2>&1" >>/etc/rc.localchmod 755 /etc/rc.d/rc.local/root/setting_list文件示例,以下对应的为mac地址的后三位 ip 主机名,你问mac地址怎么生成,用以下命令生成,我这边只做了三位
openssl rand -hex 3 | sed -r 's/..\B/&:/g'4a:b7:01 xxx.xx.xx.201 vm171:5b:32 xxx.xx.xx.202 vm228:34:18 xxx.xx.xx.203 vm3然后将该虚拟机关机,供kvm克隆使用
3. kvm批量创建虚拟机脚本
[root@localhost ~]# cat lxd/kvm3.sh #!/bin/bash#创建单个虚拟机(需要电脑中存在模板虚拟机)#获取新虚拟机名称(单个创建模式)get_newname(){ while true do read -p "请输入新虚拟机名称:" newname if [ $newname ];then break else echo "************" echo "请输入姓名!" echo "************" fi done}get_newmemary(){ while true do current_free_mem=`free -m|awk '/^-/{print $4}'` mem_total=`free -g|awk '/^Mem/{print $2}'` echo "目前本机内存总大小:${mem_total} G" echo "当前空闲内存大小为:${current_free_mem} MB" read -p "请输入新虚拟机内存大小(单位G):" newmemary if [ $newmemary ];then if [[ $newmemary -le $mem_total ]];then break else echo "**********************************" echo "输入的数值必须小于当前内存总大小!" echo "**********************************" fi else echo "********************" echo "请输入新虚拟机内存!" echo "********************" fi done}get_newcpu(){ while true do core=`cat /proc/cpuinfo| grep "processor"| wc -l` echo "可用core个数:${core}" read -p "请输入新虚拟机处理器核数:" newcpu if [ $newcpu ];then if [ $newcpu -le $core ];then break else echo "******************************" echo "不能超过可用个数或者输入错误!" echo "******************************" fi else echo "**************" echo "输入不能为空!" echo "**************" fi done}#设置虚拟机名称(自定义创建多个虚拟机)set_group_name(){ #虚拟机个数 read -p "新虚拟机个数:" vir_num free_vir=$vir_num #功能分组 echo "**********************************************************************************" echo "设置好组名之后,虚拟机将每组下的虚拟机自动用【组名01、组名01、组名03、...】的形式命名" echo "**********************************************************************************" read -p "需要分几种功能类型(大于1):" vir_type if [ ${vir_type} -gt ${vir_num} ];then echo "输入不符合规则!" exit fi #设置名字,组名+数字 k=1 for((i=1;i<=${vir_type};i++)) do read -p "第${i}组组名:" group[$i] read -p "分配新虚拟机个数:" group_num_vir #检测输入 free_vir=$((${free_vir}-${group_num_vir})) if [ ${group_num_vir} -gt ${vir_num} ];then echo "输入错误,超过自定义虚拟机个数!" exit elif [ ${free_vir} -lt $((${vir_type}-${i})) ];then echo "分配不均,请重新分配!" exit fi #记录组内虚拟机个数 for((j=1;j<=${group_num_vir};j++)) do name_n="${group[$i]}${j}" name[${k}]=${name_n} k=$(($k+1)) done done echo "准备创建如下虚拟机:" for((i=1;i<=${vir_num};i++)) do echo ${name[${i}]} done }#设置xml所需参数set_xml_args_single(){ uuid=`uuidgen` src_path=/opt/kvm/images/rh7-1.qcow2 src_xml=/etc/libvirt/qemu/master.xml new_path=/opt/kvm/images/${newname}.qcow2 new_path_sed="\/opt\/kvm\/images\/${newname}.qcow2" new_xml=/etc/libvirt/qemu/${newname}.xml}#设置xml所需参数(多个),例如:【set_xml_args ${name[${i}]} $new_memary $new_cpu】set_xml_args(){ newname=$1 newmemary=$2 newcpu=$3 uuid=`uuidgen` src_path=/mnt/lv2/centos7.0.qcow2 src_xml=/etc/libvirt/qemu/centos7.0.xml new_path=/mnt/lv1/${newname}.qcow2 new_path_sed="\/mnt\/lv1\/${newname}.qcow2" new_xml=/etc/libvirt/qemu/${newname}.xml}#复制模板、xmlcopy_model_xml(){ cp $src_path $new_path cp $src_xml $new_xml}#修改xml文件modification_xml(){ sed -ri "s/().*(<\/name>)/\1${newname}\2/" $new_xml sed -ri "s/().*(<\/uuid>)/\1${uuid}\2/" $new_xml mem_kb=$((${newmemary}*1024*1024)) sed -ri "s/().*(<\/memory>)/\1${mem_kb}\2/" $new_xml sed -ri "s/().*(<\/currentMemory>)/\1${mem_kb}\2/" $new_xml sed -ri "s/().*(<\/vcpu>)/\1${newcpu}\2/" $new_xml sed -ri "s/( )/\1${new_path_sed}\2/" $new_xml mac_addr=26:ce:02 sed -ri "s/( )/\1${mac_addr}\2/" $new_xml}#definedefine_vir_single(){ virsh define $new_xml echo "**********" echo "${newname}建完成!" echo "**********"}#------------运行分界线------------------------------------echo "1)single"echo "2)group"read -p "选择你的操作:" strcase $str insingle) get_newname get_newmemary get_newcpu set_xml_args_single copy_model_xml modification_xml sed -ri "s/( )/\1$1\2/" $new_xml define_vir_single;;group) set_group_name get_newmemary get_newcpu for((i=1;i<=${vir_num};i++)) do set_xml_args ${name[${i}]} $newmemary $newcpu copy_model_xml modification_xml define_vir_single done;;*) exit;;esac 运行方法
bash /root/lxd/kvm3.sh e9:44:1emac地址要和模板虚拟机的mac地址保持一致
模板
输入
文件
地址
个数
脚本
内存
功能
场景
大小
名称
方法
时候
分配
服务器
服务
一致
单个
参数
多个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
tpcloud服务器怎么样
畅游软件开发
软件开发过程中的配置管理
网络安全空间治理中国主张
电子票据管理系统应用服务器
网络安全机构分类
首家网络安全餐厅揭幕
奥拉星如何找回上次登录服务器
湖南金谱刷互联网科技有限公司
网络安全考研武大
从事软件开发工作可以干多久
电商公司服务器数据安全性
做软件开发的年薪40万
服务器dhcp地址查看
国内的ntp服务器
近几年来网络安全问题
中联搅拌站数据库字段
阿里系统服务器放在哪里
上海金测软件开发待遇
快速简单的网络安全知识
监测预警网络安全法
软件开发的方法和特点
乌鲁木齐计算机网络技术
杨浦区网络技术开发哪家好
attdb 数据库
润华奖数据库设计比赛
asp数据库在线管理
奥拉星如何找回上次登录服务器
修改新时达服务器
网络安全行为画像