KVM 介绍及作用详解

目录
  • 一、虚拟化
    • 1、背景
    • 2、虚拟化技术介绍
    • 3、虚拟化技术发展
    • 4、虚拟化类型
    • 5、虚拟化的特性特性:
  • 二、KVM概述
    • 1、KVM简介
    • 2、KVM的作用
    • 3、KVM 虚拟化架构/三种模式
    • 4、KVM核心组件及作用
    • 5、KVM工作流程
  • 三、KVM虚拟化平台部署
    • 1、虚拟机资源
    • 2、实验环境
    • 3、安装KVM
    • 4、设置KVM网络
    • 5、KVM部署与管理

一、虚拟化

1、背景

美国环境保护EPA报告中曾经统计过一组统计数据:EPA研究服务器和数据中心得能源效率时发现,实际上服务器只有5%得时间时在工作的,其他时间一直处于休眠状态,这样服务器的利用率就会很低,而且这些服务器一直处于开机状态,消耗的能源自然就很多

2、虚拟化技术介绍

通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互相不影响,从而提高计算机的工作效率

3、虚拟化技术发展

雏形:
1961年,IBM709机器实现了分时系统,将CPU占用切分为多个极短的时间片(1/100sec)每一个时间片执行不同的工作,通过对这些时间片进行轮询
从而将一个CPU伪装成多个CPU
1972年, IBM正式将system370机的分时系统命名为虚拟机
1990年, IBM推出的system390机支持逻辑分区(将一个CPU分为多份,相互独立,也就是逻辑分割)
Xen 2003年问世,是一个外部的hypervisor程序(虚拟机管理程序),能够控制虚拟机和给多个客户机分配资源
KVM:2007年问世,现已内置在kernel内核中的
Xen 支持的虚拟化技术:全虚拟化,半虚拟化
KVM:支持的虚拟化技术:全虚拟化

4、虚拟化类型

1)全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
使用的方法:使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令,为指令访问硬件控制器和外设充当中介。

2)半虚拟化:需要修改操作系统

3)直通:直接使用物理硬件资源(需要支持,还不完善)

5、虚拟化的特性特性:

优势:

  • 集中化管理(远程管理、维护)
  • 提高硬件利用率(物理资源利用 率低-例如峰值,虚拟化解决了“空闲”容量)
  • 动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)
  • 高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)

劣势:

  • 前期高额费用( 初期的硬件支持)
  • 降低硬件利用率(特定场景-例如极度吃资源的应用不一定适合虚拟化)
  • 更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏)
  • 实施配置复杂、管理复杂(管理人员运维、排障困难)
  • 一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用)
  • 安全性(虚拟化技术自身的安全隐患)

二、KVM概述

1、KVM简介

KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 线程。这使得 KMV 能够使用 Linux 内核的已有功能。

Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,是RHEL 5.4推出的最新虚拟化技术,目前红帽只支持在64位的RHEL l5.4以上运行KVM,同时硬件需要支持VT技术,必须在64位bit环境中使用KVM。自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。

KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

通过一下命令可以查看系统是否支持VT

cat /proc/cpuinfo | grep ‘vmx'

KVM的前身是QEMU,08年被红帽收购并获得一项技术hypervisor,不过RedHat的KVM被认为是将成为未来Linux hypervisor的主流。

2、KVM的作用

  • 提高物理服务器的资源利用率(较少的在硬件上的投入)
  • 可以批量部署
  • 实现实时快照技术
  • 支持克隆技术
  • 可以实现虚拟机的离线迁移和动态迁移(提高IT部署的灵活性)
  • 可以将资源动态调整(传统的IT架构资源是固定的,无法动态分配)

3、KVM 虚拟化架构/三种模式

  • 客户模式(guestOS):VM中的OS为GuestOS

客户机在操作系统中运行的模式,客户机分为用户模式和Linux内核模式,作用如下:

  • 用户模式:

为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu工作在此模式下(Qemu的主要功能)

  • Linux内核模式:

模拟CPU、内存,实现客户模式切换,处理从客户模式的推出,KVM即运行在此模式下

4、KVM核心组件及作用

  • Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
  • KVM:运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。
  • QEMU:修改过的为 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。

5、KVM工作流程

用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。 KVM驱动为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAU·NCH 指令进入客户模式,装载 Guest OS 并运行。Guest OS 运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常。

内核模式处理这些异常时如果不需要 I/O则处理完成后重新进入客户模式。如果需要 I/O 则进入到用户模式, 则由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式

6、KVM的优势

1)KVM与VMware的优势

ESX的底层是VMkernel + linux,VMkernel启动后开始接管对硬件管理,然后启动第一个linux虚拟机,协助VMkernel一起来管理和调度硬件资源。

KVM是直接将linux kernel变成hypervisor,只需要从标准linux内核启动即可,linux kernel拥有的特性可以全部利用上。KVM架构上的优势使得它非常简洁,在开发出来仅三个多月就被合并到了标准内核。

2)KVM与Xen的优势

Kvm和xen的最大区别就是架构,KVM是直接构建在linux kernel之上,把linux kernel变成hypervisor,是利用kernel已有的的功能基础上开发KVM所不具备的功能。

Xen的hypervisor是自己从头开始构建的,对硬件资源的调度管理,虚拟机的管理,还有很多接口与linux kernel不兼容,然后对于xen,hypervisor需要通过Domain0对虚拟机提供硬件访问驱动支持。

虽然说现在3.0的kernel中结合了xen,但是大部分linux OS的内核还是2.6,即便是一些新的发行版OS,也还是2.6的内核,新内核要单独去升级。

三、KVM虚拟化平台部署

1、虚拟机资源

CPU:双核双线程-CPU虚拟化开启

内存:8G

硬盘:300G

双网卡:单网卡

操作系统:Centos 7.4(1708)

2、实验环境

1)修改主机名

[root@kvm ~]# hostnamectl set-hostname kvm
[root@kvm ~]# bash

2)将镜像光盘设为自动/永久挂载

[root@kvm ~]# vim /etc/fstab
/dev/cdrom /mnt iso9660 defaults 0 0
[root@kvm ~]# mount -a
[root@kvm ~]# df -hT
/dev/sr0    iso9660  4.3G 4.3G   0 100% /mnt

3)环境优化

#是否反解DNS,设置为NO可以让客户端连接服务器更快

[root@kvm ~]# vim /etc/ssh/sshd_config
UseDNS no    #取消DNS注释,改为NO

4)制作本地YUM仓库

[root@kvm ~]# mkdir /abc
[root@kvm ~]# cd /etc/yum.repos.d/
[root@kvm yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo  CentOS-Vault.repo
CentOS-CR.repo  CentOS-fasttrack.repo CentOS-Sources.repo
[root@kvm yum.repos.d]# mkdir bak
[root@kvm yum.repos.d]# mv CentOS-* bak
[root@kvm yum.repos.d]# ls
bak
[root@kvm yum.repos.d]# vim local.repo
[local]
name=kvm
baseurl=file:///abc
gpgcheck=0
enabled=1
[root@kvm yum.repos.d]# yum clean all
[root@kvm yum.repos.d]# yum repolist

5)关闭防火墙、核心防护

[root@kvm yum.repos.d]# systemctl stop firewalld
[root@kvm yum.repos.d]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@kvm yum.repos.d]# setenforce 0

3、安装KVM

1) 安装KVM基本组件

# 安装 GNOME 桌面环境 如果装了图形界面可以不需要装
yum groupinstall -y "GNOME Desktop"
# KVM 模块
yum -y install qemu-kvm
# 安装KVM 调试工具,可不安装
yum -y install qemu-kvm-tools
# 构建虚拟机的命令行工具
yum -y install virt-install
# qemu 组件,创建磁盘、启动虚拟机等
yum -y install qemu-img
# 网络支持工具
yum -y install bridge-utils
# 虚拟机管理工具
yum -y install libvirt
# 图形界面管理虚拟机
yum -y install virt-manager

2)检测CPU是否支持虚拟化

[root@kvm ~]# cat /proc/cpuinfo | grep vmx
flags    : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilitie

3)查看KVM模块是否已安装

Lsmod:显示已载入的系统模块

[root@kvm ~]# lsmod | grep kvm
kvm_intel       183621 0
kvm          586948 1 kvm_intel
irqbypass       13503 1 kvm

4) 设置开启启动界面的显示模式

[root@kvm ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

4、设置KVM网络

1)KVM网络的两种模式:

① NAT: 默认设置,数据包由 NAT 方式通过主机的接口进行

传送,可以访问外网,但是无法从外部访问虚拟机网络

**② 网桥:**这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)

使用Bridge网桥模式进行部署

[root@bdqn ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=noneDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=noIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=aac61931-47a6-40e5-9511-68adf20e97c5DEVICE=ens33ONBOOT=yes#IPADDR=192.168.100.46#PREFIX=24#GATEWAY=192.168.100.1BRIDGE=br0     #删除原先地址,设置为网桥模式,关联br0网卡

2)创建、编辑桥接网卡

[root@bdqn ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0TYPE=BridgeBOOTPROTO=staticDEFROUTE=yesPEERDNS=yesPEERROUTES=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=br0DEVICE=br0ONBOOT=yesIPADDR=192.168.226.200NETMASK=255.255.255.0GATEWAY=192.168.226.2

5、KVM部署与管理

1)创建KVM存储和镜像数据的目录、上传centos7镜像

[root@kvm network-scripts]# mkdir -p /data_kvm/iso[root@kvm network-scripts]# mkdir -p /data/_kvm/store[root@kvm network-scripts]# mkdir /abc[root@kvm network-scripts]# mount.cifs //192.168.226.1/LAMP-C7 /mntPassword for root@//192.168.226.1/LAMP-C7: [root@kvm network-scripts]# cd /abc[root@kvm abc]# cp -p CentOS-7-x86_64-DVD-1806.iso /data_kvm/iso/#查看镜像[root@kvm abc]# ll /data_kvm/iso/总用量 4481024-rwxr-xr-x. 1 root root 4588568576 2月 20 2019 CentOS-7-x86_64-DVD-1810.iso

2)使用虚拟系统管理器管理虚拟机

[root@kvm kvmdata]# virt-manager

3)操作步骤

① 第一步:创建存储池

一样的操作创建iso存储池

② 在store存储池中创建存储卷

③ 创建虚拟机

启用最小化安装,节省空间

到此这篇关于KVM 介绍的文章就介绍到这了,更多相关KVM 介绍内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Linux KVM的QCOW2 和 ROW的详解及区别介绍

     QCOW2和ROW 区别 kvm虚拟机中需要选择磁盘镜像的格式,通常的选择有两种,一种是raw镜像格式,一种是qcow2格式. raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来管理的,Linux下的文件系统可以很好的支持空洞的特性,所以,如果你创建了一个100G的raw格式的文件,ls看的时候,可以看到这个文件是100G的,但是用du 来看,这个文件会很小. qcow2是kvm支持的磁盘镜像格式,我们创建一个100G的qcow2磁盘之后,无

  • 详细介绍kvm虚拟机静态和动态迁移(图文介绍)

    本文主要介绍了kvm虚拟机静态和动态迁移,具体如下: 一.kvm虚拟机静态迁移 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方式, (2)虚拟主机之间使用共享存储存放虚拟机磁盘文件 该方式只是在目标虚拟主机上重新定义虚拟机就可以了. 2.静态迁移过程如下 (1)确定虚拟机关闭状态 (2)准备迁移oeltest02虚拟机,查看该虚拟机配置的磁盘文件

  • KVM虚拟机的创建、管理与迁移介绍

    虚拟机迁移技术为服务器虚拟化提供了便捷的方法.尽管商业的虚拟软件功能比较强大,但是开源虚拟机如 Linux 内核虚拟机 KVM 和 XEN 发展迅速,迁移技术日趋完善.  一.安装guest虚拟机 1.直接通过virt-manager安装.管理虚拟机(略) 2.通过命令行安装guest虚拟机 qemu-img create -f qcow2 /images/centos6.3-x86_64.img 10G chown qemu:qemu /images/centos6.3-x86_64.img

  • KVM虚拟化(一)——KVM虚拟机的介绍与简单使用

    一.架构及介绍 KVM(Kernel-based Virtual Machine)它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购: 自Linux 2.6.20后整合到内核,该内核模块使得 Linux 变成了一个 Hypervisor层: 它依托于CPU虚拟化指令集,性能.安全性.兼容性.稳定性表现很好,每个虚拟化操作系统表现为单个系统进程,与Linux安全模块selinux安全模块很好结合: 官方网站为http://www.linux-kvm.org/page/Mai

  • KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

    一.使用virt-manager创建和管理虚拟机 1.使用VNC Viewer连接进入虚拟化平台主机 2.打开终端输入virt-manager命令启动virt-manager虚拟机管理界面 #virt-manager 3.通过virt-manager安装CentOS 6.6的虚拟机 点击如图所示图标新建虚拟机: 选择PXE引导,我的网络内存在一个系统自动化部署服务器: 选择操作系统类型和版本: 设置内存和CPU个数: 设置硬盘大小,这里采用动态扩展磁盘空间方式: 忽略这个错误,由于是虚拟磁盘,不

  • KVM 介绍及作用详解

    目录 一.虚拟化 1.背景 2.虚拟化技术介绍 3.虚拟化技术发展 4.虚拟化类型 5.虚拟化的特性特性: 二.KVM概述 1.KVM简介 2.KVM的作用 3.KVM 虚拟化架构/三种模式 4.KVM核心组件及作用 5.KVM工作流程 三.KVM虚拟化平台部署 1.虚拟机资源 2.实验环境 3.安装KVM 4.设置KVM网络 5.KVM部署与管理 一.虚拟化 1.背景 美国环境保护EPA报告中曾经统计过一组统计数据:EPA研究服务器和数据中心得能源效率时发现,实际上服务器只有5%得时间时在工作

  • bootstrap中的 form表单属性role="form"的作用详解

    html 里面的 role 本质上是增强语义性,当现有的HTML标签不能充分表达语义性的时候,就可以借助role来说明.通常这种情况出现在一些自定义的组件上,这样可增强组件的可访问性.可用性和可交互性. role的作用是描述一个非标准的tag的实际作用.比如用div做button,那么设置div 的 role="button",辅助工具就可以认出这实际上是个button 比如, <div role="checkbox" aria-checked="c

  • JavaScript中闭包的写法和作用详解

    1.什么是闭包 闭包是有权访问另一个函数作用域的变量的函数. 简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内.而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数和声明的其他内部函数.当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包. 2.变量的作用域 要理解闭包,首先要理解变量的作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变

  • PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )

    PHP中有eAccelerator.memcached.xcache.APC 4个加速.缓存扩展,下面给大家介绍下其区别,一起看看吧! 折腾VPS的朋友,在安装好LNMP等Web运行环境后都会选择一些缓存扩展安装以提高PHP运行速度,常被人介绍的有 eAccelerator.memcached.xcache.Alternative PHP Cache这几个缓存扩展,它们之间有什么区别?分别的作用又是什么?我们如何选择?这是本文给于大家的答案. 1.eAccelerator eAccelerato

  • Python中__init__.py文件的作用详解

    __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件. 通常__init__.py 文件为空,但是我们还可以为它增加其他的功能.我们在导入一个包时,实际上是导入了它的__init__.py文件.这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入. # package # __init__.py import re import urllib import sys impo

  • JS中的防抖与节流及作用详解

    概念 函数防抖(debounce)是指在一定时间内,在动作被连续频繁触发的情况下,动作只会被执行一次,也就是说当调用动作过n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间,所以短时间内的连续动作永远只会触发一次,比如说用手指一直按住一个弹簧,它将不会弹起直到你松手为止. 函数节流是指一定时间内执行的操作只执行一次,也就是说即预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期,一个比较形象的例子是如果将水龙头拧紧直到水是以水滴的形式流出

  • vue中$refs的用法及作用详解

    一般来讲,获取DOM元素,需document.querySelector(".input1")获取这个dom节点,然后在获取input1的值. 但是用ref绑定之后,我们就不需要在获取dom节点了,直接在上面的input上绑定input1,然后$refs里面调用就行. 然后在javascript里面这样调用:this.$refs.input1 这样就可以减少获取dom节点的消耗了 用法如下: HTML: <div id="app"> <input

  • Springmvc拦截器执行顺序及各方法作用详解

    实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter ,下面讲实现其接口的写法,先看一下这个接口的三个方法. - 方法preHandle: 顾名思义,该方法将在请求处理之前进行调用,在controller之前执行.SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在

  • vue 中的 render 函数作用详解

    render 函数作用 vue渲染函数文档第一遍看的晕晕乎乎的,再看看写写终于清晰了.建议配合文档阅读,本文也是根据文档加上自己的理解. 注:本文代码都是在单文件组件中编写.代码地址 render 函数作用 render 函数 跟 template 一样都是创建 html 模板的,但是有些场景中用 template 实现起来代码冗长繁琐而且有大量重复,这时候就可以用 render 函数. 官网例子:子组件想要根据父组件传递的 level 值(1-6)来决定渲染标签 h 几.具体代码可以看文档.

  • package.json中homepage属性的作用详解

    Package.json 属性说明 name - 包名. version - 包的版本号. description - 包的描述. homepage - 包的官网 url . author - 包的作者姓名. contributors - 包的其他贡献者姓名. dependencies - 依赖包列表.如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下. repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上.

随机推荐