博客 / 詳情

返回

# 適合小企業使用的KVM虛擬機管理工具:zzxia-kvm-manage

背景:

我們日常在管理KVM虛擬機主要使用的功能是批量克隆、修改、刪除、啓動、關閉KVM虛擬機,其中克隆、修改是最為重要的功能,因為其他功能我們用virt-manager也可以方便的操作,比如啓動、關閉。雖然virt-manager也可以實現克隆、修改之類的操作,但是你若有一大批需要創建的虛擬機,那麼它將是痛苦的,而zzxia-kvm-manage項目就是為了解決這個問題,你只需要通過編輯一個markdown表格文件就可以實現批量虛擬機的克隆和IP地址修改之類的預設操作,在此過程中無需人工干預,省心省力。項目地址:https://gitee.com/zhf_sy/zzxia-kvm-manage

[toc]

1 介紹

批量克隆、修改、刪除、啓動、自動啓動、關閉KVM虛擬機。適合小企業使用。

1.1 功能:

  1. 克隆虛擬機:通過編輯my_vm.list文件定義虛擬機信息,然後運行vm-clone.sh,選擇克隆模板,然後按照my_vm.list清單克隆出想要的虛擬機
  2. 修改虛擬機信息:【主機名、IP、IP子網掩碼、網關、域名、DNS】,一般主要配合vm-clone.sh使用,也可以單獨使用
  3. 批量啓動指定虛擬機;批量啓動清單中的虛擬機;批量啓動選擇的虛擬機
  4. 批量設置自動啓動指定虛擬機;批量設置自動啓動清單中的虛擬機;批量設置自動啓動選擇的虛擬機
  5. 批量關閉指定虛擬機;批量關閉清單中的虛擬機;批量關閉選擇的虛擬機
  6. 批量刪除指定虛擬機;批量刪除清單中的虛擬機;批量刪除選擇的虛擬機

1.2 喜歡她,就滿足她:

  1. 【Star】她,讓她看到你是愛她的;
  2. 【Watching】她,時刻感知她的動態;
  3. 【Fork】她,為她增加新功能,修Bug,讓她更加卡哇伊;
  4. 【Issue】她,告訴她有哪些小脾氣,她會改的,手動小綿羊;
  5. 【打賞】她,為她買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 最後

好用

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.