计算机科学

kvm虚拟化技术实现原理

2018-12-09  本文已影响78人  任总

一、 虚拟化技术

1、虚拟化技术的分类:

(1) 模拟:Emulation

Qemu, PearPC, Bochs, ...

(2) 完全虚拟化:Full Virtualization,Native Virtualization

VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)

(3) 半虚拟化:Para-Virutalization
(4) 容器级虚拟化:

LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, ...

(5) 库级别虚拟化:

wine

(6) 程序级虚拟化

jvm, pvm, ...

2、主机虚拟化:Emulation, Full Virtualization, Para-Virutalization

Type-I:Hypervisor直接运行于硬件;
Type-II:Hypervisor运行主机OS之上;

3、云栈的类别:

二、主机虚拟化:

1、cpu的虚拟化:

硬件级物理cup虚拟化技术

2、内存虚拟化管理

硬件级内存虚拟化:

硬件级物理内存映射到虚拟机

3、硬盘的虚拟化:

4、网络虚拟化

5、IO虚拟化

I/O全虚拟化技术
I/O半虚拟化技术
I/O透传技术

6、一型虚拟化type-1

7、二型虚拟化type-2

三、容器级级虚拟化

四、KVM虚拟技术

1、KVM概述

工作原理

KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。


virtio虚拟方案

2、KVM的核心组件:

(1)、 kvm.ko内核模块
(2)、 qemu-kvm:用户空间的工具程序
(3)libvirt:工具箱用于与主流操作系统虚拟化进行交互工具

3、KVM运行模式

KVM模块load进内存之后,系统的运行模式:

4、KSM机制

扫描物理内存,发现多个虚拟机实例有相同的内存空间,合并成为一个共享内存空间,节省内存。

5、kvm工具集:

image.png

5、KVM快速安装

(1)判断CPU是否支持硬件虚拟化:
grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
vmx:Intel VT-x
svm:AMD AMD-v

运行中的一个kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;

(2)、装载内核模块

kvm:核心模块

kvm-intel|kvm-amd
(3)、使用virt-manager管理KVM
# yum install qemu-kvm libvirt-daemon-kvm  virt-manager
# modprobe kvm

# systemctl start libvirtd.service

# virt-manager &
(4)、网络虚拟化:

CentOS 7创建物理桥,使用内核自带的桥接模块实现:
桥接口配置文件保留地址信息;

TYPE=Bridge
Device=BRIDGE_NAME

物理网卡配置文件:
删除地址、掩码和网关等相关的配置,添加

BRIDGE=BRIDGE_NAME

重启网络服务即可:

五、安装KVM示例

#检查主机cpu是否支持虚拟化
[root@node-64 ~]# grep -E -i "svm|vmx" /proc/cpuinfo
..........vmx ......... #出现这个字段即可支持虚拟化

#安装kvm模块
[root@node-64 ~]# modprobe kvm
[root@node-64 ~]# lsmod | grep kvm
kvm_intel             170086  0 
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
[root@node-64 ~]# ls /dev/kvm
/dev/kvm

[root@node-64 ~]# yum install libvirt libvirt-daemon virt-manager -y
[root@node-64 ~]# systemctl start libvirtd.service
[root@node-64 ~]# systemctl enable libvirtd.service

#安装物理桥
[root@node-64 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.64  netmask 255.255.255.0  broadcast 192.168.1.255
#创建网桥
[root@node-64 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33

此时会断网,到虚拟机重启一下,发现已生成网桥,但还要配置网桥的dns,否则无法上网。

[root@node-64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.1.64"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
DNS1=202.106.46.151   #添加
DNS2=8.8.8.8          #添加

#重启网络
[root@node-64 ~]#systemctl restart network.service

[root@node-64 ~]# ifconfig
br0:    #生成虚拟网桥,并获得物理网卡的地址
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.64  netmask 255.255.255.0  broadcast 192.168.1.255

ens33:    #原物理网卡变成虚拟交换机
 flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:79:2e:94  txqueuelen 1000  (Ethernet)

其他终端图形登录[root@node-60 ~]# ssh -X root@192.168.1.64

 ssh -X root@192.168.1.64
[root@node-64 ~]# virt-manager

参考链接:
http://www.178linux.com/103971
https://www.cnblogs.com/sunhao96/p/7605865.html
https://bbs.csdn.net/topics/391040787
https://www.ibm.com/developerworks/cn/linux/l-pci-passthrough

上一篇下一篇

猜你喜欢

热点阅读