KVM 虚拟化技术 理论详解
- 一.虚拟化技术
- 1.常用的虚拟化软件
- 2.虚拟化技术的发展
- 3.类型
- 4.虚拟化技术分类
- 5.虚拟化的优势
- 6.虚拟化的劣势
- 二.KVM
- 1.概述
- 2.KVM架构
- 3.KVM支持功能列表
- 4.KVM 工具
- 4.工作流程
- 三.搭建KVM虚拟化平台
- 1.准备虚拟机
- 2.实验环境
- 3.安装KVM
- 4.设置KVM网络
- 5.KVM部署与管理
一.虚拟化技术
- 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机。
- 同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互不影响,从而提高计算机的工作效率。
- 将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象 、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。
- 由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。
- 一般所指的虚拟化资源包括计算能力和数据存储。
1.常用的虚拟化软件
VMwar Workstation
- 可以在一个操作系统中(win10)模拟出多个操作系统(如:centos、win10、suse),同时每个操作系统可以跑不同的服务(nginx+tomcat),从而实现一台宿主机搭建一个集群。
- 通过软件/应用程序的方式,来实现物理硬件的功能。
ensp
- 以软件的形式实现物理设备的功能(如:二层交换机、路由器、三层交换机等。。。)
2.虚拟化技术的发展
- 1963年 : IBM709机器实现了分时系统,将 CPU 占用切分为多个极短的时间片(1/100sec)每一个时间片执行不同的工作,通过对这些时间片进行轮询,从而将一个 CPU 伪装成多个 CPU
- 1972年 : IBM 正式将 system370 机的分时系统命名为虚拟机
- 1990年 : IBM 推出的 system390 机支持逻辑分区 (将一个 CPU 分为多份,相互独立,也就是逻辑分割)
- 2003年: Xen 问世,其是一个外部的 hypervisor/VMM 程序 (虚拟机管理程序),能够控制宿主机及给多个客户机分配资源
- 2007年 : KVM 问世,现已内置与 Kernel 内核中
- Xen 支持的虚拟化技术:全虚拟化、半虚拟化
- KVM 支持的虚拟化技术:全虚拟化
3.类型
全虚拟化
- 全虚拟化(Full Virtualization)也称为原始虚拟化技术
- 将物理硬件资源全部通过软件的方式来抽象化(虚拟化),最后进行统一分配调用
- 使用虚拟机协调 Guest 操作系统和原始硬件,VMM 在 Guest 操作系统和裸硬件之间用于工作协调,一些受保护指令必须由 Hypervisor(虚拟机管理程序)来捕获处理
- 即,使用 hypervisor (VMM) 软件,在底层硬件和服务器之间建立一个抽象层
- 全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为 Hypervisor 需要占用一些资源
半虚拟化
- 半虚拟化(Para Virtualization)是另一种类似于全虚拟化的技术,它使用 Hypervisor分享存取底层的硬件,但是它的 Guest 操作系统集成了虚拟化方面的代码
- 该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作
- 半虚拟化需要 Guest 操作系统做一些修改,使 Guest 操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能
直通
- 能够直接调用硬件资源
- 就目前来看,因为有太多制约条件限制,发展还不完善
4.虚拟化技术分类
平台虚拟化(Platform Virtualization)
- 针对计算机和操作系统的虚拟化。
资源虚拟化(Resource Virtualization)
- 针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。
应用程序虚拟化(Application Virtualization)
- 包括仿真、模拟、解释技术等
5.虚拟化的优势
1.降低运营成本
- 服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。
2.降低能源消耗
- 通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。
3.动态调度资源
- 在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。
4.加速应用部署
- 采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。
5.提升资源利用率
- 通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。
6.提高应用兼容性
- 服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。
7.提高服务可用性
- 用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。
6.虚拟化的劣势
1.前期高额费用
- 初期的硬件支持,虚拟化对性能要求还是很高的
2.降低硬件利用率
- 特定场景例如极度吃资源的应用不一定适合虚拟化,虚拟化毕竟多少还是会降低性能
3.更大的错误影响面
- 本地物理机 down 机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏,单点故障
4.实施配置复杂、管理复杂
- 管理人员运维、排障困难,耗费大量人力物力
5.一定的限制性
- 虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用,涉及开发底层/公司源代码了
6.安全性
- 虚拟化技术自身的安全隐患
二.KVM
虚拟化简史
KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor
1.概述
- 由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
- KVM是开源软件
- 是x86架构且硬件支持虚拟化技术(如intel VT或AMD-V)的Linux全虚拟化解决方案
- 包含为处理器提供底层虚拟化可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)
- 需要经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面
- 能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。
2.KVM架构
Linux 上的用户空间、内核空间和虚机
- 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 交互。
3.KVM支持功能列表
- 支持CPU 和 memory 超分(Overcommit)
- 支持半虚拟化I/O (virtio)
- 支持热插拔 (cpu,块设备、网络设备等)
- 支持对称多处理(Symmetric Multi-Processing,缩写为 SMP )
- 支持实时迁移(Live Migration)
- 支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV)
- 支持 内核同页合并 (KSM )
- 支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )
4.KVM 工具
工具 | 解释 |
libvirt | 操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。 |
Virsh | 基于 libvirt 的 命令行工具 (CLI) |
Virt-Manager | 基于 libvirt 的 GUI 工具 |
virt-v2v | 虚机格式迁移工具 |
virt-* 工具 | 包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等 |
sVirt | 安全工具 |
4.工作流程
- 用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式
- KVM 驱动为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAU-NCH 指令进入客户模式,装载 Guest OS 并运行
- Guest OS 运行过程中如果发生异常,则暂停 Guest OS 的运行并保存当前状态同时退出到内核模式来处理这些异常
- 内核模式处理这些异常时如果不需要 I/O 则处理完成后重新进入客户模式
- 如果需要 I/O 则进入到用户模式,则由 Qemu 来处理 I/O,处理完成后进入内核模式,再进入客户模式
三.搭建KVM虚拟化平台
1.准备虚拟机
CPU | 内存 | 硬盘 | 网卡 | 操作系统 |
双核双线程-CPU虚拟化开启 | 8G | 300G | 单网卡 | Centos 7.6(1810) |
2.实验环境
1、修改主机名
hostnamectl set-hostname kvm
su -
2、环境优化
#设置DNS反向解析
#是否反解DNS,设置为NO可以让客户端连接服务器更快
vim /etc/ssh/sshd_config
#115行取消DNS注释,改为NO
3、制作本地YUM仓库
mkdir /abc
cd /etc/yum.repos.d/
ls
mkdir bak
mv CentOS-* bak
ls
vim local.repo
[local]
name=kvm
baseurl=file:///abc
gpgcheck=0
enabled=1
yum clean all
yum repolist
4、关闭防火墙、核心防护
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
3.安装KVM
1.安装KVM基本组件
yum groupinstall -y "GNOME Desktop" #安装 GNOME 桌面环境 如果装了图形界面可以不需要装
yum -y install qemu-kvm #KVM 模块
yum -y install qemu-kvm-tools #安装KVM 调试工具,可不安装
yum -y install virt-install #构建虚拟机的命令行工具
yum -y install qemu-img #qemu 组件,创建磁盘、启动虚拟机等
yum -y install bridge-utils #网络支持工具
yum -y install libvirt #虚拟机管理工具
yum -y install virt-manager #图形界面管理虚拟机
#以下是安装的内容
yum groupinstall -y "GNOME Desktop"
yum -y install qemu-kvm
yum -y install qemu-kvm-tools
yum -y install virt-install
yum -y install qemu-img
yum -y install bridge-utils
yum -y install libvirt
yum -y install virt-manager
# 检测CPU是否支持虚拟化
cat /proc/cpuinfo | grep vmx
# 查看KVM模块是否已安装
Lsmod:显示已载入的系统模块
lsmod | grep kvm
2. 设置开启启动界面的显示模式
ln -sf /lib/systemd/system/graphical.target
4.设置KVM网络
KVM网络的两种模式:
1.NAT: 默认设置,数据包由 NAT 方式通过主机的接口进行
传送,可以访问外网,但是无法从外部访问虚拟机网络
2.网桥:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)
使用Bridge网桥模式进行部署
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=d233fa1b-ad26-4a85-b731-414adce23447
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 #删除原先地址,设置为网桥模式,关联br0网卡
#创建、编辑桥接网卡
vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=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.222.10
NETMASK=255.255.255.0
GATEWAY=192.168.222.2
service network restart
#重启网卡
5.KVM部署与管理
#创建KVM存储和镜像数据的目录、上传centos7镜像
mkdir -p /data_kvm/iso
mkdir -p /data/_kvm/store
smbclient -L //192.168.222.1
mount.cifs //192.168.222.1/LMX /mnt
cp -p CentOS-7-x86_64-DVD-1806.iso /data_kvm/iso/
#查看镜像
ll /data_kvm/iso/
总用量 4481024
-rwxr-xr-x. 1 root root 4588568576 2月 20 2019 CentOS-7-x86_64-DVD-1810.iso
# 使用虚拟系统管理器管理虚拟机
创建思路:
1.创建存储池(ISO、STORE)
2.添加存储卷
3. 创建虚拟机
virt-manager