KVM虚拟化

一、虚拟化技术

1.虚拟化技术概述

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

2.虚拟化技术发展

  • 雏形:最初虚拟化技术是从CPU的分片开始,高效的利用CPU。1961年,IBM709机器实现了兼容性分时系统,将CPU占用切分为多个极短的时间片(1/100sec)每一个时间片执行不同的工作,通过对这些时间片进行轮询,从而将一个CPU伪装成多个CPU。
  • 1972年, IBM正式将system370机的分时系统命名为虚拟机。
  • 1990年, IBM推出的system390机支持逻辑分区(将一个CPU分为多份,相互独立,也就是逻辑分割)
  • 2003年, Xen问世,它是一个外部的hypervisor程序(虚拟机管理程序),能够控制虚拟机和给多个客户机分配资源。但是,由于它是外部程序软件,在和内核的联系过程过程中中,有性能损耗,以及性能的瓶颈。支持全虚拟化和半虚拟化。
  • 2007年, KVM问世,Kernel-based Virtual Machine的简称,现已内置在kernel内核中,支持全虚拟化。

Xen支持的虚拟化技术:全虚拟化,半虚拟化
KVM支持的虚拟化技术:全虚拟化

3.虚拟化类型

全虚拟化

将物理硬件资源全部通过软件的方式抽象化,最后进行调用,使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层。Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。

半虚拟化

物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS上的一个程序模块运行,并对虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。需要修改操作系统。

直通

直接使用物理硬件资源(需要支持,还不完善)
总结:
全虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比半虚拟化要高;
半虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

3.虚拟化技术的优劣

优点:

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

劣势:

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

二、常见的虚拟化技术

KVM

KVM是指基于Linux内核(Kernel-based)的虚拟机(Virtual Machine)。也有人将KVM架构分解为两部分:KVM驱动,即linux kernel的一个模块和Qemu,即用于模拟虚拟机的用户空间组件,提供I/O设备模型,访问外设的途径。KVM最大的好处就在于它是与Linux内核集成的,所以速度很快。KVM的宿主操作系统必须是Linux,支持的客户机操作系统包括Linux、Windows、Solaris和BSD,运行在支持虚拟化扩展的x86和x86_64硬件架构上,cpu支持VT技术。KVM是一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMDSVM)虚拟化特性的支持,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,而Qemu是一套独立的虚拟化解决方案,KVM借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU。
Intel VT-x技术主要包含CPU、内存和I/O三方面的虚拟化技术,同时提供优化处理(早期为弥补X86架构虚拟化的缺陷)
AMD-V 是对x86处理器系统架构的一组硬件扩展和硬件辅助虚拟化技术,可以简化纯软件的虚拟化解决方案。

Xen

Xen是另一套独立的虚拟化解决方案,最初的Xen只支持半虚拟化,Intel VT技术出现后,添加了全虚拟化功能,这个全虚拟化功能也是借助了qemu实现,但不是完全依赖qemu。Xen是一个开放源代码虚拟机监视器,由剑桥大学开发。Xen的缺点是操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性),所以比较麻烦。使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。Linux的官方内核在较早之前已经去掉了对Xen的支持。

VMWare

VMWare (Virtual Machine ware)是一个“虚拟PC”虚拟机管理软件。它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。

三、虚拟化前、后对比

虚拟化前

1每台主机拥有一个操作系统
2.软硬件紧密结合
3在同一个主机上运行多个应用程序通常会产生冲突
4.系统资源利用率低(例如:5%)
5.硬件成本高昂并且不够灵活

虚拟化后

1打破了操作系统和硬件的互相依赖
2.通过封装到虚拟机的技术,管理操作系统和应用程序为单一的个体
3.强大的安全和故障隔离
4.虚拟机时独立于硬件的,它们可以在任何硬件上运行

对比:

操作系统方面(虚拟化前)︰
LAMP架构中(以一台主机实现)
LINUX + Apache + MySQL + PHP
其中Apache与 MySQL资源是共享的
如果架构要求服务间的安全性隔离比较高的话,Apache的页面和MySQL数据库的目录一定是不能互相碰面,如果Apache漏洞暴露出来,攻击者就
可以Apache的进程访问到MySQL的数据目录,从而获取MySQL中的数据,这种就是严重的安全隐患而想解决这种潜在危险,可以通过实现内核级别的隔离(使用虚拟化技术)

软硬件结合

因为硬件和操作系统不兼容或者不支持,导致有些软、硬件功能无法正常使用(也是最难的问题)使用虚拟化,软硬件之间是会通过虚拟化层驱动进行隔离(调配)的,
只要虚拟化层可以识别软/硬件应用,就可以将软硬件结合使用
在同一个主机上运行多个应用程序通常会产生冲突

  • 例:Apache和Nginx定位相同(80端口)
    只能使用反向代理的方式进行分离,而同时如果在同一台机器使用这种方式,Apache设置"以激活Windows.。和Nainx中重要的数摇文件如里同时被泄霞出去.……而虚拟化可L隔离眠务

四、KVM

1.KVM技术介绍

广义KVM

  • KVM (Kernel-based Vritual Machine)–基于内核的虚拟机
  • KVM是基于虚拟化扩展的X86硬件的开源Linux原生的全虚拟化方案(要求cpu支持Intel-VT-x或
  • AMD-V)KVM内嵌于内核模块中,模拟处理器和内存以支持虚拟机运行
  • 虚拟机被实现为常规的 Linux进程,由标准Linux调度程序进行调度
  • 虚拟机的每个虚拟CPU被实现为一个常规的 Linux进程。这使得KMV能够使用Linux内核的已有功能
  • 但KM本身不执行任何模拟。需要客户空间程序(虚拟机))通过/dev/Kkom(此虚拟设备需要开启硬件辅助虚拟化才能看到)接口设置一个客户机虚拟服务器的地址空间,并且由Qemu模拟I/O (ioctl)进行调度资源和维护管理
  • Libvirt: KVM的管理工具,除了可以管理KVM这类VMM,还可以管理Xen, VirtualBox,甚至OpenStack底层
  • Libvirt包含3个组件:后台daemon程序libvirtd、API库、命令行工具virsh

KVM技术定位(实际应用)

VMwareWorkstation:使用软件达到虚拟多操作系统(硬件资源)
VirtualBox:使用软件虚拟出多物理设备功能
以VMwareworkstation为例:
workstation支持intel公司和AMD公司的虚拟化技术,通过硬件辅助虚拟化技术(Intel-VT-x 或AMD-V)支持KVM。

2.KVM架构及三种模式

VKVM架构

kvm基本结构有2个部分构成

  • kvm 驱动,现在已经是linux kernel的一个模块了。其主要负责虚拟机的创建,虚拟内存的分配,VCPU寄存器的读写以及VCPU的运行。
  • Qemu,用于模拟虚拟机的用户空间组件,提供I/O设备模型,访问外设的途径。
    KVM 虚拟化架构/三种模式:

三种模式

  • 客户模式 (guestOS):
    VM中的OS为GuestOS,客户机在操作系统中运行的模式,客户机分为内核模式和用户模式。
  • 用户模式:
    为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O。
    Qemu工作在此模式下(Qemu的主要功能:控制I/O虚拟化,调用硬件资源),工作原理:控制libkvm工具(工具作用,控制内核中的KVM)来调用虚拟化的物理资源,调用的方式是ioctl,将资源供给虚拟机。
  • linux内核模式:
    模拟CPU、内存,实现客户模式切换,处理从客户模式的推出。KVM即运行在此模式下,实现虚拟机硬件资源(CPU/内存)的虚拟化,虚拟化/抽象化硬件资源,并供给QEMU组件调用。

3.KVM原理及工作流程

KVM原理

1.Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等), 被KVM 置于一种受限制的CPU模式下运行。
2.KVM 内核模块模拟处理器和内存以支持虚拟机运行
3.Qemu主要处理I/O以及为客户提供一个用户空间/dev/kvm工具libvirt 来进行虚拟机管理ioctl(定义)专用于设备输入输出操作的系统调用
libvirt: KVM管理工具
以上构成一个完整的虚拟化平台
简单理解:
KVM驱动提供处理器、内存的虚拟化,以及客户机I/O的拦截,guest的I/O被拦截后,交由Qemu处理
Qemu利用接口libkvm调用(ioctl)虚拟机设备接口/dev/kvm来分配资源、管理、维护虚拟机

KVM工作流程

用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVMDriver为虚拟机创建虚拟CPU和虚拟内存,然后执行VMLAUNCH指令进入客户模式,装载Guest OS并运行。Guest OS运行过程中如果发生中断或者影子缺页等异常,将暂停Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。内核模式处理这些异常时如果不需要I/O则处理完成后重新进入客户模式,如果需要I/O则进入到用户模式,由Qemu来处理I/O,处理完成后进入内核模式,再进入客户模式。
在这里插入图片描述

五、KVM项目部署过程

kvm部署拓扑图

在这里插入图片描述

安装KVM前的环境部署

win10系统下,在VMware软件中新建虚拟机,并安装centos7系统
注意:
处理器数量:4 每个处理器内核数:2 处理器内核总数:8
虚拟化Intel VT-X 选项√下
内存大小为8G 网络NAT模式 声卡和打印机移除 挂载光盘 硬盘300G
安装GNOME桌面 点开发工具 分区自动分配 安装操作系统
在这里插入图片描述
1.修改主机名,关闭防火墙

[root@localhost ~]# hostnamectl set-hostname kvm
[root@localhost ~]# su
[root@kvm ~]# setenforce 0
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

2.配置静态IP地址,保证与nat模式的网段一致,保证能上网

[root@kvm ~]# vi /etc/resolv.conf
nameserver 8.8.8.8

3.设置镜像光盘自动挂载

[root@kvm ~]# vim /etc/fstab 
/dev/sr0 /mnt iso9660 defaults 0 0	'//尾行添加'

4.优化ssh

[root@kvm ~]# vim /etc/ssh/sshd_config 
UseDNS no	'//取消注释,并将yes改成no'

5.yum本地仓库搭建

[root@kvm ~]# cd /etc/yum.repos.d/
[root@kvm yum.repos.d]# mkdir bak
[root@kvm yum.repos.d]# mv * bak
mv: 无法将目录"bak" 移动至自身的子目录"bak/bak"[root@kvm yum.repos.d]# ls
bak
[root@kvm yum.repos.d]# vim local.repo
##输入以下信息
[local]
name=CentOS
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@kvm yum.repos.d]# yum clean all	'//清空yum仓库'
[root@kvm yum.repos.d]# mount /dev/sr0 /mnt	'//因为没有重启,所以需要手动挂载一下光盘镜像'
[root@kvm yum.repos.d]# yum makecache	'//加载yum数据'

安装KVM和网络配置

1.修改ens33网卡

[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO=static
#IPADDR=192.168.91.60           ##注释掉原本的IP地址
#NETMASK=255.255.255.0
#GATEWAY=192.168.91.2
#DNS1=192.168.91.2
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="5eb452be-fd5c-4ea8-9e7d-c40c69200955"
DEVICE="ens33"
ONBOOT=yes
BRIDGE=br0             ##添加此处

2.新建桥接网卡

[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
##添加上述内容即可
TYPE=Bridge
OTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.91.60
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=8.8.8.8
[root@kvm ~]# systemctl restart network	     ##重启网卡
[root@kvm ~]# ifconfig 
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.60  netmask 255.255.255.0  broadcast 192.168.91.255
        inet6 fe80::63df:a936:18c4:87d8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:41:8e:26  txqueuelen 1000  (Ethernet)
        RX packets 27  bytes 2226 (2.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 50  bytes 5478 (5.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:41:8e:26  txqueuelen 1000  (Ethernet)
        RX packets 79  bytes 7526 (7.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 144  bytes 15430 (15.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.安装一些需要的软件

[root@kvm ~]# yum groupinstall -y "GNOME Desktop"   #安装 GNOME 桌面环境  如果装了图形界面不需要装了
[root@kvm ~]# yum -y install qemu-kvm               ##安装KVM 模块
[root@kvm ~]# yum -y install qemu-kvm-tools         ##安装KVM 调试工具
[root@kvm ~]# yum -y install virt-install           ##构建虚拟机的命令行工具
[root@kvm ~]# yum -y install libvirt                ##虚拟机管理工具
[root@kvm ~]# yum -y install virt-manager           ##图形界面管理虚拟机
[root@kvm ~]# reboot	             ##重启

4.进行检查

[root@kvm ~]# cat /proc/cpuinfo | grep vmx        ##查看CPU是否支持虚拟化  
[root@kvm ~]# lsmod | grep kvm         ##查看KVM模块是否安装
kvm_intel             170086  0 
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
[root@kvm ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target            ##优化,将系统的默认运行target更改为graphical.targe
[root@kvm ~]# systemctl start libvirtd      ##开启libvirtd服务
[root@kvm ~]# systemctl enable libvirtd       ##设置开机自启动

5.创建kvm存储
创建镜像文件夹,上传镜像

[root@kvm ~]# mkdir -p /data_kvm/iso        ##上传镜像centos 7.6的镜像
##用ftp把CentOS7镜像文件拖进/data_kvm/iso下
[root@kvm ~]# mkdir -p /data_kvm/store       ##虚拟机存储
[root@kvm ~]# cd /data_kvm/iso
[root@kvm iso]# ls
CentOS-7-x86_64-DVD-1708.iso
[root@kvm iso]# virt-manager         ##图形界面敲,打开虚拟系统管理器

6.进入后按下图步骤在KVM上创建虚拟机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在KVM中创建虚拟机
打开虚拟系统管理器,右击QEMU/KVM,选择新建
在这里插入图片描述
选择用本地安装介质
在这里插入图片描述
选择使用ISO镜像
在这里插入图片描述
虚拟机内存和CPU设置,前进
在这里插入图片描述
在这里插入图片描述
点击在安装前自定义配置,选择网络(桥接)
在这里插入图片描述
击引导选项–,勾选主机引导时启动虚拟机,应用后开始安装
在这里插入图片描述
后面的步骤就是正常安装CentOS7系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值