1、服务器虚拟化
虚拟化使得一台物理服务器上可以运行多台虚拟机,虚拟机共享物理机的CPU、内存、IO硬件资源,但是逻辑上虚拟机是相互隔离的。
2、虚拟化中物理机和虚拟机的叫法
1)宿主机(Host)
运行了虚拟机的物理服务器
2)客户机(Guest)
运行在宿主机上的虚拟机
3、虚拟机的组成
虚拟机由虚拟机的硬件设备组成,虚拟机的硬件设备是由Hypervisor(虚拟化层)从物理服务器上的硬件设备虚拟而来的。
二、虚拟化的分类
根据虚拟化层的实现方式和所处位置分为I型和II型虚拟化
1型虚拟化(原生架构)
虚拟化层直接安装在物理机上,多个虚拟机都在虚拟化层上运行,虚拟化层实现方式是一个特殊定制的linux系统,xen和ESXI都属于这个类型,就是原生架构和裸金属架构,但是在KVM里面它叫1型虚拟化。
II型虚拟化
在物理服务器上安装操作系统,在操作系统之上安装虚拟化软件,使操作系统变成虚拟化层,例如VMware workstation、KVM、virtual box
分类规则:按照Hypervisor所处位置和实现方式
1、I型虚拟化(原生架构)
在物理服务器上直接安装软件实现虚拟化层,例如ESXI、Xen
2、II型虚拟化(寄居架构)
在物理服务器上安装操作系统,在操作系统之上安装虚拟化软件,使操作系统变成虚拟化层,例如VMware workstation、KVM、virtual box
三、kvm
1、简介
KVM基于Linux内核来实现的虚拟化,全称“Kernel-Based Virtual Machine”
课下根据课堂要求了解KVM一些关键模块
2、关键模块
1)kvm.ko
用于管理虚拟CPU和内存
备注:虚拟磁盘和虚拟网卡是由QEMU提供
2)libvirt
用于管理虚拟机的生命周期(创建、启停、删除)
libvirt也是由三部分组成。
1.libvirtd
libvirt的守护进程
2.virsh
是由libvirt提供的一个命令行工具(通过这个命令行工具,可以创建、启停、创建虚机)
3.API库(应用程序接口库)
可以允许其他软件通过libvirt管理虚拟机,例如virt-manager可以通该接口连接到libvirt,然后对虚拟机进行操作
四、KVM架构
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的 全虚拟化解决方案。在kvm上安装的虚拟机它不知道自己运行在虚拟化环境的,它会认为运行在硬件之上的,安装之前要把Intel VT技术开启,如果是AMD就开启AMD的虚拟化技术,在KVM里面,装完KVM创建虚机,它就会体现为linux操作系统的进程,由标准的调度程序来调度,
图解:底层是服务器的硬件,有硬件的CPU、硬件的内存、还包括输入输出设备,上面安装了linux操作系统,它提供了KVM模块, kvm模块给虚机提供了虚拟的CPU和虚拟内存,但不提供虚拟磁盘和网卡,虚拟磁盘和网卡是由QEMU程序来提供的,QEMU是安装在linux操作系统之上的,但是,KVM 本身不执行任何硬件模拟,需要用户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟 I/O,用户空间就是QEMU,也就是所KVM内存本身是不提供硬盘和网卡,就是有用户空间的QEMU来提供虚拟硬盘和网卡。
内核空间:
KVM模块,负责管理虚拟机的虚拟CPU和内存;负责拦截虚拟机的IO操作,交给QEMU处理
用户空间:
QEMU程序,负责处理虚拟机的IO操作,提供虚拟机的虚拟硬盘和虚拟网卡
五、CPU和内存虚拟化
1、CPU的虚拟化
1)实施虚拟化技术前,需要查看服务器是否支持虚拟化
1.进入服务器的BIOS菜单,查看虚拟化相关配置
2.进入服务器上的Linux系统,运行
egrep '(vmx|svm)' /proc/cpuinfo
2)KVM虚拟机运行起来是以进程的形式存在于Linux操作系统中的;虚拟机的虚拟CPU是由物理服务器的CPU线程来进行模拟的。
3)CPU资源的超分,在一台宿主机上运行的所有虚拟机分配的vcpu数可以超过物理机的CPU数。
备注:超配前一定要进行测试,不严重影响虚拟机性能的前提下可以适当超配
2、内存的虚拟化
1)概念
VA:虚拟机中应用程序使用的内存空间
PA:虚拟机的物理内存
MA:物理服务器的内存
VA--->PV---->MV (映射关系)
2)内存虚拟化的实现方式
1.软件方式:例如影子页面技术
2.硬件方式:开启CPU的辅助功能,例如Intel EPT/VT或者AMD NPT/AMD-V
3.KSM方式:可以将多个内存中的数据副本进行合并,释放内存空间,相当于ESXI中的透明页面共享技术。
3)内存的管理机制
1.气球技术(同ESXI的气球回收机制)就是将虚拟机里面非活动的内存数据占用空间回收回主机,
将VM中非活动内存数据占用的内存空间回收至宿主机
2.大页技术
默认每个页帧大小是4KB,大页技术中可以支持一个页帧2M、4M、8M,可以加快内存数据的查找和访问(相当于硬盘的簇和块的概念,把块的大小调大后,占用的块数量减少,加快内存数据的查找和访问)
六、存储的虚拟化
Kvm的存储虚拟化是通过存储池(storage pool)和卷(volume)来管理的storage pool是用来存储volume的,volume类似于一块硬盘,storage pool是宿主机的一块存储空间,volume pool就是storage pool划分出的一部分空间,volume给虚拟机使用,在虚拟机里看到的就是一块硬盘。
1)概念
1.Storage Pool:存储池,宿主机上能够看到的一块存储空间,用于保存volume;
2.Volume:卷,可以用作虚拟机的虚拟磁盘使用;
2)Storage Pool的类型
1.目录类型
通过目录保存volume,默认目录:/var/lib/libvirt/images
2.LVM类型
LVM类型的Storage Pool是一个VG,VG中的LV作为Volume
3.其他类型
ISCSI、Ceph、NFS等等
3)Volume的类型
1. raw:原始磁盘镜像格式,不支持快照功能,浪费宿主机的存储空间(相当于ESXI上虚拟机磁盘置备模式中的厚置备立即置零)
2.vmdk:VMware磁盘格式
3.qcow2:推荐的KVM虚拟机的磁盘格式,支持多快照,节约宿主机的存储空间(相当于支持类似ESXI上虚拟机磁盘置备模式中的精简置备)
4.ISO:映像文件格式
七、网络的虚拟化
1)Linux Bridge
实现KVM的网络虚拟化的,Linux Bridge可以连接KVM虚拟机的网卡和宿主机的物理网卡,实现KVM虚拟机之间以及KVM虚拟机与外界通信,类似于一个虚拟的二层交换机。
2)KVM中常见的三种网络模式
1.隔离模式
可以让VM之间相互通信,但是VM无法与宿主机及其他外部网络通信,相当于VMware workstation中的LAN区段模式;
2.NAT模式(默认)
可以实现VM之间相互通信,也可以让VM与宿主机及外部网络通信,但是对外部网络发送的数据包将进行网络地址转换;
这种模式在linux bridge上有一个NAT设备,这个NAT设备可以让linux bridge可以跟物理网卡之间相连,物理网卡可以连接到外部网络,NAT可以做地址转换让虚拟机可以跟网络设备进行通讯,虚拟机发出的可以让外部接收,但是外部访问内部虚拟机就会被隔离。
3.桥接模式
可以让VM之间相互通信,也可以让VM与宿主机及外部网络通信。在桥接模式下,物理网卡上的网络参数配置将配置到网桥上(br0),而物理网卡变成了一个通信的通道