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虚拟机就安装好了

希望对大家有用

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐