本文是虛擬化講解的最後一篇,內容的不是很深入,只爲給後面的openstack做鋪墊,煩請勿忘吐槽哈。
接下來我們就開始了。
製作一個帶系統的image大致分爲兩種方法,virt-manager和virsh。virt-manager是需要通過桌面才能使用的,而virsh可以直接在命令行完成操作,對於linux運維來說,圖形化界面的創建方式在自動化運維的實現上比較困難,因此在這裏主要是講解下virsh創建虛擬機的方式,而且自我感覺好像圖形化的創建方式真心的沒啥可說的,哈哈。
使用vrish創建KVM虛擬機
1. 首先需要定義一個虛擬機配置文件模板,我就直接採用 “openstack成長之旅 - 番外篇” 中的這個配置文件了,將這個配置文件命名爲template.xml,因爲配置文件中的一些參數沒有明確制定,那麼就需要修改一下。
# 修改配置文件中UUID
UUID=`uuidgen`
sed -i "s,%UUID%,$UUID,g" centos-7.xml
# 設置虛擬硬盤
qemu-img create -f raw centos-7.raw 20G
sed -i "s,%IMAGE_PATH%,/root/image/centos-7.raw,g" centos-7.xml
# 修改ISO光盤鏡像的路徑
sed -i "s,%ISO_PATH%,/root/image/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_image(){ # 在這裏需要接收三個參數,分別是: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_image $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鏡像服務等等,哈哈,好了,等啥呢?,關注我吧,後面的會更加精彩的。