KVM虚拟机创建时绑定固定IP

解决问题:
使用dhcp,即使选择无限期,也出现虚拟机ip改变的情况
有网上资料通过修改dhcp配置文件完成,也是不错的思路
目的:不适用dhcp

第一步:制作模板镜像

https://editor.csdn.net/md/?articleId=106480768
1.1 这是以前的模板镜像
1.2 在模板镜像中配置ip文件
在模板虚拟机中配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static  
ONBOOT=yes
IPADDR=192.168.1.2  #ip地址此处任意
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
#注释UUID

1.3 对基础镜像的xml文件修改,domain标签中增加一行

 <title>192.168.1.3</title>
<domain type='kvm'>
  <name>base-image</name>
  <uuid>12348899-e829-4217-a0ff-f30eee4d2b31</uuid>
  <title>192.168.1.14</title>   #ip都是任意的 ,创建虚拟机时会根据指定的ip进行替换,方便读取
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <vcpu placement='static' current='2'>4</vcpu>
  <os>

第二步:创建虚拟机脚本,可以在代码项目中实现和替换


```css
#!/bin/bash
function check(){
	if [ ! -f "${xmls_dir}${base_xml}" ]&&[ ! -f "${images_dir}${base_img}" ] # 判断基础xml和基础镜像是否存在
	then
		echo "基础镜像或者基础镜像xml不存在"
		exit 1
	else
   		vir_uuid=`uuidgen`
		vir_mac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum |sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
		vir_name=$machine_name        
	fi 
	
}
#创建磁盘
function create_disk(){
	chattr -i  ${images_dir}$base_img
	qemu-img create -f qcow2 -b ${images_dir}$base_img ${images_dir}${vir_name}.qcow2 ${vir_disk}G  &>/dev/null
}
#添加磁盘
function attach_disk(){
	qemu-img create -f qcow2  ${images_dir}${vir_name}-2.qcow2  ${vir_attach_disk}G  >/dev/null
	virsh attach-disk ${vir_name} ${images_dir}${vir_name}-2.qcow2 vdb --cache writeback --subdriver qcow2 --persistent >/dev/null
	
}

#配置xml ,替换内存cpu 等信息并导入
function conf_xml(){
	cp  ${xmls_dir}${base_xml}  /tmp/${vir_name}.xml
	sed -i "s#<memory unit='KiB'>.*</memory>#<memory unit='KiB'>${vir_mem}</memory>#"  /tmp/${vir_name}.xml 
	sed -i "s#<currentMemory unit='KiB'>.*</currentMemory>#<currentMemory unit='KiB'>${vir_mem}</currentMemory>#"   /tmp/${vir_name}.xml 
	sed -i "s#<vcpu placement='static'>.*</vcpu>#<vcpu placement='static'>${vir_cpu}</vcpu>#" /tmp/${vir_name}.xml
	sed -i "s/<name>.*<\/name>/<name>${vir_name}<\/name>/" /tmp/${vir_name}.xml
	sed -i "s/<uuid>.*<\/uuid>/<uuid>${vir_uuid}<\/uuid>/" /tmp/${vir_name}.xml
	sed -i "s/<title>.*<\/title>/<title>${vir_ip}<\/title>/" /tmp/${vir_name}.xml
	sed -i "s#<source file=.*/>#<source file='${images_dir}${vir_name}.qcow2'/>#" /tmp/${vir_name}.xml
	sed -i "s/<mac address=.*\/>/<mac address='$vir_mac' \/>/" /tmp/${vir_name}.xml
	virsh define /tmp/${vir_name}.xml >/dev/null
	virt-edit -d ${vir_name}  /etc/sysconfig/network-scripts/ifcfg-eth0  -e "s#IPADDR=".*"#IPADDR="${vir_ip}"#"  # 替换ip
}

#启动并设置开机自启
function start_vir(){
	virsh start ${vir_name} >/dev/null
	virsh autostart ${vir_name} >/dev/null
	chattr +i  ${images_dir}$base_img
}
main(){
    images_dir="/var/lib/libvirt/images" # 镜像存储的位置
    base_img="centos6_template.qcow2"  # 基础镜像的名称
    xmls_dir="/etc/libvirt/qemu/"  # xml 的位置
    base_xml="centos6_template.xml"   # 基础xml的名称   
    vir_disk=50 # 磁盘默认为50G  
    vir_cpu=2 # cpu默认为2核
    vir_mem=8388608 # 内存默认为8G
    echo -e "服务器配置选项:\n 1: 2核8G 50G(测试) \n 2: 1核8G 50G(开发) \n 3: 2核8G 100G(数据库) \n 4: 4核20G 200G" 
    read  -t 30 -p  "输入你选择的配置的编号:" number
    read  -t 90 -p "输入想要创建的IP:"  vir_ip
    read  -t 120 -p "输入想要创建的机器名称:"  machine_name
    if [ -z "$vir_ip" ] || [  -z "$machine_name" ] # 判断是否输入ip和机器名称
    then
       echo "请输入ip和机器名称"
       exit -1
    fi
    case "$number" in
        [1] )
            check
            create_disk
            conf_xml
            start_vir
            create_vir_log
        ;;
        [2] )
            vir_cpu=1  # 设置为1核
            check
            create_disk
            conf_xml
            start_vir
            create_vir_log
        ;;
        [3] )
            vir_disk=100 #设置为磁盘100G盘
            check
            create_disk
            conf_xml
            start_vir
            create_vir_log
        ;;
        [4] )
            base_img="dc-base-image.qcow2"
            vir_cpu=4  # 设置为4核
            vir_mem=20971520 #设置内存为20G
            vir_disk=20 #设置为磁盘200G盘
            vir_attach_disk=200 # 设置附加盘的大小
            check
            create_disk
            conf_xml
            start_vir
            attach_disk
            create_vir_log
        ;;
        *) echo "输入编号(1-4)";;
    esac
}
main

其中最为重要的命令是virt-edit,通过这个命令去到虚拟机内实现IP修改的。
virt-edit 是直接编辑虚拟机磁盘里文件的命令,使用前宿主机需要安装libguestfs-tools
官方文档:virt-edit
所以,可以通过从数据库中指定未使用的ip方式,使虚拟机创建速度加快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值