虚拟化技术的介绍3 R E$ S: I2 {# `$ P8 A9 ~; k
在谈kvm之前我们先来讲一下虚拟化,那到底什么是虚拟化呢? 虚拟化是一种资源管理技术,它将计算机的各种实体资源(CPU、内存、存储、网络等)进行抽象和转化,并提供分割、重新组合,以达到最大化利用物理资源的目的。
泰涨知识 | 虚拟化技术KVM
图1-1(传统架构)
泰涨知识 | 虚拟化技术KVM
图1-2(引入虚拟化后的架构)
$ [+ \5 F+ T) _2 Q; W6 m9 Q
我们在把虚拟化以后的架构单独拿出来谈一下,我们可以看到它相较于传统的架构多了虚拟化层(或者说也可以叫做vmm/hypervisor)就是为了达到虚拟化而引入的一个软件层。
7 i7 Q( x+ X# D( ]% Q
$ a& z. P- T8 [+ \' r0 l
它向下掌控实际的物理资源(相当于原本的操作系统);向上呈现给虚拟机N份逻辑的资源,虚拟化层运行在实际物理环境上,在其上会运行虚拟机,而虚拟机的系统我有时也把它叫做guest os,接下来我们来看一下虚拟化的具体实现就是kvm。
4 j! ?$ a8 d7 S6 m( y: K/ N
8 O9 k1 J6 N" ]/ r$ U+ rkvm. R) {. \& Z3 Q! b. ]2 l( K5 S
1、介绍8 Q9 ~9 y3 G+ G, l" _$ }2 p( B* P6 l
KVM全称是Kernel-based Virtual Machine,即基于内核的虚拟机,他是虚拟化的一种具体实现,KVM是由Qumranet公司开发的,并没有选择从底层开始新写一个Hypervisor,而是选择了基于Linux kernel,通过加载模块使Linux kernel本身变成一个Hypervisor,从此kvm模块成为linux内核的一部分。
% x- o5 a7 w* P$ F/ z: L M; l
我们接下来来讲一下kvm的架构,kvm主要由两部分组成,一个是kvm内核模块,一个是qemu。+ O+ \& r; w7 k( r: V
/ ?, P# T% Q" b! R" BKvm模块:他是linux内核的一部分,当linux操作系统加载了kvm内核模块就仿佛变成了hypervisor,可以去实现虚拟化,主要负载cpu和内存虚拟化的实现,并且他是基于硬件的方式实现cpu和内存虚拟化,所以需要开启具体硬件的虚拟化功能,并且针对不同的cpu会加载不同的kvm模块(主要分为amd模块和intel的模块)。
qemu:qemu原本就是一个著名的开源虚拟机软件项目,而不是KVM虚拟化软件的一部分。) F' G9 f% i8 e. o+ Y
) z, t' C; j3 r. ^! o# d' d
与KVM不同,qemu最初实现的虚拟机是一个纯软件的实现,通过二进制翻译来实现虚拟化客户机中的CPU指令模拟,所以性能比较低,当被引入kvm架构当中以后,他只是负责实现I/O虚拟化的功能,并且它被拉起以后只是普通的linux进程,它可以模拟包括磁盘,网卡,声卡等,同时也可以通过/dev/kvm的字符设备和kvm内核模块实现交互。
泰涨知识 | 虚拟化技术KVM
图1-3
7 `* x* T7 i6 Y. I: `: n
0 X+ \; t; i5 W, J% j7 C
从上图我们可以很清楚的了解到kvm的架构,他是由天生集成在linux当中的kvm内核模块和qemu进程构成,并且每个虚拟机就是一个qemu进程,有多少个虚拟机就会有多少个qemu进程进程。
& j9 C. I. u* Y! P0 v+ C) p+ o 2、管理架构
一个成熟的虚拟化实现离不开良好的管理和运维工具,部署、运维、管理的复杂度与灵活性是企业实施虚拟化时重点考虑的问题。KVM目前已经有了一套自己的管理模型它的架构如下:
泰涨知识 | 虚拟化技术KVM
图1-4
; G& U! {% K4 N! B
从上图我们可以看到整个kvm虚拟化实现的架构,底层是kvm虚拟化平台,在向上是libvirt,以及在libvirt之上的各种管理工具(management tools),那现在分别给大家介绍一下。
【Libvirt】
( b7 o) v) X0 a3 }4 J
为了更方便地管理平台虚拟化技术而设计的它包含应用程序接口、守护进程和管理工具, 它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管理它也支持对于不同的虚拟化平台的管理包括,kvm,xen,vmware等,libvirt通过不同的驱动去实现对于不同的虚拟化平台的对接,它是作为管理工具和虚拟化平台之间的中间层,帮我屏蔽底层的各种细节,向上提供统一的接口给各种管理工具使用
【管理工具】
那我们知道libvirt给我们提供的是api接口我们需要通过编程的方式进行调用,显然不符合我们使用的习惯,所以我们引入了各种管理工具,通过管理工具调用api接口,并且给我呈现更加方便和简单的使用方式,那我们现在来介绍一些主流的管理工具:
virsh: virsh是用C语言编写的一个使用libvirt API的虚拟化管理工具,libvirt项目的源代码中就包含了virsh这个虚拟化管理工具的代码,virsh是用于管理虚拟化环境中的虚拟机和Hypervisor的命令行工具
virt-viewer是“Virtual Machine Viewer (虚拟机查看器)它是一个显示虚拟化客户机的图形界面的工具
virt-install为虚拟客户机的安装提供了一个便捷易用的方式
virt-manage(虚拟机管理器)是用于管理虚拟机的图形化的桌面用户接口,目前仅支持在Linux或其他类UNIX系统中运行
! B1 [! L0 c/ d0 D+ o* [$ f; H3、安装使用
实验环境:我这边选择使用vmwareworkstation进行实验! k( L' Y+ j& k
; C, n# f- L S! X6 g6 _
1. 我们需要在vmwareworkstation创建虚拟机,并且一定要开启虚拟化功能
泰涨知识 | 虚拟化技术KVM
* O$ m+ x3 r0 J: p3 g& ?. J2. 安装的linux系统(我这边选择centos 8.0)
3. 选择安装虚拟化相关组件(其他系统安装步骤我这边省去了)
3 x& e: V; O5 e% @& L5 x, Z
泰涨知识 | 虚拟化技术KVM
泰涨知识 | 虚拟化技术KVM
. w$ r; P7 Q$ a2 j$ `7 o- Q! h
4.等系统安装完成,那我们的kvm也安装完成了
5.检查
通过命令可以看到相应的kvm模块
[czw@localhost ~]$ lsmod | grep kvm kvm_amd 106496 0 ccp 98304 1 kvm_amd kvm 745472 1 kvm_amd irqbypass 16384 1 kvm |
通过命令看一下qemu进程是否被拉起, 但是只有你运行虚拟机之后才能看到对应的进程
[czw@localhost ~]$ ps -aux | grep qemu |
通过上述命令我们可以看到libvirtd已经被拉起
[czw@localhost ~]$ ps -aux | grep libvirtd root 1039 0.0 0.7 1840320 42204 ? Ssl 02:20 0:00 /usr/sbin/libvirtd |
6.简单使用
从前面的架构图我们可以知道我们一般是通过管理工具去操作虚拟化平台,那这边我们可以去使用virt-manager这个图形化工具,我们可以在命令行输入命令去调用该工具
[czw@localhost ~]$ virt-manager |
点击如如图所示选项创建虚拟机
6 Y) ~/ p$ F0 k0 _
泰涨知识 | 虚拟化技术KVM
! e+ W% L9 Z+ v Y2 B+ E5 l
选择系统的引导方式,选择用iso安装
泰涨知识 | 虚拟化技术KVM
/ k* X: J9 y$ F/ v/ j
选择本地的iso系统以及对应的操作系统2 }0 e+ V7 o; O( B0 G# X! C1 ]
泰涨知识 | 虚拟化技术KVM
" ^6 w% F% n- j) c% C% ]6 d选择内存大小和cpu规格
泰涨知识 | 虚拟化技术KVM
f( G* ~/ \ ]. R: m* p# o
选择磁盘大小
1 o+ B# G* d* I
泰涨知识 | 虚拟化技术KVM
- J7 F& X, _; z+ t" U配置虚拟机名字和网络类型按默认配置就行
泰涨知识 | 虚拟化技术KVM
$ K5 P( a: \& o a
经过上述步骤就完成了虚拟机的创建。
0 s. H7 `; e4 j1 {
2 I! R, y( R6 ]' m" }6 U/ w结束语" s" s5 s& L2 p d
3 r% _+ `- `) a* u$ |7 W" Q- s# o
Kvm也是时下最主流的虚拟化实现,学习和使用kvm可以帮助大家对于虚拟化以及其之上的云计算有个更深入的了解,希望本次的内容能让大家有所收获。