本文是虚拟化讲解的最后一篇,内容的不是很深刻,只为给后面的openstack作铺垫,烦请勿忘吐槽哈。 linux
接下来咱们就开始了。shell
制做一个带系统的p_w_picpath大体分为两种方法,virt-manager和virsh。virt-manager是须要经过桌面才能使用的,而virsh能够直接在命令行完成操做,对于linux运维来讲,图形化界面的建立方式在自动化运维的实现上比较困难,所以在这里主要是讲解下virsh建立虚拟机的方式,并且自我感受好像图形化的建立方式真心的没啥可说的,哈哈。ubuntu
使用vrish建立KVM虚拟机centos
1. 首先须要定义一个虚拟机配置文件模板,我就直接采用 “openstack成长之旅 - 番外篇” 中的这个配置文件了,将这个配置文件命名为template.xml,由于配置文件中的一些参数没有明确制定,那么就须要修改一下。安全
# 修改配置文件中UUIDbash
UUID=`uuidgen`网络
sed -i "s,%UUID%,$UUID,g" centos-7.xml app
# 设置虚拟硬盘运维
qemu-img create -f raw centos-7.raw 20Gdom
sed -i "s,%IMAGE_PATH%,/root/p_w_picpath/centos-7.raw,g" centos-7.xml
# 修改ISO光盘镜像的路径
sed -i "s,%ISO_PATH%,/root/p_w_picpath/CentOS-7-x86_64-DVD-1511.iso,g" centos-7.xml
# 设置虚拟网卡
MAC="fa:95:$(dd if=/dev/urandom count=1 2>/dev/null |md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"
sed -i "s,%MAC%,$MAC,g" centos-7.xml
MAC2="52:54:$(dd if=/dev/urandom count=1 2>/dev/null |md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"
sed -i "s,%MAC2%,$MAC2,g" centos-7.xml
# 启动虚拟机
virsh define centos-7.xml
# 查看全部的虚拟机
virsh list --all
# 开启虚拟机
virsh start centos-7-test
# vnc 查看虚拟机端口
vrish vncdisplay centos-7-test
虚拟机配置文件配置了,那么想要批量建立虚拟机的话,就须要利用脚原本实现,我这里有一个写好的shell脚本,能够参考下,请根据自身环境来使用,直接上脚本了。
#!/bin/bash # 两个set是用来调试脚本的 set -e # 当脚本出错的时候,就会当即中止,不会在执行后续的命令 set -o xtrace # 跟踪脚本的执行过程,有利于调试 # 设置一些全局变量 temp_dir=`mktemp`; rm -rf $temp_dir; mkdir -p $temp_dir # 建立存放临时文件的文件夹 TOPDIR=$(cd $(dirname "$0") && pwd) #保存脚本所在路径 # 下面首先来配置下MAC,咱们经过配置文件来实现设定 create_mac_file(){ # 这个函数只要是建立MAC配置模板 mac_temp=$TOPDIR/mac_temp cat << EOF > $mac_temp SUBSYSTEN=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="%MAC%", ATTR{type}=="1", KERNEL="eth*", NAME="eth0" SUBSYSTEN=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="%MAC2%", ATTR{type}=="1", KERNEL="eth*", NAME="eth1" EOF #在这里是用了两个网卡,如果只要一个网卡,那么把eth1注释掉就行了,注意:不一样的系统网卡的名字, 也是相同的,自定哈 } # IP配置模板 create_net_file(){ net_temp=$TOPDIR/net_temp cat << EOF >$net_temp auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static # 这里网络信息好比,IP地址,掩码等,要根据实际状况惊醒设置 address 192.168.1.%IP% netmask 255.255.255.0 gateway 192.168.1.1 broadcast 192.168.1.1 EOF # 在这里虚拟机的eth0是基于网桥实现的,采用了DHCP自动获取IP的方式,不须要进行配置 } # 挂载/卸载qcow2文件 # 挂载 mount_qcow2_disk(){ #挂在qcow2文件的话,函数须要一个参数:qocw2文件名 modprobe nbd max_part=63 qemu-nbd -c /dev/nbd0 $TOPDIR/ubuntu-$1.qcow2 sleep 1 kpartx -a /dev/nbd0 sleep 1 mount /dev/mapper/nbd0 $temp_dir #在这里/dev/mapper/nbd0p1是根据qcow2文件来决定的 } # 卸载 umount_qcow2_disk(){ #卸载qcow2文件,函数不须要参数 umount $temp_dir qemu-nbd -d /dev/nbd0 for n in `ls /dev/mapper |grep -v control|grep -v nbd`;do dmsetup clear /dev/mapper/$n #清除挂载过的nbd设备 dmsetup remove /dev/mapper/$n done # 注意这里两个for循环不能一块儿使用,分开写 for n in `ls /dev/mapper |grep -v control|sort -r`;do dmsetup clear /dev/mapper/$n #清除挂载过的nbd设备 dmsetup remove /dev/mapper/$n done rmmod nbd } # 建立及修改虚拟磁盘 create_p_w_picpath(){ # 在这里须要接收三个参数,分别是:IP地址,eth0的mac地址以及eth1的mac地址 ip=$1;mac=$2;mac2=$3;HOST_NAME=ubuntu-${ip} qemu-img create -f qcow2 -o cluster_size=2M,backing_file=$TOPDIR/ubuntu-16.04.raw ubuntu-$ip.qcow2 20G mount_qcow2_disk $ip #这里提供这挂载qcow2文件的函数 mac_file=$temp_dir/etc/udev/rules.d/70-persistent-net.rules net_file=$temp_dir/etc/network/interfaces cp -rf $TOPDIR/mac_temp $mac_file #利用mac地址模板替换qcow2磁盘中的文件 cp -rf $TOPDIR/net_temp $net_file #利用IP信息模板替换qcow2磁盘中的文件 sed -i "s,%MAC%,$mac,g" $mac_file #替换相应的mac地址信息 sed -i "s,%MAC2%,$mac2,g" $mac_file sed -i "s,%IP%,$ip,g" $net_file #替换相应的IP信息 sed -i "s,127.0.0.1 *,127.0.0.1 $HOST_NAME,g" $temp_dir/etc/hosts #替换主机 echo "$HOST_NAME" > $temp_dir/etc/hostname umount_qcow2_disk #调用函数,卸载qcow2磁盘 } #建立及修改xml文件 create_xml(){ ip=$1 xml_file=ubuntu-${ip}.xml #为了方便自动化,xml文件须要以动态方式命名 cp -rf $TOPDIR/template.xml $xml_file #把xml的模板文件复制为本虚拟机的配置文件 sed -i "s,%VM_NAME%,ubuntu-${i},g" $xml_file #修改虚拟机名字 UUID=`uuidgen` sed -i "s,%UUID%,$UUID,g" $xml_file #修改虚拟机UUID MAC="fa:95:$(dd if=/dev/urandom count=1 2>/dev/null |md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')" sed -i "s,%MAC%,$MAC,g" $xml_file MAC2="52:54:$(dd if=/dev/urandom count=1 2>/dev/null |md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')" sed -i "s,%MAC2%,$MAC2,g" $xml_file create_p_w_picpath $ip $MAC $MAC2 # 建立并修改qcow2文件中的网络信息 IMAGE_PATH="${TOPDIR}/ubuntu-${ip}.qcow2" sed -i "s,%IMAGE_PATH%,$IMAGE_PATH,g" $xml_file } # 下面就是建立虚拟机的操做了 create_mac_file #建立MAC信息模板 create_net_file #建立IP信息模板 for i in 233 235 190;do #IP地址的最后一位,本身定义吧 create_xml $i #建立虚拟机配置文件 virsh define ubuntu-${i}.xml #定义虚拟机 virsh start ubuntu-${i} #启动虚拟机 done set +o xtrace #关闭命令执行跟踪,与脚本开头的set -o xtrace成对使用
若发现本脚本有问题,请及时留言告知,以避免误人,谢谢。
虚拟化的介绍就到这里了,由于主要是要讲解openstack由于对于虚拟化没有过多深刻的讲解,接下来会详细的说说openstack组件的介绍及安装,例如:Keystone安全认证服务,Swift存储服务,Glance镜像服务等等,哈哈,好了,等啥呢?,关注我吧,后面的会更加精彩的。