kvm虛擬化+橋接網絡

1.虛擬機的設置

在這裏插入圖片描述

2、系統環境的要求

2.1查看CPU是否支持虛擬化

[root@c7-41 ~]# egrep -o '(vmx|svm)' /proc/cpuinfo
vmx
vmx
[root@c7-41 ~]# dmesg | grep kvm
#如果什麼也不出來就對了,出來kvm:disabled by blos,就是cpu沒有開啓虛擬化

補充說明:
==Linux dmesg命令用於顯示開機信息。
kernel會將開機信息存儲在ring buffer中。您若是開機時來不及查看信息,可利用dmesg來查看。開機信息亦保存在/var/log目錄中,名稱爲dmesg的文件裏。
一、語法
dmesg [-cn][-s <緩衝區大小>]

2.2關閉防火牆和seliunx


[root@c7-41 ~]# systemctl stop firewalld
[root@c7-41 ~]# systemctl disable firewalld
[root@c7-41 ~]# setenforce 0
setenforce: SELinux is disabled
[root@c7-41 ~]# sed -i  '/^SELINUX/s#enforcing#disabled#g' /etc/selinux/config

2.3查看系統的設置

補充說明:
uname -r : 顯示操作系統的發行版號。
uname -a :顯示系統名、節點名稱、操作系統的發行版號、內核版本等等。
getenforce:查看當前SELinux的運行模式。

[root@c7-41 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@c7-41 ~]# uname -r
3.10.0-1062.el7.x86_64
[root@c7-41 ~]# getenforce
Disabled

2.4安裝KVM用戶模塊

[root@c7-41 ~]# yum -y install qemu-kvm qemu-kvm-tools libvirt
#libvirt用來管理kvm,kvm屬於內核態,不需要安裝。但是需要一些類似於依賴的

2.5啓動libvirt


[root@c7-41 ~]# systemctl start libvirtd
[root@c7-41 ~]# systemctl enable libvirtd
[root@c7-41 ~]# systemctl status libvirtd
[root@c7-41 ~]# ifconfig
#啓動之後我們可以使用ifconfig來查看,libvirtd已經爲我們安裝了一個橋接網卡
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:18:15:6c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.創建虛擬機

1.準備虛擬機硬盤
2.需要一個系統iso鏡像
3.需要安裝一個vnc的客戶端來連接

3.1上傳鏡像

[root@c7-41 opt]# yum install qemu-kvm qemu-kvm-tools libvirt -y
[root@c7-41 ~]# cd /opt
[root@c7-41 opt]# ls
[root@c7-41 opt]# ls
CentOS-7-x86_64-Minimal-1810.iso
#dd是一個Unix和類Unix系統上的命令,主要功能爲轉換和複製文件。
[root@c7-41 opt]# dd if=/dev/cdrom of=/opt/CentOS-7-x86_64-Minimal-1810.iso      #dd命令,複製系統的鏡像,只需要掛載上光盤就可以了
9109504+0 records in
9109504+0 records out
4664066048 bytes (4.7 GB) copied, 41.2547 s, 113 MB/s
#1. if=文件名:輸入文件名,缺省爲標準輸入。即指定源文件。< if=input file >
#2. of=文件名:輸出文件名,缺省爲標準輸出。即指定目的文件。< of=output file >

3.2創建磁盤

1.

#使用自己的
dd if=/dev/cdrom of=/var/lib/libvirt/images/CentOS7-x86-DVD-1908.iso
#把dev/cdrom 的文件導出來重命名爲*.iso

在這裏插入圖片描述
2

上傳mini鏡像
#-f制定虛擬機格式   /opt/Centos 存放路徑    6G代表鏡像大小的
[root@c7-41 opt]# qemu-img create -f qcow2 /opt/c73.qcow2 6G
Formatting '/opt/c73.qcow2', fmt=qcow2 size=6442450944 encryption=off cluster_size=65536 lazy_refcounts=off
[root@c7-41 opt]# ll
total 4554948
-rw-r--r-- 1 root root     197120 May 17 16:18 c73.qcow2
-rw-r--r-- 1 root root 4664066048 May 17 16:17 CentOS-7-x86_64-Minimal-1810.iso


磁盤格式介紹
raw:指定多大就創建多大,直接佔用指定大小的空間,用一個字來說就是裸,也就是赤裸裸,你隨便dd一個file就模擬了一個raw格式的鏡像。
qcow2,是openstack默認也是比較推薦的格式,將差異保存在一個文件,文件比較小而且做快照也比較小,空間是動態增長的
區別
qcow2 鏡像抄格式是 QEMU 模擬器支持的一種磁盤鏡像。它也是可以用一個文件的形式來表示一塊固定大小的塊設備磁盤。與普通的 raw 格式的鏡像襲相比,有以下特性:
更小的空間佔用,即使文件系統不支持空洞(holes);
支持寫時拷貝(COW, copy-on-write),鏡像文件只反映底層磁盤的變化zd;
支持快照(snapshot),鏡像文件能夠包含多個快照的歷史;
可選擇基於 zlib 的壓縮方式
可以選擇 AES 加密

3.3安裝虛擬機


[root@c7-41 opt]# yum -y install virt-install 
[root@c7-41 opt]# virt-install --virt-type=kvm --name=c73 --vcpus=1 -r 1024 --cdrom=/opt/CentOS-7-x86_64-Minimal-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/opt/c73.qcow2,size=6,format=qcow2
[root@c7-41 opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     c73                            running
#默認連接端口是從5900開始的
[root@c7-41 opt]# netstat -lntup | grep 5900
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      8063/qemu-kvm

4.VNC連接虛擬機

4.1安裝

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
虛擬機安裝完成之後是關閉了,我們需要啓動

4.2啓動


[root@c7-41 opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     c73                            shut off

[root@c7-41 opt]# virsh start c73
Domain c73 started

[root@c7-41 opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     c73                            running

在這裏插入圖片描述
在這裏插入圖片描述

列出所有的虛擬機	virsh list --all
顯示虛擬機信息		virsh dominfo c73
列出ID爲6的虛擬機名 virsh domname 6
顯示虛擬機內存和cpu的使用情況 	virt-top
關閉虛擬機 		virsh shutdown c73 
強制關閉虛擬機 	virsh destroy c73 
啓動虛擬機 			virsh start c73 
設置虛擬機隨系統自啓 	virsh autostart c73 
關閉虛擬機隨系統自啓	virsh autostart --disable c73 
刪除虛擬機			virsh undefine c73 
通過控制窗口登錄虛擬機 virsh console c73 
掛起$hostname虛擬機 	virsh suspend c73 
恢復掛起的虛擬機		virsh resume c73 
查看網卡配置信息		virsh domiflist c73 
查看該虛擬機的磁盤位置	  virsh domblklist  c73 
查看KVM虛擬機當前配置	virsh dumpxml c73 

–config, --live, --current

config
 使用--config時,只會修改對應虛擬機的XML配置。這個配置直到虛擬機下一次啓動時纔會生效。注意,使用virsh reboot domain並不會讓新的設置生效!
--live
當使--live時,客戶機(就是虛擬機)必須是活動狀態,配置會立即生效。可以看到,如果使--live時,客戶機沒有啓動,系統會報錯的。而且,這時並沒有將配置寫到虛擬機的XML配置中,即,在虛擬機下一次啓動時,這個配置就沒了。
如果hypervisor支持的話,可以同時使用--config 和 --live。
--current
使用 --current時,會根據當前客戶機的狀態來生效。這個說的有點隱晦,實際上就是說,當客戶機處於關閉狀態時,它等價--config;當客戶機處於運行狀態時,它等價於--live。

5.KVM橋接配置

在這裏插入圖片描述

5.1查詢網橋信息


[root@c7-41 opt]# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.52540018156c       yes             virbr0-nic
                                                        vnet0

5.2查看物理機網卡設備

[root@c7-41 opt]# ifconfig virbr0
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:18:15:6c  txqueuelen 1000  (Ethernet)
        RX packets 76  bytes 6252 (6.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 50  bytes 5992 (5.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5.3配置橋接設備br0

#下載
[root@c7-41 opt]# yum -y install bridge-utils

5.4.1熱添加(適合生產環境使用)

[root@c7-44 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started

[root@c7-44 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 master br0 state UP group default qlen 1000
    link/ether 00:0c:29:f2:ac:0c brd ff:ff:ff:ff:ff:ff
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f2:ac:16 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.44/16 brd 172.16.255.255 scope global ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fef2:ac16/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:bf:57:35 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
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:bf:57:35 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:f2:ac:0c brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.44/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fef2:ac0c/64 scope link 
       valid_lft forever preferred_lft forever
[root@c7-44 ~]# ping qq.com
PING qq.com (58.247.214.47) 56(84) bytes of data.
64 bytes from 58.247.214.47 (58.247.214.47): icmp_seq=1 ttl=128 time=28.1 ms
64 bytes from 58.247.214.47 (58.247.214.47): icmp_seq=2 ttl=128 time=28.1 ms
^C
--- qq.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 28.111/28.116/28.122/0.167 ms
[root@c7-44 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
DEVICE=ens33
ONBOOT=yes
BRIDGE="br0"
[root@c7-44 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens37
UUID=6eb8ffc4-7b53-48f6-bf48-6ef59e895157
DEVICE=ens37
ONBOOT=yes
IPADDR=172.16.1.44

5.4.2手動添加臨時生效(不建議)



[root@c7-41 opt]# brctl addbr br0
[root@c7-41 opt]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000000000000       no
virbr0          8000.5254007d6c4b       yes             virbr0-nic
                                                        vnet0
[root@c7-41 opt]# brctl addif br0 ens33
#執行後xshell與宿主機斷開鏈接一下操作在宿主機上完成
刪除ens33上面的ip地址,將br0上面添加上固定的ip地址
 
ip addr del dev ens33 10.0.0.41/24  #刪除ens33上的ip 地址
ifconfig br0 10.0.0.41/24 up           #配置br0的ip地址並啓動設備
route add default gw 10.0.0.254   #重新加入默認網關

#連接xshell

[root@c7-41 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.254      0.0.0.0         UG    0      0        0 br0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 br0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 ens37
172.16.0.0      0.0.0.0         255.255.0.0     U     0      0        0 ens37
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

[root@c7-41 ~]# ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.41  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe49:48c7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:49:48:c7  txqueuelen 1000  (Ethernet)
        RX packets 1347  bytes 75754 (73.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2488  bytes 256882 (250.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
(臨時配置下次重啓時就會失效)

5.5手動配置永久生效網卡(不建議)

[root@c7-41 network-scripts]# cat ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
[root@c7-41 network-scripts]# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.41
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
NM_CONTROLLED=no
[root@c7-41 network-scripts]# systemctl restart network

6.在vnc上配置虛擬機網卡

在這裏插入圖片描述

ifup eth0

查看網卡

在這裏插入圖片描述

7.17.KVM圖形化管理工具(在宿主機上完成接下來步驟才能完成橋接,否則無法ping外網)

7.1查看ssh是否開啓x11轉發

[root@c7-41 network-scripts]# grep X11Forwarding /etc/ssh/sshd_config --colour
X11Forwarding yes
#	X11Forwarding no

7.2安裝xorg-x11

[root@c7-41 network-scripts]# cd
[root@c7-41 ~]# yum install -y xorg-x11-font-utils.x86_64 xorg-x11-server-utils.x86_64 xorg-x11-utils.x86_64 xorg-x11-xauth.x86_64 xorg-x11-xinit.x86_64 xorg-x11-drv-ati-firmware

7.3安裝libvirt (libvirt是管理虛擬機的API庫,不僅支持KVM虛擬機,也可以管理Xen等方案下的虛擬機)

[root@c7-41 ~]# yum install virt-manager libvirt libvirt-Python python-virtinst libvirt-client virt-viewer qemu-kvm mesa-libglapi  -y

7.4安裝virt-manager,x-window。圖形化界面

[root@c7-41 ~]# yum install libXdmcp libXmu libxkbfile xkeyboard-config xorg-x11-xauth xorg-x11-xkb-utils -y

7.5開啓libvirt服務

[root@c7-41 ~]# systemctl start libvirtd.service
[root@c7-41 ~]# systemctl enable libvirtd.service

8.配置xshell(需要配合xming軟件使用)

在這裏插入圖片描述

9.啓動virt-manager (注意一定要新開一個窗口輸入指令,否則無法彈出窗口!!!)

斷開xshell會話,重新連接,輸入命令:virt-manager,就可以自動彈出kvm管理軟件 (前提是你的xming開啓了)

[root@c7-41 ~]# virt-manager
[root@c7-41 ~]# libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
#出錯是因爲沒有安裝圖形版

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

kvm虛擬接也需要關閉防火牆,否則xshell無法連接

systemctl stop firewalld

setenforce 0
在這裏插入圖片描述在這裏插入圖片描述

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