企業級虛擬化實戰之KVM——shell腳本實現虛擬機安裝、管理、快照、存儲池、批量創建

問題背景

使用shell或者python腳本完成KVM虛擬機的批量創建,要求如下:
(1)腳本需要人機交互,當輸入虛擬機數量,虛擬機規格參數後,即可批量創建相應機器;
(2)使用EXP技術從網絡安裝虛擬機,創建多個時使用複製原理;
(3)腳本實現虛擬機生命週期管理,即可實現關機,啓動,快照,從快照啓動等等。

README.txt

本程序實現了虛擬機安裝、虛擬機管理、快照管理、存儲池管理、批量創建虛擬機功能

# cat README.txt
一、使用說明
1.解壓本程序到任意目錄
2.配置符合實際的變量信息
    2.1 虛擬機安裝 lib/install_vars    #虛擬機安裝依賴於PXE-kickstart
        *install_source="ftp://192.168.213.163/centos7u7" #安裝源
        *extra_args="ks=ftp://192.168.213.163/centos-7-ks.cfg" #kickstart配置文件
        其他變量可按需要配置
    2.2 批量創建虛擬機 lib/batch_install_vars #批量創建虛擬機需要後備鏡像
        *dir=/data/vmdisk   #批量創建的虛擬機鏡像存儲目錄
        *backup_img=${dir}/centos7u4.qcow2  #後備鏡像
3.執行主程序main.sh啓動程序

二、程序開發目錄
zhao_manage_kvm/
|-- etc                     #程序執行目錄
|   |-- batch_install_vm.sh #批量創建虛擬機程序
|   |-- install_vm.sh       #虛擬機安裝程序
|   |-- manage_pool.sh      #虛擬機管理程序
|   |-- manage_snapshot.sh  #虛擬機快照管理程序
|   `-- manage_vm.sh        #存儲池管理程序
|-- lib                     #程序配置目錄
|   |-- batch_install_vars  #批量創建虛擬機所需變量(請根據實際修改)
|   |-- install_vars        #虛擬機安裝所需變量(請根據實際修改)
    `-- template.xml        #虛擬機配置文件模板
|-- main.sh                 #主程序入口
`-- README.txt              #使用說明

2 directories, 10 files

三、程序功能
1.虛擬機安裝
2.虛擬機管理
|-- 2.1 啓動虛擬機
|-- 2.2 查看虛擬機信息
|-- 2.3 VNC連接虛擬機
|-- 2.4 設置開機啓動
|-- 2.5 取消開機啓動
|-- 2.6 關閉虛擬機
|-- 2.7 強制關閉虛擬機
|-- 2.8 刪除虛擬機
`-- 2.9 返回上一級菜單
3.虛擬機快照管理
|-- 3.1 創建虛擬機快照
|-- 3.2 查看虛擬機快照信息
|-- 3.3 查看快照詳細信息
|-- 3.4 還原虛擬機快照
|-- 3.5 刪除虛擬機快照
`-- 3.6 返回上一級菜單
4.存儲池管理
|-- 4.1 創建本地存儲池
|-- 4.2 啓動存儲池
|-- 4.3 設置存儲池自啓動
|-- 4.4 查看存儲池信息
|-- 4.5 刪除存儲池
`-- 4.6 返回上一級菜單
5.批量創建虛擬機
6.退出

問題解決

1.隨機MAC地址

錯誤:從/etc/libvirt/qemu/ybc.xml定義域失敗
錯誤:XML錯誤:意外單播mac地址,找到多播'cb:20:63:79:9d:78'

隨機生成的MAC地址是多播,無法正常定義虛擬機

#vm_mac=`openssl rand -hex 6 | sed -E "s/(..)/\1:/g; s/:$//"`
vm_mac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null |md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"

在這裏插入圖片描述

2.sed裏使用變量

sed -ri "/vm_port/ s/vm_port/${vm_port}/" ${conf_file}

sed後面的表達式一般用單引號,需要使用變量時可以使用雙引號

3.sed裏使用轉義符

sed:-e 表達式 #1,字符 20:“s”的未知選項

變量vm_img=/data/vmdisk/test.img是一個路徑,sed無法識別,要進行轉義處理

[root@7u4-test ~]# vm_img=/data/vmdisk/test.img
[root@7u4-test ~]# cat test
vm_img
[root@7u4-test ~]# sed -ri "/vm_img/ s/vm_img/${vm_img}/" test
sed:-e 表達式 #1,字符 20:“s”的未知選項
[root@7u4-test ~]# vm_img0=`echo ${vm_img}|sed 's#\/#\\\/#g'`	#必須是單引號
[root@7u4-test ~]# echo $vm_img0
\/data\/vmdisk\/test.img
[root@7u4-test ~]# sed -ri "/vm_img/ s/vm_img/${vm_img0}/" test
[root@7u4-test ~]# cat test
/data/vmdisk/test.img

https://blog.csdn.net/qq_34629671/article/details/54233064

4.PXE裝機報錯Can't mount root filesystem

PXE裝機報錯,OSError:No space left on device;Warning:Can't mount root filesystem;Warning:/dev/root dose not exist
在這裏插入圖片描述在PXE自動裝機時,警告寫入空間不足,是內存太小(1G),做PXE裝機,客戶機要給足夠的內存,至少2個G,安裝完成後可以動態降低內存

5.CentOS7.6圖形化界面中文顯示亂碼

#安裝中文包
yum install kde-l10n-Chinese
#安裝glibc-common
yum reinstall glibc-common
#查看系統是否支持中文包
locale -a |grep zh
#修改/etc/locale.conf(localectl set-locale LANG=zh_CN.UTF-8)
LANG="zh_CN.utf8"
#重啓
reboot

使用示例

1.虛擬機安裝(虛擬機安裝依賴於PXE-kickstart)
在這裏插入圖片描述
通過 vncviewer 192.168.213.171:5940 查看安裝過程,安裝完成後VNC會自動斷開連接(測試使用時間6min),控制檯會顯示Install Vm Sucessed
在這裏插入圖片描述2.虛擬機管理
在這裏插入圖片描述在這裏插入圖片描述輸入虛擬機名稱會自動獲取VNC端口
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述3.虛擬機快照管理
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述4.存儲池管理
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述5.批量創建虛擬機(批量創建虛擬機需要後備鏡像)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章