KVM概述
? 以色列qumranet公司研發,后被RedHad公司收購
(1)kvm只支持x86平臺
(2)依賴于 HVM,inter VT AMD-v
? KVM是(Kernel-based Virtual Machine)的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20之后集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,所以相對于Xen,其核心源碼很少。
? KVM的虛擬化需要硬件支持(如Intel VT技術或者AMD V技術)。是基于硬件的完全虛擬化。而Xen早期則是基于軟件模擬的Para-Virtualization,新版本則是基于硬件支持的完全虛擬化。但Xen本身有自己的進程調度器,存儲管理模塊等,所以代碼較為龐大。廣為流傳的商業系統虛擬化軟件VMware ESX系列是基于軟件模擬的Full-Virtualization。
工作原理
KVM 是基于虛擬化擴展(Intel VT 或者 AMD-V)的 X86 硬件的開源的 Linux 原生的全虛擬化解決方案。KVM 中,虛擬機被實現為常規的 Linux 進程,由標準 Linux 調度程序進行調度;虛機的每個虛擬 CPU 被實現為一個常規的 Linux 進程。這使得 KMV 能夠使用 Linux 內核的已有功能。
但是,KVM 本身不執行任何硬件模擬,需要客戶空間程序通過 /dev/kvm 接口設置一個客戶機虛擬服務器的地址空間,向它提供模擬的 I/O,并將它的視頻顯示映射回宿主的顯示屏。目前這個應用程序是 QEMU。
KVM的整體結構:
從GUI到Linux內核,包括以下五個組件:
1、virt-manager: 一個用來管理VM的GUI/CUI用戶接口,它使用libvirt api 調用VM的各種功能。
2、libvirt:API庫,作為較通用的服務器虛擬化軟件,它支持Xen,VMware ESXi/GSX,當然,還有QEMU/KVM。
3、QEMU:一個和KVM內核模塊交互的模擬器,處理多種客戶機系統請求如I/O,一個QEMU進程對應一個客戶機系統。
4、KVM內核模塊: 從狹義上來說,KVM是一個Linux內核模塊,主要負責vCPU的創建,虛擬內存的分配,vCPU寄存器的讀寫以及vCPU的運行。
5、Bridge-utils - Bridge-utils是一個Linux橋接工具集合,用于創建和配置網絡橋接設備。在KVM中使用網絡橋接可以實現更高效的網絡通信。
KVM的安裝與部署
鏡像下載地址: http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
如果是物理服務器,需要在BIOS中打開虛擬化功能(Virtualization Technology),一般的服務器默認是打開這個功能的。
如果是用VMware Workstation做實驗,建立的虛擬機的CPU要勾選虛擬化功能,這樣虛擬機才會支持KVM虛擬化
首先準備一臺新的虛擬機,處理器也不要只給一個
配置好以后就可以啟動了
查看內核中的KVM模塊是否已經安裝
[root@server159 ~]# lsmod | grep kvm
kvm_intel 188740 0
kvm 637289 1 kvm_intel
irqbypass 13503 1 kvm
然后就安裝KVM所需要的組件
[root@server159 ~]# yum install qemu qemu-img qemu-kvm libvirt libvirt-python libguestfs-tools virt-manager virt-viewer virt-install -y
啟動libvirtd服務,并設置為開機自啟
[root@server159 ~]# systemctl start libvirtd
[root@server159 ~]# systemctl enable libvirtd
創建一個目錄來存放虛擬磁盤,跟在window上創建一個目錄存放VMware一樣
然后創建虛擬磁盤
[root@server159 ~]# mkdir -p /data/kvm
[root@server159 ~]# qemu-img create -f raw /data/kvm/server1.raw 10G
Formatting '/data/kvm/server1.raw', fmt=raw size=10737418240
我們創建了一個10G的虛擬磁盤,但是并不會直接占用我們的10G內存,是根據使用量來決定的
[root@server159 ~]# ls -lh /data/kvm/server1.raw
-rw-r--r-- 1 root root 10G Nov 23 19:52 /data/kvm/server1.raw
[root@server159 ~]# du -h /data/kvm/server1.raw
0 /data/kvm/server1.raw
然后創建一個目錄來保存并下載KVM安裝的鏡像,
[root@server159 ~]# ls /data/iso/
CentOS-7-x86_64-Minimal-2009.iso
配置br0網卡來提供橋接網絡
[root@server159 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br0
然后ens33和br0網卡的設置
[root@server159 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.121.159
PREFIX=24
DNS1=192.168.121.2
GATEWAY=192.168.121.2
[root@server159 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
BRIDGE=br0
然后重啟網絡
[root@server159 ~]# systemctl restart network
查看ip在哪張網卡
[root@server159 ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.121.159 netmask 255.255.255.0 broadcast 192.168.121.255inet6 fe80::250:56ff:fe22:e283 prefixlen 64 scopeid 0x20<link>ether 00:50:56:22:e2:83 txqueuelen 1000 (Ethernet)RX packets 32 bytes 2012 (1.9 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 34 bytes 2500 (2.4 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet6 fe80::250:56ff:fe22:e283 prefixlen 64 scopeid 0x20<link>ether 00:50:56:22:e2:83 txqueuelen 1000 (Ethernet)RX packets 874221 bytes 1263022646 (1.1 GiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 68757 bytes 6441324 (6.1 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后修改VNC訪問的密碼
[root@server159 ~]# vim /etc/libvirt/qemu.conf
然后開始安裝我們的虛擬機
[root@server159 ~]# virt-install --name=server1 --virt-type=kvm --memory 1024,maxmemory=2048 --cdrom=/data/iso/CentOS-7-x86_64-Minimal-2009.iso --disk path=/data/kvm/server1.raw --network bridge=br0 --vnc --vncport=5901 --vnclisten=0.0.0.0 --noautoconsole --autostart
看一下端口啟動沒有
然后去我們window上安裝的Real VNC通過這個端口訪問
連接進來以后就是這個界面,這個大家都熟悉, 我就不介紹了
根據自己要求來配就好了
安裝好以后就直接重啟KVM虛擬機,當然VNC就會直接斷開連接
然后在宿主機查看KVM虛擬機的情況
[root@server159 ~]# virsh listId Name State
----------------------------------------------------
[root@server159 ~]# virsh start server1
Domain server1 started[root@server159 ~]# virsh listId Name State
----------------------------------------------------2 server1 running
然后這時候就可以用VNC來連接KVM虛擬機了
然后使用Xshell連接
可以看到是可以連接的,也ping通百度訪問外網,現在就和我們的宿主機差不多了
這樣我們的KVM虛擬機就安裝好了
希望對大家有用