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