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 1500
inet 192.168.121.159 netmask 255.255.255.0 broadcast 192.168.121.255
inet6 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 0
TX packets 34 bytes 2500 (2.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 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 0
TX 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 list
Id Name State
----------------------------------------------------
[root@server159 ~]# virsh start server1
Domain server1 started
[root@server159 ~]# virsh list
Id Name State
----------------------------------------------------
2 server1 running
然后这时候就可以用VNC来连接KVM虚拟机了
然后使用Xshell连接
可以看到是可以连接的,也ping通百度访问外网,现在就和我们的宿主机差不多了
这样我们的KVM虚拟机就安装好了
希望对大家有用