目录
一、虚拟机技术发展
1.全虚拟化
随着x86的流行并成为了服务器的行业标准,为解决基础架构利用率低,成本高等缺点,大大促进了虚拟化技术的发展。VMware首创了纯软件实现方式并迅速抢占虚拟化市场,全虚拟化需要在VMM中模拟出一颗包含各种单元的CPU,还需要模拟一张进行虚拟存储地址和物理存储地址转换的页表,还需要模拟磁盘设备控制器、网络适配器等各种I/O外设接口。全虚拟化性能较低,技术实现异常困难。代表性产品如VMware vSphere、Hyper-V、Xen、KVM。
2.半虚拟化
半虚拟化是一种通过修改Guest OS部分访问特权状态的代码以便直接与VMM交互的技术。在半虚拟化虚拟机中,部分硬件接口以软件的形式提供给Guest OS,提升了性能,但是半虚拟化VMM只需要模拟部分底层硬件,因此Guest OS不做修改是无法在虚拟机中运行的,甚至运行在虚拟机中的其它程序也需要进行修改。代表性产品如Xen、KVM、VMware ESX Server。
3.硬件辅助虚拟化
CPU硬件直接改造升级,使用Intel VT-X/AMD-V技术,CPU直接接收虚拟机的命令,避免的解释和翻译命令的过程,性能大大提高。基于硬件新技术的产品如KVM、Hyper-V、VMware。
4.容器化
在微服务架构的推动下,容器技术不再隔离计算机硬件资源,而是通过Cggroup和Namespace等技术,隔离操作系统资源,虚拟化成本大大减少,更轻量级。代表性产品如Docker。
5.超轻虚拟化
基于KVM和VirtIO,构建MicroVM Zone。提供毫秒级的VM创建速度,是一个更精简、更安全、更现代化的虚拟化技术方向。
二、KVM
目前应用比较广泛的产品:Docker、基于容器的编排自动化工具Kubernetes;KVM、基于KVM的开源云计算平台OpenStack;Firecracker、基于Firecracker的AWS Lambda&Fargate等。
KVM(基于内核的虚拟机)是一个适用于支持硬件辅助虚拟化(如Intel VT或AMD-V)的x86硬件全虚拟化解决方案。它允许我们在单个物理机器上运行多个虚拟机(VM),每个虚拟机都有自己的虚拟化硬件,如网卡、磁盘和图形适配器。
KVM的主要特点:
开源:KVM是开源的,自Linux内核2.6.20版本起集成到主线内核中,把Linux变成了Hypervisor。
性能:通过利用硬件虚拟化扩展,提供接近原生的性能。
灵活性:支持多种guest操作系统,包括各种Linux发行版和Windows。
可扩展性:适用于小规模部署和大规模云环境。
部署示例
1.检查虚拟化支持:
cat /proc/cpuinfo | grep -E 'vmx|svm'
2.安装KVM及相关软件包:
sudo yum -y install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-clone virt-viewer
3.启动并启用libvirtd服务:
sudo systemctl enable --now libvirtd
sudo systemctl start libvirtd
4.配置网桥,修改 ifcfg-br0
文件,设置 TYPE=Bridge
,并配置 IP 地址、子网掩码、网关和 DNS:
ip link add br0 type bridge
ip link set dev br0 up
brctl show
5.创建虚拟存储卷
mkdir -p /data/vmfs
virsh pool-define-as vmdisk --type dir --target /data/vmfs
virsh pool-build vmdisk
virsh pool-list --all
virsh pool-start vmdisk
virsh pool-autostart vmdisk
virsh pool-list --all
virsh vol-create-as vmdisk oeltest03.qcow2 20G --format qcow2
6.创建虚拟机:
sudo virt-install \
--name=centos7 \
--vcpus=2 \
--memory=2048 \--disk path=/data/vmfs/oeltest03.qcow2,format=qcow2,size=20,bus=virtio \
--cdrom=/path/to/centos7.iso \
--disk size=20 \
--os-type=linux \
--network bridge=br0
7.图形化创建虚拟机(可选):
sudo yum install virt-manager
运行virt-manager命令将自动弹出创建虚拟机的窗口,进行图形化管理。
8.查看虚拟机状态:
virsh list --all
工具集
qemu-kvm:负责CPU和内存的虚拟化。
libvirt:KVM 管理工具,提供统一的接口,包含后台服务libvirtd、API 库、命令行工具virsh
libvirt-python:通过 Python调用libvirt API。
libguestfs-tools:虚拟机镜像管理工具。
virt-install:命令行工具,用于创建虚拟机。
virt-clone:用于克隆虚拟机。
virt-manager:图形界面管理工具。
virt-viewer:用于显示虚拟机的图形控制台。
架构
1.KVM的内核模块kvm.ko,只用于直接管理虚拟CPU和虚拟内存;Qemu协助管理IO设备虚拟化,用于虚拟磁盘IO和网络IO等等,Qemu的核心模块为VirtIO,VirtIO是半虚拟化技术;
2.一个KVM虚拟机在宿主机操作系统中是一个qemu-kvm进程,每个虚拟机中的vCPU是宿主机中的一个线程;
3.虚拟机的vCPU总数可以超过宿主机CPU数量,也就是CPU Overcommit(超配);
4.Intel的EPT技术和AMD的NPT技术在硬件层面上实现了虚拟内存地址转换,采用两级页表结构:Guest OS页表维护VM虚拟内存地址GVA到VM物理内存地址GPA的转换,EPT页表来维护VM物理内存地址GPA到宿主机物理内存地址HPA的转换;
5.网络配置模式有:NAT网络,桥接网络,内部网络(Internal Networking/Isolated Network),Host-Only网络,MACVTAP网络(Macvtap Networking),Passthrough模式(SR-IOV网络)。以及更高级的vhost-net(Virtio-net扩展),vDPA (Virtio的一种硬件加速版本),VXLAN(Virtual Extensible LAN)等等。