kvm 自动化安装centos7

kvm 自动装机脚本

新建数据目录

[root@localhost root]# mkdir /data
[root@localhost root]# cd /data
[root@localhost data]# mkdir ISO ISO1 disk 

1.制作kvm镜像文件 kvm制作qcow2 格式centos7镜像文件

[root@localhost data]# ll
total 44
drwxr-xr-x  2 root root  116 Mar 11 01:30 disk                #存放外挂磁盘目录
-rw-r--r--  1 root root   30 Mar 11 01:24 exec1               #创建主机清单
-rw-r--r--  1 root root  315 Mar 11 01:25 ifcfg-ens3          #虚拟主机网卡文件设置
drwxr-xr-x. 2 root root   24 Nov 30 20:35 ISO                 #基础镜像文件
drwxr-xr-x  2 root root 8192 Mar 11 01:25 ISO1                #主机镜像文件目录
-rw-r--r--  1 root root  111 Mar 11 01:26 kvm.logs            #日志文件
-rwxr-xr-x  1 root root 3107 Mar 11 01:25 kvm.sh              #创建主机脚本

[root@localhost data]# ls ISO
test.qcow2
#我已经制作好了自己的基础镜像,详细可以自己跳转去看

2.主机清单格式

[root@localhost data]# cat exec1
6003 3x6-k8snode1 10.0.49.243

注意,第一列必须是端口,第二列为主机名称,第三列为主机IP 以空格间隔,有仅只能有一个空格,需要自己设置自己kvm虚拟机网卡文件,脚本依赖此文件

[root@localhost data]# cat ifcfg-ens3 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens3
DEVICE=ens3
ONBOOT=yes
IPADDR=10.0.49.243        #无需修改
GATEWAY=10.0.50.1         #按需求修改
PREFIX=22                 #按需求修改 
DNS1=10.0.51.122          #按需求修改
DNS2=8.8.8.8              #按需求修改
[root@localhost data]# 

脚本会每执行新建一次主机都会向主机清单去拿IP替换此文件,
3.脚本

[root@localhost data]# cat kvm.sh 
#!/bin/bash

#注意:  exec1 文件中,格式    "端口 虚拟机name ip" 中间以空格分隔不可以用其他字符分隔
#注意: exec1 文件中,格式    "所有数据不得有重复的,有且只能有一个 "


############ init centos7 ############

which virt-copy-in 
        if [ $? -eq 0 ];then
                break
        else
                exit
        fi

#####################################

address=/data/ISO1 					    # 定义地址

for i in `cat exec1 | awk -F "[ ]+" '{print $1}'`
do

line=`sed -n 15p ifcfg-ens3`  				     # 行数

ip=`cat exec1 | grep -w $i | awk -F "[ ]+" '{print $3}'`     #过滤ip地址

name=`cat exec1 | grep -w $i | awk -F "[ ]+" '{print $2}'`

port=$i

sed -i  "s#$line#IPADDR=$ip#g" /data/ifcfg-ens3               #替换ip

				[ -f /data/ISO1/$name.qcow2 ]
			        if [ $? -eq 0 ];then
					 echo "------------------------"
               				 echo "$name qcow2格式模板已存在"
					 echo "------------------------"

        			else
                			/bin/cp /data/ISO/test.qcow2 /data/ISO1/$name.qcow2                               #复制镜像文件

        			fi
			 
				name1=${name//./\\.}
				name1=${name1//-/\\-}
                     		num=`virsh list --all | awk -F "[ ]+" '{print $3}' | grep -w $name`
			        if [ "$name" == "$num" ];then
                                         echo "------------------"
               				 echo "$name 虚拟机已存在"
					 echo "------------------"
               				 continue
        			else
					virt-install --virt-type kvm --name $name --ram 6144 --vcpus=3 --import --disk path=/$address/$name.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=$port --os-type=linux      #启动镜像
			                sleep 10                # 等待镜像启动
                			virsh shutdown $name
                			sleep 5
        			fi
                         if [ $? -eq 0 ];then                     
	                        	if [ $? -eq 0 ];then
        		                         virt-copy-in -d $name ifcfg-ens3 /etc/sysconfig/network-scripts/
						 sleep 5
						 virt-copy-in -d $name ifcfg-ens3 /etc/sysconfig/network-scripts/
                        		         virsh start $name
                               			 sleep 5
						 name1=`cat exec1 | grep -w $i | awk -F "[ ]+" '{print $2}'`
                               			 echo " $name1 $ip:$port" >> kvm.logs
                        		else
						   echo "--------------"
                             			   echo "请检查主机列表"
						   echo "--------------"
                        		fi
        		else    
				 echo "--------------------"
               			 echo "$name1 $i 主机已存在"
       				 echo "--------------------"
			fi

        if [ $? -eq 0 ];then
                echo "----------------------------"
                echo "          $i is ok "
                echo "----------------------------"
        else
                echo "----------------------------"
                echo "          $i is no"
                echo "----------------------------"
        fi
done

此脚本是基于 virt-copy-in 命令为基础的所以如果执行失败宿主机执行如下命令

yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-* libvirt-client
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值