目录
一、虚拟化技术
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系统