背景:
我們日常在管理KVM虛擬機主要使用的功能是批量克隆、修改、刪除、啓動、關閉KVM虛擬機,其中克隆、修改是最為重要的功能,因為其他功能我們用virt-manager也可以方便的操作,比如啓動、關閉。雖然virt-manager也可以實現克隆、修改之類的操作,但是你若有一大批需要創建的虛擬機,那麼它將是痛苦的,而zzxia-kvm-manage項目就是為了解決這個問題,你只需要通過編輯一個markdown表格文件就可以實現批量虛擬機的克隆和IP地址修改之類的預設操作,在此過程中無需人工干預,省心省力。項目地址:https://gitee.com/zhf_sy/zzxia-kvm-manage
[toc]
1 介紹
批量克隆、修改、刪除、啓動、自動啓動、關閉KVM虛擬機。適合小企業使用。
1.1 功能:
- 克隆虛擬機:通過編輯my_vm.list文件定義虛擬機信息,然後運行vm-clone.sh,選擇克隆模板,然後按照my_vm.list清單克隆出想要的虛擬機
- 修改虛擬機信息:【主機名、IP、IP子網掩碼、網關、域名、DNS】,一般主要配合vm-clone.sh使用,也可以單獨使用
- 批量啓動指定虛擬機;批量啓動清單中的虛擬機;批量啓動選擇的虛擬機
- 批量設置自動啓動指定虛擬機;批量設置自動啓動清單中的虛擬機;批量設置自動啓動選擇的虛擬機
- 批量關閉指定虛擬機;批量關閉清單中的虛擬機;批量關閉選擇的虛擬機
- 批量刪除指定虛擬機;批量刪除清單中的虛擬機;批量刪除選擇的虛擬機
1.2 喜歡她,就滿足她:
- 【Star】她,讓她看到你是愛她的;
- 【Watching】她,時刻感知她的動態;
- 【Fork】她,為她增加新功能,修Bug,讓她更加卡哇伊;
- 【Issue】她,告訴她有哪些小脾氣,她會改的,手動小綿羊;
- 【打賞】她,為她買jk;
<img src="https://gitee.com/zhf_sy/pic-bed/raw/master/dao.png" alt="打賞" style="zoom:40%;" />
2 軟件架構
Linux shell
3 安裝教程
克隆到KVM服務器上即可
4 使用説明
請使用-h|--help參數運行sh腳本即可看到使用幫助
除了kvm,你還需要安裝guestfs,在centos7上運行yum install -y libguestfs-tools
4.1 環境變量文件kvm.env
基於kvm.env.sample創建環境變量文件kvm.env,根據你的環境修改相關環境變量,這個非常重要,否則你可能運行出錯
$ cat kvm.env.sample
#!/bin/bash
# 靜默方式
export QUIET='no' #--- yes|no
# KVM環境參數
export KVM_XML_PATH='/etc/libvirt/qemu' #-- KVM虛擬XML配置文件路徑(CENTOS下XML的默認路徑,如果是UBUNTU,請修改)
# 模板虛擬機參數
/dev/sda1】
export VM_NIC_CONF_FILE='/etc/sysconfig/network-scripts/ifcfg-eth0' #-- 模板虛擬機CentOS系統內的網卡配置文件
# 新虛擬機默認參數,特殊值可以在【my_vm.list】中指定
export VM_DEFAULT_DNS='192.168.11.3,192.168.11.4' #-- 默認DNS,最多兩個DNS服務器,中間用【,】分隔,不要有空格
export VM_DEFAULT_DOMAIN='zjlh.lan' #-- 默認域名
export VM_DEFAULT_DISK_IMG_PATH='/var/lib/libvirt/images' #-- 虛擬機磁盤文件默認路徑
4.2 虛擬機列表文件my_vm.list
基於my_vm.list.sample創建虛擬機列表文件my_vm.list(默認,文件名可以是其他名稱),根據自己的需要定製虛擬機信息,以逗號分隔,用#註釋掉不需要的行:
$ cat my_vm.list.sample
### 虛擬機克隆清單
###.
### 2【名稱:NAME】= [自定義]
### 既是虛擬機名稱,也是虛擬機主機名
###..
### 3【CPU:CPU】= [自定義數量]
###..
### 4【內存:MEM】= [自定義數量]
### 單位是GB
###..
### 5【網卡:NIC】= [自定義]
###. KVM網卡名稱
###..
### 6【IP地址:IP】= [自定義]
###. IP地址
###..
### 7【IP掩碼:IP_MASK】= [自定義]
###. IP地址掩碼,例如:24、16、8、12
###..
### 8【IP網關:IP_GATEWAY】= [自定義]
###. IP網關
###..
### 9【DNS:DNS】= < 自定義1 <,自定義2> >
###. 可以定義0~2個,例如:1.1.1.1, 2.2.2.2,或者8.8.8.8
###.
### 10【域名:DOMAIN】= <自定義>
###. 虛擬機的域名
###.
### 11【磁盤IMG路徑:IMG_PATH】= <自定義>
###. 虛擬機KVM磁盤文件存放路徑,例如:/disk2/images
###.
### 12【備註:NOTE】= [ 自定義 ]
### 説明信息
###.
###
### 暫時不需要的行用'#'註釋掉
###
###
#| NAME | CPU | MEM | NIC | IP | IP_MASK | IP_GATEWAY | DNS | DOMAIN | IMG_PATH | NOTE |
#| **名稱** | CPU | 內存 | 網卡 | **IP地址** | IP掩碼 | **IP網關** | **DNS** | **域名** | **磁盤IMG路徑** | **備註** |
#| ---------------------- | ---- | ---- | ---- | -------------- | ------- | ------------ | -------------------------- | -------- | --------------------------- | |
| v-192-168-11-190-deploy | 1 | 2 | br1 | 192.168.11.190 | 24 | 192.168.11.1 | | | | |
| v-192-168-11-191-mast | 4 | 8 | br1 | 192.168.11.191 | 24 | 192.168.11.1 | | | | |
| v-192-168-11-192-node | 4 | 8 | br1 | 192.168.11.192 | 24 | 192.168.11.1 | 8.8.8.8 | zj.lan | /var/lib/libvirt/images22 | |
| v-192-168-11-193-node | 4 | 8 | br1 | 192.168.11.193 | 24 | 192.168.11.1 | 1.1.1.1, 2.2.2.2 | hb.lan | | |
| v-192-168-11-194-etcd | 2 | 4 | br1 | 192.168.11.194 | 24 | 192.168.11.1 | | | | |
#| v-192-168-11-195-etcd | 2 | 4 | br1 | 192.168.11.195 | 24 | 192.168.11.1 | | | | |
#| v-192-168-11-196-etcd | 2 | 4 | br1 | 192.168.11.196 | 24 | 192.168.11.1 | | | | |
| v-192-168-11-197-repo | 2 | 4 | br1 | 192.168.11.197 | 24 | 192.168.11.1 | | | /disk2/images | |
4.3 克隆
克隆前的建議:
- 建議先製作好一個較為完美的模板虛擬機,然後在克隆時選擇使用他
- 查看KVM環境變量文件
kvm.env,看是否與你的實際情況相同,否則請修改它
$ ./vm-clone.sh --help
用途:KVM上虛擬機克隆,並修改相關信息(主機名、IP、IP子網掩碼、網關、域名、DNS)
依賴:
./vm-img-modify.sh
注意:本腳本在centos 7上測試通過
用法:
./vm-clone.sh [-h|--help]
./vm-clone.sh <-f|--file {清單文件}> < -q|--quiet [-t|--template {虛擬機模板}] >
./vm-clone.sh <-f|--file {清單文件}> <-t|--template {虛擬機模板}>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-f|--file 虛擬機清單文件,默認為【./my_vm.list】,請基於【my_vm.list.sample】創建
-q|--quiet 靜默方式
-t|--templat 指定虛擬機模板
示例:
#
./vm-clone.sh -h
# 一般
./vm-clone.sh #--- 默認虛擬機清單文件【./my_vm.list】,非靜默方式,手動選擇模板
./vm-clone.sh -t v-centos-1 #--- 默認虛擬機清單文件【./my_vm.list】,非靜默方式,基於模板【v-centos-1】創建
# 指定vm清單文件
./vm-clone.sh -f xxx.list #--- 使用虛擬機清單文件【xxx.list】,非靜默方式,手動選擇模
./vm-clone.sh -f xxx.list -t v-centos-1 #--- 使用虛擬機清單文件【xxx.list】,非靜默方式,基於模板【v-centos-1】創建
# 靜默方式
./vm-clone.sh -q -t v-centos-1 #--- 默認虛擬機清單文件【./my_vm.list】,靜默方式,基於模板【v-centos-1】創建
./vm-clone.sh -q -t v-centos-1 -f xxx.list #--- 使用虛擬機清單文件【xxx.list】,靜默方式,基於模板【v-centos-1】創建
4.4 修改vm信息
$ ./vm-img-modify.sh
用途:修改KVM虛擬機主機名及網卡信息(主機名、IP、IP子網掩碼、網關、域名、DNS)
依賴:
注意:本腳本在centos 7上測試通過
用法:
./vm-img-modify.sh [-h|--help]
./vm-img-modify.sh <-q|--quiet> [ {VM_NAME} {NEW_IP} {NEW_IP_MASK} {NEW_GATEWAY} ] <{NEW_DOMAIN}> <{NEW_DNS1}<,{NEW_DNS2}>>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-q|--quiet 靜默方式
示例:
#
./vm-img-modify.sh -h #--- 幫助
# 一般
./vm-img-modify.sh v-192-168-1-3-nexxxx 192.168.1.3 24 192.168.11.1 zjlh.lan 192.168.11.3,192.168.11.4
./vm-img-modify.sh v-192-168-1-3-nexxxx 192.168.1.3 24 192.168.11.1 zjlh.lan 192.168.11.3
./vm-img-modify.sh v-192-168-1-3-nexxxx 192.168.1.3 24 192.168.11.1
# 靜默方式
./vm-img-modify.sh -q v-192-168-1-3-nexxxx 192.168.1.3 24 192.168.11.1 zjlh.lan 192.168.11.3,192.168.11.4
4.5 啓動(或自動啓動)虛擬機
$ ./vm-start.sh -h
用途:啓動虛擬機;設置虛擬機自動啓動
依賴:
注意:本腳本在centos 7上測試通過
用法:
./vm-start.sh [-h|--help]
./vm-start.sh [-l|--list]
./vm-start.sh [ <-s|--start> <-a|--autostart> ] [ [-f|--file {清單文件}] | [-S|--select] | [-A|--ARG {虛擬機1} {虛擬機2} ... {虛擬機n}] ]
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出KVM上的虛擬機
-s|--start 啓動虛擬機
-a|--autostart 開啓自動啓動虛擬機
-f|--file 從文件選擇虛擬機(默認),默認文件為【./my_vm.list】,請基於【my_vm.list.sample】創建
-S|--select 從KVM中選擇虛擬機
-A|--ARG 從參數獲取虛擬機
示例:
#
./vm-start.sh -h #--- 幫助
./vm-start.sh -l #--- 列出KVM上的虛擬機
# 一般(默認從默認文件)
./vm-start.sh -s #--- 啓動默認虛擬機清單文件【./my_vm.list】中的虛擬機
./vm-start.sh -s -a #--- 啓動默認虛擬機清單文件【./my_vm.list】中的虛擬機,並設置為自動啓動
./vm-start.sh -a #--- 自動啓動默認虛擬機清單文件【./my_vm.list】中的虛擬機
# 從指定文件
./vm-start.sh -s -f xxx.list #--- 啓動虛擬機清單文件【xxx.list】中的虛擬機
./vm-start.sh -a -f xxx.list #--- 自動啓動虛擬機清單文件【xxx.list】中的虛擬機
# 我選擇
./vm-start.sh -s -S #--- 啓動我選擇的虛擬機
./vm-start.sh -a -S #--- 自動啓動我選擇的虛擬機
# 指定虛擬機
./vm-start.sh -s -A vm1 vm2 #--- 啓動虛擬機【vm1、vm2】
./vm-start.sh -a -A vm1 vm2 #--- 自動啓動虛擬機【vm1、vm2】
4.6 關閉虛擬機
$ ./vm-shutdown.sh -h
用途:shutdown虛擬機
依賴:
注意:本腳本在centos 7上測試通過
用法:
./vm-shutdown.sh [-h|--help]
./vm-shutdown.sh [-l|--list]
./vm-shutdown.sh <-q|--quiet> [ [-f|--file {清單文件}] | [-S|--select] | [-A|--ARG {虛擬機1} {虛擬機2} ... {虛擬機n}] ]
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出KVM上的虛擬機
-f|--file 從文件選擇虛擬機(默認),默認文件為【./my_vm.list】,請基於【my_vm.list.sample】創建
-S|--select 從KVM中選擇虛擬機
-A|--ARG 從參數獲取虛擬機
-q|--quiet 靜默方式
示例:
#
./vm-shutdown.sh -h #--- 幫助
./vm-shutdown.sh -l #--- 列出KVM上的虛擬機
# 一般(默認從默認文件)
./vm-shutdown.sh #--- shutdown默認虛擬機清單文件【./my_vm.list】中的虛擬機
# 從指定文件
./vm-shutdown.sh -f xxx.list #--- shutdown虛擬機清單文件【xxx.list】中的虛擬機
# 我選擇
./vm-shutdown.sh -S #--- shutdown我選擇的虛擬機
# 指定虛擬機
./vm-shutdown.sh -A vm1 vm2 #--- shutdown虛擬機【vm1、vm2】
# 靜默方式
./vm-shutdown.sh -q #--- shutdown默認虛擬機清單文件【./my_vm.list】中的虛擬機,用靜默方式
./vm-shutdown.sh -q -f xxx.list #--- shutdown虛擬機清單文件【xxx.list】中的虛擬機,用靜默方式
./vm-shutdown.sh -q -S #--- shutdown我選擇的虛擬機,用靜默方式
./vm-shutdown.sh -q -A vm1 vm2 #--- shutdown虛擬機【vm1、vm2】,用靜默方式
4.7 刪除虛擬機
$ ./vm-rm.sh -h
用途:刪除虛擬機
依賴:
注意:本腳本在centos 7上測試通過
用法:
./vm-rm.sh [-h|--help]
./vm-rm.sh [-l|--list]
./vm-rm.sh <-q|--quiet> [ [-f|--file {清單文件}] | [-S|--select] | [-A|--ARG {虛擬機1} {虛擬機2} ... {虛擬機n}] ]
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
-l|--list 列出KVM上的虛擬機
-f|--file 從文件選擇虛擬機(默認),默認文件為【./my_vm.list】,請基於【my_vm.list.sample】創建
-S|--select 從KVM中選擇虛擬機
-A|--ARG 從參數獲取虛擬機
-q|--quiet 靜默方式
示例:
#
./vm-rm.sh -h #--- 幫助
./vm-rm.sh -l #--- 列出KVM上的虛擬機
# 一般(默認從默認文件)
./vm-rm.sh #--- 刪除默認虛擬機清單文件【./my_vm.list】中的虛擬機
# 從指定文件
./vm-rm.sh -f xxx.list #--- 刪除虛擬機清單文件【xxx.list】中的虛擬機
# 我選擇
./vm-rm.sh -S #--- 刪除我選擇的虛擬機
# 指定虛擬機
./vm-rm.sh -A vm1 vm2 #--- 刪除虛擬機【vm1、vm2】
# 靜默方式
./vm-rm.sh -q #--- 刪除默認虛擬機清單文件【./my_vm.list】中的虛擬機,用靜默方式
./vm-rm.sh -q -f xxx.list #--- 刪除虛擬機清單文件【xxx.list】中的虛擬機,用靜默方式
./vm-rm.sh -q -S #--- 刪除我選擇的虛擬機,用靜默方式
./vm-rm.sh -q -A vm1 vm2 #--- 刪除虛擬機【vm1、vm2】,用靜默方式
4.8 列出已有虛擬機
$ ./vm-list.sh -h
用途:列出KVM上的虛擬機
依賴:
注意:本腳本在centos 7上測試通過
用法:
./vm-list.sh <-h|--help>
參數説明:
$0 : 代表腳本本身
[] : 代表是必選項
<> : 代表是可選項
| : 代表左右選其一
{} : 代表參數值,請替換為具體參數值
% : 代表通配符,非精確值,可以被包含
#
-h|--help 此幫助
示例:
#
./vm-list.sh -h #--- 幫助
./vm-list.sh #--- 列出KVM上的虛擬機
4.8 簡單管理虛擬機命令
看名字就知道他的用途了
./easy-save-all-online-vm-list-to-file.sh
./easy-save-all-vm-list-to-file.sh
./easy-start-spec-vm-list.sh
./easy-shutdown-all-online-vm.sh
./easy-shutdown-spec-vm-list.sh
./easy-force-shutdown-spec-vm-list.sh
5 最後
好用