上一篇部落格我們主要聊了下virsh 管理kvm虛擬機器的命令相關用法和說明,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13508231.html;今天我們來繼續說virsh 管理kvm虛擬機器的話題;
1、virsh 監控kvm虛擬機器相關命令
virsh domblklist:列出指定虛擬機器上的磁碟資訊
[root@node1 ~]# virsh help domblklist NAME domblklist - 列出所有域塊 SYNOPSIS domblklist <domain> [--inactive] [--details] DESCRIPTION 獲取域塊裝置小結 OPTIONS [--domain] <string> domain name, id or uuid --inactive 獲取不活躍而不是執行的配置 --details type 和 device 值的附加顯示 [root@node1 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 3 centos7.0 running 4 c2 running 6 generic running [root@node1 ~]# virsh domblklist c2 目標 源 ------------------------------------------------ vda /kvm/images/c2.qcow2 hda - [root@node1 ~]# virsh domblklist generic 目標 源 ------------------------------------------------ hda /kvm/images/cirros-0.5.0-x86_64-disk.img [root@node1 ~]#
virsh domiflist:列出指定虛擬機器上的所有網路卡
[root@node1 ~]# virsh help domiflist NAME domiflist - 列出所有域虛擬介面 SYNOPSIS domiflist <domain> [--inactive] DESCRIPTION 獲取域虛擬介面小結 OPTIONS [--domain] <string> domain name, id or uuid --inactive 獲取不活躍而不是執行的配置 [root@node1 ~]# virsh domiflist generic 介面 型別 源 型號 MAC ------------------------------------------------------- vnet2 network default rtl8139 52:54:00:3e:3f:71 [root@node1 ~]# virsh domiflist centos7.0 介面 型別 源 型號 MAC ------------------------------------------------------- vnet0 network default virtio 52:54:00:e3:8d:11 [root@node1 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.41 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::20c:29ff:fe9a:dbd6 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:9a:db:d6 txqueuelen 1000 (Ethernet) RX packets 113557 bytes 34709850 (33.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 111108 bytes 27361452 (26.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 132700 bytes 348628216 (332.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 132700 bytes 348628216 (332.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:45:06:15 txqueuelen 1000 (Ethernet) RX packets 2042 bytes 130515 (127.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1028 bytes 83137 (81.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::fc54:ff:fee3:8d11 prefixlen 64 scopeid 0x20<link> ether fe:54:00:e3:8d:11 txqueuelen 1000 (Ethernet) RX packets 571 bytes 46596 (45.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 11055 bytes 593226 (579.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::fc54:ff:fee3:8521 prefixlen 64 scopeid 0x20<link> ether fe:54:00:e3:85:21 txqueuelen 1000 (Ethernet) RX packets 314 bytes 24074 (23.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6210 bytes 333740 (325.9 KiB) TX errors 0 dropped 4072 overruns 0 carrier 0 collisions 0 vnet2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::fc54:ff:fe3e:3f71 prefixlen 64 scopeid 0x20<link> ether fe:54:00:3e:3f:71 txqueuelen 1000 (Ethernet) RX packets 741 bytes 56211 (54.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4711 bytes 248155 (242.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@node1 ~]#
提示:從上面的資訊可以看到kvm虛擬機器上的網路卡都對應在宿主機上的一個虛擬網路卡 ;
virsh domifaddr:獲取指定虛擬機器上的ip地址
[root@node1 ~]# virsh help domifaddr NAME domifaddr - Get network interfaces' addresses for a running domain SYNOPSIS domifaddr <domain> [--interface <string>] [--full] [--source <string>] DESCRIPTION Get network interfaces' addresses for a running domain OPTIONS [--domain] <string> domain name, id or uuid --interface <string> network interface name --full always display names and MACs of interfaces --source <string> address source: 'lease', 'agent', or 'arp' [root@node1 ~]# virsh domifaddr c2 名稱 MAC 地址 Protocol Address ------------------------------------------------------------------------------- vnet1 52:54:00:e3:85:21 ipv4 192.168.122.168/24 [root@node1 ~]# virsh domifaddr centos7.0 名稱 MAC 地址 Protocol Address ------------------------------------------------------------------------------- vnet0 52:54:00:e3:8d:11 ipv4 192.168.122.222/24 [root@node1 ~]# virsh domifaddr generic 名稱 MAC 地址 Protocol Address ------------------------------------------------------------------------------- vnet2 52:54:00:3e:3f:71 ipv4 192.168.122.4/24 [root@node1 ~]#
virsh domifstat:統計指定虛擬機器上的網路卡狀態資訊
[root@node1 ~]# virsh help domifstat NAME domifstat - 獲得域網路介面狀態 SYNOPSIS domifstat <domain> <interface> DESCRIPTION 獲得執行域的網路介面狀態。 OPTIONS [--domain] <string> domain name, id or uuid [--interface] <string> interface device specified by name or MAC Address [root@node1 ~]# virsh domiflist c2 介面 型別 源 型號 MAC ------------------------------------------------------- vnet1 network default virtio 52:54:00:e3:85:21 [root@node1 ~]# virsh domifstat c2 vnet1 vnet1 rx_bytes 345156 vnet1 rx_packets 6429 vnet1 rx_errs 0 vnet1 rx_drop 4072 vnet1 tx_bytes 24206 vnet1 tx_packets 316 vnet1 tx_errs 0 vnet1 tx_drop 0 [root@node1 ~]#
virsh dominfo:獲取指定虛擬機器的相關資訊
[root@node1 ~]# virsh help dominfo NAME dominfo - 域資訊 SYNOPSIS dominfo <domain> DESCRIPTION 返回這個域的基本資訊。 OPTIONS [--domain] <string> domain name, id or uuid [root@node1 ~]# virsh dominfo c2 Id: 4 名稱: c2 UUID: 10d61aa8-b0fa-4433-a733-00a8721bee01 OS 型別: hvm 狀態: running CPU: 2 CPU 時間: 188.1s 最大記憶體: 2097152 KiB 使用的記憶體: 2097152 KiB 持久: 是 自動啟動: 禁用 管理的儲存: 否 安全性模式: none 安全性 DOI: 0 [root@node1 ~]#
virsh dommemstat:獲取指定虛擬機器記憶體相關狀態資訊
[root@node1 ~]# virsh help dommemstat NAME dommemstat - 獲取域的記憶體統計 SYNOPSIS dommemstat <domain> [--period <number>] [--config] [--live] [--current] DESCRIPTION 獲取執行域的記憶體統計 OPTIONS [--domain] <string> domain name, id or uuid --period <number> 以秒為單位設定集合期限 --config 影響下一次引導 --live 影響執行的域 --current 影響當前域 [root@node1 ~]# virsh dommemstat c2 actual 2097152 swap_in 0 swap_out 0 major_fault 201 minor_fault 176924 unused 1761832 available 1883456 last_update 1597490486 rss 455384 [root@node1 ~]# virsh dommemstat centos7.0 actual 2097152 swap_in 0 swap_out 0 major_fault 179 minor_fault 169193 unused 1761272 available 1883456 last_update 1597480749 rss 560324 [root@node1 ~]#
virsh domstate:獲取指定虛擬機器的狀態資訊
[root@node1 ~]# virsh help domstate NAME domstate - 域狀態 SYNOPSIS domstate <domain> [--reason] DESCRIPTION 返回某個域的狀態。 OPTIONS [--domain] <string> domain name, id or uuid --reason 同時輸出狀態原因 [root@node1 ~]# virsh domstate centos7.0 running [root@node1 ~]# virsh domstate centos7.0 --reason running (已引導) [root@node1 ~]#
virsh domstats:顯示指定虛擬機器的詳細狀態資訊,如果不知道虛擬機器表示顯示當前宿主機上的所有虛擬機器的詳細狀態資訊
[root@node1 ~]# virsh help domstats NAME domstats - get statistics about one or multiple domains SYNOPSIS domstats [--state] [--cpu-total] [--balloon] [--vcpu] [--interface] [--block] [--perf] [--list-active] [--list-inactive] [--list-persistent] [--list-transient] [--list-running] [--list-paused] [--list-shutoff] [--list-other] [--raw] [--enforce] [--backing] [--nowait] [<domain>]... DESCRIPTION Gets statistics about one or more (or all) domains OPTIONS --state report domain state --cpu-total report domain physical cpu usage --balloon report domain balloon statistics --vcpu report domain virtual cpu information --interface report domain network interface information --block report domain block device statistics --perf report domain perf event statistics --list-active list only active domains --list-inactive list only inactive domains --list-persistent list only persistent domains --list-transient list only transient domains --list-running list only running domains --list-paused list only paused domains --list-shutoff list only shutoff domains --list-other list only domains in other states --raw do not pretty-print the fields --enforce enforce requested stats parameters --backing add backing chain information to block stats --nowait report only stats that are accessible instantly <domain> list of domains to get stats for [root@node1 ~]# virsh domstats centos7.0 Domain: 'centos7.0' state.state=1 state.reason=1 cpu.time=108764965089 cpu.user=850000000 cpu.system=14010000000 balloon.current=2097152 balloon.maximum=2097152 balloon.swap_in=0 balloon.swap_out=0 balloon.major_fault=187 balloon.minor_fault=174029 balloon.unused=1758704 balloon.available=1883456 balloon.last-update=1597581679 balloon.rss=561212 vcpu.current=2 vcpu.maximum=2 vcpu.0.state=1 vcpu.0.time=39050000000 vcpu.0.wait=0 vcpu.1.state=1 vcpu.1.time=14570000000 vcpu.1.wait=0 net.count=1 net.0.name=vnet1 net.0.rx.bytes=142006 net.0.rx.pkts=2577 net.0.rx.errs=0 net.0.rx.drop=0 net.0.tx.bytes=17972 net.0.tx.pkts=222 net.0.tx.errs=0 net.0.tx.drop=0 block.count=2 block.0.name=vda block.0.path=/var/lib/libvirt/images/centos7.0.qcow2 block.0.rd.reqs=6517 block.0.rd.bytes=150312448 block.0.rd.times=32776473520 block.0.wr.reqs=647 block.0.wr.bytes=13009920 block.0.wr.times=10069609744 block.0.fl.reqs=238 block.0.fl.times=938612582 block.0.allocation=16855924224 block.0.capacity=21474836480 block.0.physical=21478379520 block.1.name=hda block.1.rd.reqs=3 block.1.rd.bytes=82 block.1.rd.times=227269 block.1.wr.reqs=0 block.1.wr.bytes=0 block.1.wr.times=0 block.1.fl.reqs=0 block.1.fl.times=0 block.1.allocation=0 block.1.physical=0 [root@node1 ~]#
提示:如果想知獲取某一物件的的詳細資訊可以在後面跟對應的選項來做過濾;
[root@node1 ~]# virsh domstats centos7.0 --interface --balloon Domain: 'centos7.0' balloon.current=2097152 balloon.maximum=2097152 balloon.swap_in=0 balloon.swap_out=0 balloon.major_fault=187 balloon.minor_fault=174029 balloon.unused=1758704 balloon.available=1883456 balloon.last-update=1597581679 balloon.rss=561468 net.count=1 net.0.name=vnet1 net.0.rx.bytes=148978 net.0.rx.pkts=2710 net.0.rx.errs=0 net.0.rx.drop=0 net.0.tx.bytes=18326 net.0.tx.pkts=227 net.0.tx.errs=0 net.0.tx.drop=0 [root@node1 ~]#
提示:如果指定多個選項,他們之間是或關係,就是隻顯示指定選項的內容;
virsh domif-getlink:獲取指定虛擬機器的指定介面狀態
[root@node1 ~]# virsh help domif-getlink NAME domif-getlink - 獲取虛擬介面連結狀態 SYNOPSIS domif-getlink <domain> <interface> [--config] DESCRIPTION 獲取域虛擬介面連結狀態 OPTIONS [--domain] <string> domain name, id or uuid [--interface] <string> 介面失敗 (MAC 地址) --config 獲取持續介面狀態 [root@node1 ~]# virsh domif-getlink c2 vnet1 vnet1 up [root@node1 ~]#
virsh domblkinfo:獲取指定虛擬機器的磁碟大小資訊
[root@node1 ~]# virsh domblkinfo centos7.0 錯誤:command 'domblkinfo' requires <device> option [root@node1 ~]# [root@node1 ~]# virsh help domblkinfo NAME domblkinfo - 域塊裝置大小資訊 SYNOPSIS domblkinfo <domain> [--device <string>] [--human] [--all] DESCRIPTION 獲取域塊裝置大小資訊 OPTIONS [--domain] <string> domain name, id or uuid --device <string> 阻止裝置 --human Human readable output --all display all block devices info [root@node1 ~]# virsh domblklist c2 目標 源 ------------------------------------------------ vda /kvm/images/c2.qcow2 hda - [root@node1 ~]# virsh domblkinfo c2 vda 容量: 21474836480 分配: 21478375424 物理: 21478375424 [root@node1 ~]# virsh domblkinfo c2 vda --human 容量: 20.000 GiB 分配: 20.003 GiB 物理: 20.003 GiB [root@node1 ~]#
virsh domblkerror:列出指定虛擬機器上的指定磁碟的錯誤資訊
[root@node1 ~]# virsh help domblkerror NAME domblkerror - 在塊裝置中顯示錯誤 SYNOPSIS domblkerror <domain> DESCRIPTION 顯示塊裝置錯誤 OPTIONS [--domain] <string> domain name, id or uuid [root@node1 ~]# virsh domblkerror c2 未找到錯誤 [root@node1 ~]# virsh domblkerror centos7.0 未找到錯誤 [root@node1 ~]#
virsh domcontrol:獲取指定虛擬機器上的控制介面狀態資訊
[root@node1 ~]# virsh help domcontrol NAME domcontrol - 域控制介面狀態 SYNOPSIS domcontrol <domain> DESCRIPTION 向域返回控制介面狀態 OPTIONS [--domain] <string> domain name, id or uuid [root@node1 ~]# virsh domcontrol centos7.0 確定 [root@node1 ~]# virsh domcontrol generic 確定 [root@node1 ~]#
提示:我這裡顯示的是中文,正常情況就是ok狀態;
以上命令主要是用於監控虛擬機器上的各種狀態相關的命令,我們可以基於上面的命令寫成指令碼,然後實現批量的獲取多個虛擬機器的狀態資訊;
2、virsh管理網路相關命令
virsh net-list:列出網路
[root@node1 ~]# virsh help net-list NAME net-list - 列出網路 SYNOPSIS net-list [--inactive] [--all] [--persistent] [--transient] [--autostart] [--no-autostart] [--uuid] [--name] [--table] DESCRIPTION 返回網路列表 OPTIONS --inactive 列出不活躍的網路 --all 列出不活躍和活躍的網路 --persistent 列出持久網路 --transient 列出臨時網路 --autostart 列出啟用 autostart 的網路 --no-autostart 列出禁用 autostart 的網路 --uuid 只列出 uuid --name list network names only --table 列出表格(預設) [root@node1 ~]# virsh net-list 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 [root@node1 ~]#
提示:預設是以表格的形式列出啟用的網路,如果要指定列出某種狀態的網路,後面可以跟選項;從上面的資訊可以看到當前只有一個預設的網路,處於活躍狀態並且是自動啟動;
virsh net-dumpxml:顯示指定網路的配置檔案內容到標準輸出;
[root@node1 ~]# virsh help net-dumpxml NAME net-dumpxml - XML 中的網路資訊 SYNOPSIS net-dumpxml <network> [--inactive] DESCRIPTION 把網路資訊作為一個 XML 輸出到 stdout。 OPTIONS [--network] <string> 網路名或 uuid --inactive 顯示不活躍定義的 XML [root@node1 ~]# virsh net-dumpxml default <network connections='3'> <name>default</name> <uuid>958c004e-7aa9-483e-a79e-c62884e88a08</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:45:06:15'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network> [root@node1 ~]#
提示:通過上述命令我們可以把指定的某個網路匯出,然後基於這個網路檔案來當做模板檔案,此後如果要建立一個網路,我們直接複製這個模板,然後修改私有的資訊即可生成一個我們需要建立的網路的配置檔案;
virsh net-define:從指定xml配置檔案定義一個網路或者基於指定xml來修改現有網路;類似virsh define命令的用法;
示例:匯出現有配置,修改ip地址,然後基於這個匯出的配置來使用virsh net-define建立一個網路
[root@node1 ~]# virsh net-dumpxml default >default.xml [root@node1 ~]# cp default.xml test.xml [root@node1 ~]# diff default.xml test.xml 2,3c2 < <name>default</name> < <uuid>958c004e-7aa9-483e-a79e-c62884e88a08</uuid> --- > <name>test</name> 9,11c8,10 < <bridge name='virbr0' stp='on' delay='0'/> < <mac address='52:54:00:45:06:15'/> < <ip address='192.168.122.1' netmask='255.255.255.0'> --- > <bridge name='virbr1' stp='on' delay='0'/> > <mac address='52:54:00:45:06:16'/> > <ip address='192.168.12.1' netmask='255.255.255.0'> 13c12 < <range start='192.168.122.2' end='192.168.122.254'/> --- > <range start='192.168.12.2' end='192.168.12.254'/> [root@node1 ~]# cat test.xml <network connections='3'> <name>test</name> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr1' stp='on' delay='0'/> <mac address='52:54:00:45:06:16'/> <ip address='192.168.12.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.12.2' end='192.168.12.254'/> </dhcp> </ip> </network> [root@node1 ~]#
提示:通常我們需要修改網路的名稱,刪除uuid,讓其建立時自動生成,指定ip地址,修改mac地址以及dhcp地址池,網橋名稱以及網路的型別;
[root@node1 ~]# virsh help net-define NAME net-define - define an inactive persistent virtual network or modify an existing persistent one from an XML file SYNOPSIS net-define <file> DESCRIPTION Define or modify a persistent virtual network. OPTIONS [--file] <string> 檔案包括一個 XML網路描述 [root@node1 ~]# virsh net-define test.xml 從 test定義網路test.xml [root@node1 ~]# virsh net-list 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 [root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 不活躍 否 是 [root@node1 ~]#
提示:預設情況用define定義一個網路它並不會啟用;
virsh net-start:啟用指定網路
[root@node1 ~]# virsh help net-start NAME net-start - 開始一個(以前定義的)不活躍的網路 SYNOPSIS net-start <network> DESCRIPTION 開始一個網路. OPTIONS [--network] <string> 網路名或 uuid [root@node1 ~]# virsh net-start test 網路 test 已開始 [root@node1 ~]# virsh net-list 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 是 [root@node1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:9a:db:d6 brd ff:ff:ff:ff:ff:ff inet 192.168.0.41/24 brd 192.168.0.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe9a:dbd6/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000 link/ether 52:54:00:45:06:15 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000 link/ether 52:54:00:45:06:15 brd ff:ff:ff:ff:ff:ff 5: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 1000 link/ether fe:54:00:3e:3f:71 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fe3e:3f71/64 scope link valid_lft forever preferred_lft forever 6: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 1000 link/ether fe:54:00:e3:8d:11 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fee3:8d11/64 scope link valid_lft forever preferred_lft forever 7: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 1000 link/ether fe:54:00:e3:85:21 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fee3:8521/64 scope link valid_lft forever preferred_lft forever 8: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:45:06:16 brd ff:ff:ff:ff:ff:ff inet 192.168.12.1/24 brd 192.168.12.255 scope global virbr1 valid_lft forever preferred_lft forever 9: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN qlen 1000 link/ether 52:54:00:45:06:16 brd ff:ff:ff:ff:ff:ff [root@node1 ~]#
提示:可以看到指定test網路已經啟用並且在宿主機上建立了一個virbr1的網橋和virbr1-nic的網路卡,其實virbr1就是我們在配置檔案中指定的網橋,在配置檔案中指定的網橋必須未使用,如果指定網橋不存在則建立,而virbr1-nic這張網路卡就是直接橋接到virbr1上;
測試:建立一個基於test網路的虛擬機器,名為c3
[root@node1 ~]# cd /etc/libvirt/qemu/ [root@node1 ~]# ls autostart c2.xml centos7.0.xml generic.xml networks [root@node1 qemu]# cp c2.xml c3.xml [root@node1 qemu]# cd /kvm/images/ [root@node1 images]# ls c1.qcow2 c2.qcow2 cirros-0.5.0-x86_64-disk.img [root@node1 images]# cp c2.qcow2 c3.qcow2 [root@node1 images]# diff /etc/libvirt/qemu/c2.xml /etc/libvirt/qemu/c3.xml 9c9 < <name>c2</name> --- > <name>c3</name> 40c40 < <source file='/kvm/images/c2.qcow2'/> --- > <source file='/kvm/images/c3.qcow2'/> 73,74c73,74 < <mac address='52:54:00:e3:85:21'/> < <source network='default'/> --- > <mac address='52:54:00:e3:86:e1'/> > <source network='test'/> [root@node1 images]# virsh define /etc/libvirt/qemu/c3.xml 定義域 c3(從 /etc/libvirt/qemu/c3.xml) [root@node1 images]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 1 generic running 2 centos7.0 running 3 c2 running - c3 關閉 [root@node1 images]# virsh start c3 域 c3 已開始 [root@node1 images]#
驗證:連線至c3控制檯,檢視其ip地址是否是test網路?是否能夠ping通virbr1?閘道器是否是virbr1?
[root@node1 images]# virsh domifaddr c3 名稱 MAC 地址 Protocol Address ------------------------------------------------------------------------------- vnet3 52:54:00:e3:86:e1 ipv4 192.168.12.179/24 [root@node1 images]# ssh 192.168.12.179 The authenticity of host '192.168.12.179 (192.168.12.179)' can't be established. ECDSA key fingerprint is SHA256:heUVB8InZ+56B+vMgUz+B7Uus4EgklEU9DVeywf1Z7s. ECDSA key fingerprint is MD5:0b:b1:75:a4:2b:ba:cf:f1:ac:51:cb:76:2a:74:89:42. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.12.179' (ECDSA) to the list of known hosts. root@192.168.12.179's password: Last login: Sun Aug 16 09:46:30 2020 [root@localhost ~]# ping 192.168.12.1 PING 192.168.12.1 (192.168.12.1) 56(84) bytes of data. 64 bytes from 192.168.12.1: icmp_seq=1 ttl=64 time=0.514 ms 64 bytes from 192.168.12.1: icmp_seq=2 ttl=64 time=0.585 ms ^C --- 192.168.12.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.514/0.549/0.585/0.042 ms [root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.12.1 0.0.0.0 UG 100 0 0 eth0 192.168.12.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 [root@localhost ~]# exit 登出 Connection to 192.168.12.179 closed. [root@node1 images]#
提示:從上面的資訊可以看到基於test網路建立的虛擬機器,其內部獲取的地址是我們在test網路配置檔案中指定的dhcp地址池,閘道器地址是virbr1的地址;
[root@node1 ~]# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400450615 yes virbr0-nic vnet0 vnet1 vnet2 virbr1 8000.525400450616 yes virbr1-nic vnet3 [root@node1 ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 239 packets, 21179 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 68 packets, 8639 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 86 packets, 6827 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 86 packets, 6827 bytes) pkts bytes target prot opt in out source destination 2 180 RETURN all -- * * 192.168.12.0/24 224.0.0.0/24 1 328 RETURN all -- * * 192.168.12.0/24 255.255.255.255 29 1740 MASQUERADE tcp -- * * 192.168.12.0/24 !192.168.12.0/24 masq ports: 1024-65535 94 7144 MASQUERADE udp -- * * 192.168.12.0/24 !192.168.12.0/24 masq ports: 1024-65535 1 84 MASQUERADE all -- * * 192.168.12.0/24 !192.168.12.0/24 2 267 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24 0 0 RETURN all -- * * 192.168.122.0/24 255.255.255.255 80 4800 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 269 20444 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 0 0 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24 [root@node1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 ens33 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.12.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr1 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 [root@node1 ~]# ip a l vnet3 10: vnet3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr1 state UNKNOWN qlen 1000 link/ether fe:54:00:e3:86:e1 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fee3:86e1/64 scope link valid_lft forever preferred_lft forever [root@node1 ~]#
提示:如果我們在基於test網路建立虛擬機器,它也會把虛擬機器的虛擬網路卡橋接到virbr1上,如果我們指定的網路型別是nat型別並開啟了dhcp,它預設會把虛擬機器的閘道器指向virbr1;並且在宿主機上的iptables的nat表中會新增SNAT規則,正因為這些iptables規則才使得虛擬機器可以上外網;
virsh net-info:檢視指定網路的簡要資訊
[root@node1 ~]# virsh help net-info NAME net-info - 網路資訊 SYNOPSIS net-info <network> DESCRIPTION 返回關於這個網路的基本資訊。 OPTIONS [--network] <string> 網路名或 uuid [root@node1 ~]# virsh net-info test 名稱: test UUID: be2af58a-c8cd-4b73-8ee3-36cb3fe9566b 活躍: 是 持久: 是 自動啟動: 否 橋接: virbr1 [root@node1 ~]#
virsh net-autostart:標記指定網路為自動啟動
[root@node1 ~]# virsh help net-autostart NAME net-autostart - 自動開始網路 SYNOPSIS net-autostart <network> [--disable] DESCRIPTION 設定一個網路在啟動時自動開始. OPTIONS [--network] <string> 網路名或 uuid --disable 禁止自動啟動 [root@node1 ~]# virsh net-autostart test 網路test標記為自動啟動 [root@node1 ~]# virsh net-info test 名稱: test UUID: be2af58a-c8cd-4b73-8ee3-36cb3fe9566b 活躍: 是 持久: 是 自動啟動: 是 橋接: virbr1 [root@node1 ~]#
virsh net-name:把指定uuid解析成名稱
[root@node1 ~]# virsh net-info test 名稱: test UUID: be2af58a-c8cd-4b73-8ee3-36cb3fe9566b 活躍: 是 持久: 是 自動啟動: 是 橋接: virbr1 [root@node1 ~]# virsh help net-name NAME net-name - 把一個網路UUID 轉換為網路名 SYNOPSIS net-name <network> OPTIONS [--network] <string> 網路uuid [root@node1 ~]# virsh net-name be2af58a-c8cd-4b73-8ee3-36cb3fe9566b test [root@node1 ~]#
virsh net-uuid:把指定網路名稱解析成uuid
[root@node1 ~]# virsh help net-uuid NAME net-uuid - 把一個網路名轉換為網路UUID SYNOPSIS net-uuid <network> OPTIONS [--network] <string> 網路名 [root@node1 ~]# virsh net-uuid test be2af58a-c8cd-4b73-8ee3-36cb3fe9566b [root@node1 ~]#
virsh net-dhcp-leases:將指定網路的dhcp的租賃資訊;
[root@node1 ~]# virsh help net-dhcp-leases NAME net-dhcp-leases - print lease info for a given network SYNOPSIS net-dhcp-leases <network> [--mac <string>] DESCRIPTION Print lease info for a given network OPTIONS [--network] <string> 網路名或 uuid --mac <string> MAC 地址 [root@node1 ~]# virsh net-dhcp-leases test Expiry Time MAC 地址 Protocol IP address Hostname Client ID or DUID ------------------------------------------------------------------------------------------------------------------- 2020-08-16 23:27:20 52:54:00:e3:86:e1 ipv4 192.168.12.179/24 - - [root@node1 ~]# virsh net-dhcp-leases default Expiry Time MAC 地址 Protocol IP address Hostname Client ID or DUID ------------------------------------------------------------------------------------------------------------------- 2020-08-16 23:32:45 52:54:00:3e:3f:71 ipv4 192.168.122.4/24 cirros 01:52:54:00:3e:3f:71 2020-08-16 23:11:38 52:54:00:e3:85:21 ipv4 192.168.122.168/24 - - 2020-08-16 23:14:35 52:54:00:e3:8d:11 ipv4 192.168.122.222/24 - - [root@node1 ~]#
virsh net-edit:編輯指定虛擬機器的配置檔案;
提示:使用virsh net-edit,它預設就會去開啟指定網路的配置檔案,我們可以編輯這個配置檔案來建立一個網路,也可以更改對應網路的配置,然後重新對取配置檔案使對應配置生效;
編輯test網路配置檔案的dhcp地址池地址和virbr1的地址;
[root@node1 ~]# virsh net-edit test <network> <name>test</name> <uuid>f9452d96-55fa-4dbf-ad9c-b1ba99b7f2ad</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr1' stp='on' delay='0'/> <mac address='52:54:00:45:06:16'/> <ip address='192.168.11.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.11.2' end='192.168.11.254'/> </dhcp> </ip> </network> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "/tmp/virshJaE8MT.xml" 16L, 413C written 已編輯網路 test XML 配置 [root@node1 ~]# cat /etc/libvirt/qemu/networks/test.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh net-edit test or other application using the libvirt API. --> <network> <name>test</name> <uuid>f9452d96-55fa-4dbf-ad9c-b1ba99b7f2ad</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr1' stp='on' delay='0'/> <mac address='52:54:00:45:06:16'/> <ip address='192.168.11.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.11.2' end='192.168.11.254'/> </dhcp> </ip> </network> [root@node1 ~]# virsh net-info test 名稱: test UUID: f9452d96-55fa-4dbf-ad9c-b1ba99b7f2ad 活躍: 是 持久: 是 自動啟動: 否 橋接: virbr1 [root@node1 ~]# ip a l virbr1 13: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:45:06:16 brd ff:ff:ff:ff:ff:ff inet 192.168.12.1/24 brd 192.168.12.255 scope global virbr1 valid_lft forever preferred_lft forever [root@node1 ~]#
提示:預設修改了指定活躍網路的配置檔案後是不會馬上生效的;建立持久網路後,預設配置檔案存放在/etc/libvirt/qemu/network/目錄下和對應網路名稱同名的xml格式檔案;
讓指定網路重讀配置檔案生效
[root@node1 ~]# virsh net-list 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 是 [root@node1 ~]# virsh net-destroy test 網路 test 被刪除 [root@node1 ~]# virsh net-list 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 [root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 不活躍 否 是 [root@node1 ~]# virsh net-start test 網路 test 已開始 [root@node1 ~]# ip a l virbr1 15: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:45:06:16 brd ff:ff:ff:ff:ff:ff inet 192.168.11.1/24 brd 192.168.11.255 scope global virbr1 valid_lft forever preferred_lft forever [root@node1 ~]#
提示:讓其重讀配置檔案的方式我們只有重啟網路,所以上面的操作上先停止對應網路,然後在啟動對應網路;virsh net-destory命令是刪除指定活躍狀態的網路,就相當於停止操作;
驗證:對應網路上的虛擬機器地址會發生更新嗎?
[root@node1 ~]# virsh domifaddr c3 名稱 MAC 地址 Protocol Address ------------------------------------------------------------------------------- [root@node1 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 1 generic running 2 centos7.0 running 3 c2 running 4 c3 running [root@node1 ~]# virsh destroy c3 域 c3 被刪除 [root@node1 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 1 generic running 2 centos7.0 running 3 c2 running - c3 關閉 [root@node1 ~]# virsh start c3 域 c3 已開始 [root@node1 ~]# virsh domifaddr c3 名稱 MAC 地址 Protocol Address ------------------------------------------------------------------------------- vnet3 52:54:00:e3:86:e1 ipv4 192.168.11.179/24 [root@node1 ~]#
提示:對應網路上的虛擬機器如果不重啟,它預設會獲取不到地址;其實上述重啟可以使用virsh reboot命令;
利用virsh edit來生成一個網路
[root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 是 [root@node1 ~]# virsh net-edit test <uuid>f9452d96-55fa-4dbf-ad9c-b1ba99b7f2ad</uuid> <network> <name>test1</name> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr2' stp='on' delay='0'/> <mac address='52:54:10:45:06:16'/> <ip address='192.168.10.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.10.2' end='192.168.10.254'/> </dhcp> </ip> </network> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "/tmp/virshWqhNS8.xml" 15L, 362C written 已編輯網路 test1 XML 配置 [root@node1 ~]# ll /etc/libvirt/qemu/networks/ 總用量 12 drwx------ 2 root root 25 8月 16 22:59 autostart -rw------- 1 root root 576 8月 13 23:31 default.xml -rw------- 1 root root 641 8月 16 23:23 test1.xml -rw------- 1 root root 639 8月 16 23:09 test.xml [root@node1 ~]# diff /etc/libvirt/qemu/networks/test.xml /etc/libvirt/qemu/networks/test1.xml 4c4 < virsh net-edit test --- > virsh net-edit test1 9,10c9,10 < <name>test</name> < <uuid>f9452d96-55fa-4dbf-ad9c-b1ba99b7f2ad</uuid> --- > <name>test1</name> > <uuid>8dbdad99-91c5-435b-95b7-02179597f39e</uuid> 16,18c16,18 < <bridge name='virbr1' stp='on' delay='0'/> < <mac address='52:54:00:45:06:16'/> < <ip address='192.168.11.1' netmask='255.255.255.0'> --- > <bridge name='virbr2' stp='on' delay='0'/> > <mac address='52:54:10:45:06:16'/> > <ip address='192.168.10.1' netmask='255.255.255.0'> 20c20 < <range start='192.168.11.2' end='192.168.11.254'/> --- > <range start='192.168.10.2' end='192.168.10.254'/> [root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 是 test1 不活躍 否 是 [root@node1 ~]#
提示:從上面的演示我們可以看到,當我們修改了網路配置檔案中的網路名稱,ip地址,網橋名稱,mac,dhcp地址池然後儲存,它就會在對應目錄下生成一個我們之前修改後的網路配置檔案,並把我們的配置立刻應用到系統(define操作,不需要我們手動去define,它自動會define);
virsh net-create:從指定xml檔案建立一個非持久的臨時網路,並啟用;
[root@node1 ~]# virsh help net-create NAME net-create - 從一個 XML 檔案建立一個網路 SYNOPSIS net-create <file> DESCRIPTION 建立一個網路 OPTIONS [--file] <string> 檔案包括一個 XML網路描述 [root@node1 ~]# cat test.xml <network connections='3'> <name>test2</name> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr3' stp='on' delay='0'/> <mac address='52:54:00:45:06:17'/> <ip address='192.168.17.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.17.2' end='192.168.17.254'/> </dhcp> </ip> </network> [root@node1 ~]# ll /etc/libvirt/qemu/networks/ 總用量 12 drwx------ 2 root root 25 8月 16 22:59 autostart -rw------- 1 root root 576 8月 13 23:31 default.xml -rw------- 1 root root 641 8月 16 23:23 test1.xml -rw------- 1 root root 639 8月 16 23:09 test.xml [root@node1 ~]# virsh net-create test.xml 從test2建立網路test.xml [root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 是 test1 不活躍 否 是 test2 活動 否 否 [root@node1 ~]# ll /etc/libvirt/qemu/networks/ 總用量 12 drwx------ 2 root root 25 8月 16 22:59 autostart -rw------- 1 root root 576 8月 13 23:31 default.xml -rw------- 1 root root 641 8月 16 23:23 test1.xml -rw------- 1 root root 639 8月 16 23:09 test.xml [root@node1 ~]#
提示:這裡提示下define出來的網路預設是持久的,create出來的網路不是持久的,所謂持久就是是否在/etc/libvirt/qemu/network/目錄下生成配置檔案,有配置檔案的網路我們稱它為持久網路,沒有配置檔案的網路我們稱它為臨時網路;
virsh net-undefine:將指定持久網路取消定義,所謂取消定義就是轉為非持久網路;
[root@node1 ~]# virsh help net-undefine NAME net-undefine - undefine a persistent network SYNOPSIS net-undefine <network> DESCRIPTION Undefine the configuration for a persistent network. OPTIONS [--network] <string> 網路名或 uuid [root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 是 test1 不活躍 否 是 test2 活動 否 否 [root@node1 ~]# ll /etc/libvirt/qemu/networks/ 總用量 12 drwx------ 2 root root 25 8月 16 22:59 autostart -rw------- 1 root root 576 8月 13 23:31 default.xml -rw------- 1 root root 641 8月 16 23:23 test1.xml -rw------- 1 root root 639 8月 16 23:09 test.xml [root@node1 ~]# virsh net-undefine test1 網路 test1 已經被取消定義 [root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 是 test2 活動 否 否 [root@node1 ~]# ll /etc/libvirt/qemu/networks/ 總用量 8 drwx------ 2 root root 25 8月 16 22:59 autostart -rw------- 1 root root 576 8月 13 23:31 default.xml -rw------- 1 root root 639 8月 16 23:09 test.xml [root@node1 ~]# virsh net-undefine test 網路 test 已經被取消定義 [root@node1 ~]# virsh net-list --all 名稱 狀態 自動開始 持久 ---------------------------------------------------------- default 活動 是 是 test 活動 否 否 test2 活動 否 否 [root@node1 ~]# ll /etc/libvirt/qemu/networks/ 總用量 4 drwx------ 2 root root 25 8月 16 22:59 autostart -rw------- 1 root root 576 8月 13 23:31 default.xml [root@node1 ~]#
提示:net-undefine會把活躍狀態的持久網路修改成非持久,它的操作就是把對應配置檔案刪除,將非活躍的持久化網路,它會刪除其配置檔案和網路例項;