部署:KVM虚拟化平台

目录

KVM虚拟化

核心特性

技术架构

优势与应用场景

与其他虚拟化技术的对比

安装与使用示例

KVM运行时的三种模式

LVM工作原理

核心组件与分工

工作流程

硬件虚拟化支持

案例


KVM虚拟化

KVM(Kernel-based Virtual Machine)是一种基于Linux内核的全虚拟化解决方案,允许用户在Linux系统上运行多个隔离的虚拟机(VM),每个虚拟机拥有独立的操作系统和硬件资源。

核心特性

  1. 内核级虚拟化
    • KVM作为Linux内核模块(kvm.ko)直接集成到操作系统中,通过硬件虚拟化扩展(如Intel VT-x或AMD-V)实现高效的CPU和内存虚拟化。
    • 与传统模拟器(如QEMU)不同,KVM无需软件模拟CPU指令,性能接近物理机。
  2. 全虚拟化支持
    • 无需修改客户机操作系统(Guest OS),即可运行Windows、Linux等主流系统。
    • 通过硬件辅助虚拟化(如EPT/NPT)实现内存虚拟化,降低性能开销。
  3. 与QEMU的集成
    • KVM仅处理CPU和内存虚拟化,而QEMU负责模拟I/O设备(如磁盘、网卡)。
    • 组合后的qemu-kvm工具提供完整的虚拟化解决方案,支持图形化管理和命令行操作。

技术架构

  1. 组件组成
    • KVM内核模块:提供虚拟化基础能力。
    • QEMU:模拟硬件设备并处理I/O操作。
    • Libvirt:标准化管理接口(如virsh命令行工具),支持跨平台管理。
    • 虚拟化工具链:如virt-manager(图形化管理)、virt-install(自动化部署)。
  2. 工作流程
    • 用户通过管理工具(如virt-manager)创建虚拟机。
    • KVM加载客户机操作系统到内存,并利用硬件虚拟化扩展执行指令。
    • I/O请求由QEMU拦截并模拟,确保隔离性。

优势与应用场景

  1. 优势
    • 高性能:接近物理机的运行效率,适合生产环境。
    • 低成本:开源免费,无需额外授权费用。
    • 灵活性:支持动态资源调整(如CPU热插拔、内存热添加)。
    • 安全性:通过硬件隔离和SELinux增强安全性。
  2. 典型应用场景
    • 云计算:OpenStack、oVirt等平台依赖KVM提供基础设施。
    • 开发与测试:快速创建隔离环境,降低硬件成本。
    • 服务器整合:将多台物理机迁移到虚拟机,提高资源利用率。

与其他虚拟化技术的对比

技术 类型 性能 成本 适用场景
KVM 全虚拟化 免费 云计算、生产环境
VMware ESXi 裸金属虚拟化 极高 收费 企业级关键业务
Xen 半虚拟化/全虚拟化 中高 免费 高性能计算、安全敏感场景
VirtualBox 桌面虚拟化 免费 个人开发、测试
  • KVM vs VMware:KVM在开源生态和成本上占优,但VMware提供更丰富的企业级功能(如vMotion)。
  • KVM vs Xen:KVM更易集成到Linux发行版,而Xen在半虚拟化场景下性能更优。

安装与使用示例

  1. 安装KVM(Ubuntu/Debian)

    sudo apt update
    sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
    sudo usermod -aG kvm,libvirt $(whoami) # 添加当前用户到相关组
    sudo systemctl enable --now libvirtd
  2. 创建虚拟机

    virt-install \
    --name=my-vm \
    --memory=2048 \
    --vcpus=2 \
    --disk path=/var/lib/libvirt/images/my-vm.qcow2,size=20 \
    --cdrom /path/to/iso/ubuntu-22.04.iso \
    --os-variant ubuntu22.04 \
    --graphics spice
  3. 图形化管理
    使用virt-manager工具,通过直观界面管理虚拟机生命周期。 


KVM运行时的三种模式

  1. 客户模式(Guest Mode)
    • 客户模式是指在虚拟机中运行的操作系统,被称为Guest OS。虚拟机运行在Guest OS上,执行非I/O的客户代码。
    • 客户模式本身又分为内核模式和用户模式,但通常在讨论KVM架构时,将虚拟机在操作系统中运行的整体状态统称为客户模式。
  2. 用户模式(User Mode)
    • 用户模式提供虚拟机管理的用户空间工具,以及代表用户执行I/O操作的功能。
    • QEMU(Quick Emulator)作为KVM的用户模式组件,运行在这个模式下,负责模拟CPU、内存和I/O设备,并提供对虚拟机的控制和管理。
  3. 内核模式(Kernel Mode)
    • 内核模式是KVM虚拟化的核心模式,运行KVM内核模块。
    • 在这个模式下,KVM为虚拟机创建虚拟CPU和虚拟内存,然后执行VMLAUNCH指令进入客户模式,装载Guest OS并运行。
    • 如果Guest OS运行过程中发生异常(如非法指令、外部中断等),KVM会暂停Guest OS的运行,保存当前状态,并退出到内核模式来处理这些异常。
    • 内核模式还负责处理需要I/O的情况,如果处理过程中需要I/O操作,则会进入到用户模式,由QEMU来处理I/O,处理完成后重新进入内核模式,再进入客户模式。

LVM工作原理

 KVM(Kernel-based Virtual Machine)的工作原理主要基于硬件虚拟化技术和Linux内核的深度融合,通过内核模块、用户空间工具和硬件虚拟化扩展的协同工作,实现高效的虚拟机管理


核心组件与分工

  1. 内核模块(KVM Driver)
    • 作为Linux内核的一部分,负责虚拟机的CPU虚拟化、内存管理和设备管理。
    • 通过/dev/kvm设备接口与用户空间程序通信,处理虚拟机的创建、运行和销毁等关键操作。
    • 利用硬件虚拟化扩展(如Intel VT-x和AMD-V)实现高效的CPU虚拟化,减少性能开销。
  2. 用户空间工具(QEMU)
    • 负责模拟虚拟机的I/O设备,如硬盘、网卡等。
    • 通过IOCTL系统调用与KVM内核模块交互,为虚拟机提供完整的硬件环境。
    • 处理虚拟机的启动、停止、配置等管理任务,以及提供用户控制接口。

工作流程

  1. 虚拟机创建
    • 用户通过管理工具(如virt-managervirsh)发起虚拟机创建请求。
    • QEMU通过IOCTL系统调用向KVM内核模块申请资源,为虚拟机搭建虚拟化环境。
    • KVM内核模块分配虚拟CPU(vCPU)和内存,并初始化虚拟机的状态。
  2. 虚拟机运行
    • QEMU启动虚拟机内的操作系统,并执行VMLAUNCH指令,使CPU进入Guest模式。
    • 在Guest模式下,虚拟机操作系统直接访问虚拟硬件资源,执行应用程序代码。
    • KVM内核模块负责调度vCPU的运行,确保每个虚拟机都能获得合理的计算资源。
  3. I/O请求处理
    • 当虚拟机操作系统发起I/O请求时,KVM内核模块拦截该请求,并将其提交给用户空间的QEMU处理。
    • QEMU模拟I/O设备的操作,完成处理后通过IOCTL系统调用将结果反馈给KVM内核模块。
    • KVM内核模块将结果返回给虚拟机操作系统,恢复其执行。
  4. 异常处理与VM-Exit
    • 如果虚拟机操作系统运行过程中发生外部中断、影子页表缺页等事件,CPU会暂停Guest模式的执行,触发VM-Exit。
    • KVM内核模块进行必要的处理,如更新虚拟机的状态或修复缺页异常,然后通过VM-Entry重新进入Guest模式,恢复虚拟机操作系统的执行。

硬件虚拟化支持

  • KVM充分利用现代处理器提供的硬件虚拟化扩展(如Intel VT-x和AMD-V),引入根模式(Root Mode)和非根模式(Non-Root Mode)。
  • 在根模式下,KVM虚拟机监控程序运行,拥有完整的硬件控制权。
  • 在非根模式下,虚拟机操作系统运行,其特权指令和敏感操作会被捕获并触发VM-Exit,将控制权交还给KVM虚拟机监控程序。

案例

基础环境:两台虚拟机,修改hosts主机名称,101:kvm01 102:kvm02 关闭防火墙及系统内核

安装 KVM所需要的依赖包

[root@kvm01 ~]# dnf -y install gnome-shell gdm gnome-session gnome-terminal
  • gnome-shell:GNOME Shell是GNOME桌面环境的用户界面组件,负责提供窗口管理、任务栏、通知区域等功能。它是用户与GNOME桌面环境交互的主要界面。
  • gdm:GDM(GNOME Display Manager)是GNOME桌面环境的显示管理器,负责用户登录管理。它提供了一个图形化的登录界面,并处理用户的认证过程。在KVM环境中安装GDM,可以方便地通过图形界面登录到虚拟机。
  • gnome-session:GNOME Session是GNOME桌面环境的会话管理器,负责启动和管理用户会话中的各种进程和服务。它确保在用户登录时,所有必要的桌面组件和服务都能正确启动。
  • gnome-terminal:GNOME Terminal是GNOME桌面环境下的终端模拟器程序,允许用户在图形界面中访问命令行。在KVM环境中安装GNOME Terminal,可以方便地在虚拟机中执行命令行操作。

让系统开机自动进入图形化页面

[root@kvm01 ~]# systemctl set-default graphical.target    设置开机启动自动进入图形化
[root@kvm01 ~]# poweroff

虚拟机配置勾选CPU虚拟化(先给虚拟机关机后在操作)

                开机——进入系统——活动——下面九宫格——终端

 下载虚拟化依赖工具

[root@kvm01 ~]# dnf -y install qemu-kvm qemu-img bridge-utils virt-manager libguestfs-tools virt-install libvirt
  • qemu-kvm:QEMU 的 KVM 加速模块,提供硬件虚拟化支持(基于 KVM 内核模块)
  • qemu-img:QEMU 的磁盘镜像管理工具。
  • bridge-utils:网络桥接工具(用于配置 Linux 网桥)。
  • virt-manager:图形化虚拟机管理工具。
  • libguestfs-tools:虚拟机磁盘镜像操作工具集。
  • virt-install:命令行工具,用于创建和安装虚拟机。
  • libvirt:虚拟化平台的标准化管理库和守护进程。

验证:

[root@kvm01 ~]# cat /proc/cpuinfo	#查看有没有vmx的样式
[root@kvm01 ~]# lsmod | grep kvm	#查看系统支不支持虚拟化
[root@kvm01 ~]# systemctl start libvirtd	#启动
[root@kvm01 ~]# systemctl enable libvirtd     #设置开机自启动

 基于NetworkManager的网络环境中创建一个新的网络桥接连接

[root@kvm01 ~]# nmcli connection add type bridge con-name br0 ifname br0 

 可以通过查看配置文件来确认是否成功

[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm01 network-scripts]# ls
ifcfg-br0  ifcfg-ens160
[root@kvm01 network-scripts]# cat ifcfg-br0
STP=yes
BRIDGING_OPTS=priority=32768
TYPE=Bridge
HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=default
NAME=br0
UUID=c90e9bee-d9c0-4b4e-8ef9-bf0b0a990496
DEVICE=br0
ONBOOT=yes

 基于NetworkManager的网络环境中配置一个以太网接口,将其连接到之前创建的桥接接口

[root@kvm01 network-scripts]# nmcli connection add type ethernet con-name br0-slave-ens33 ifname ens33 master br0 

 验证效果并查看

[root@kvm01 network-scripts]# ls
ifcfg-br0  ifcfg-br0-slave-ens33  ifcfg-ens33

IP迁移 01

nmcli connection modify br0 ipv4.method manual ipv4.address 192.168.10.101/24 ipv4.gateway 192.168.10.254 ipv4.dns 8.8.8.8 

 02

nmcli connection modify br0 ipv4.method manual ipv4.address 192.168.10.102/24 ipv4.gateway 192.168.10.254 ipv4.dns 8.8.8.8

 01/02查看ip并关闭ens33,远程会断,需要去虚拟机上操作

ifconfig
nmcli con down "ens33"

虚拟机操作:

nmcli con up br0
nmcli con up br0-slave-ens33

 ——这个地方可以做快照,方便后续操作

在桌面环境操作:

双击QEMU/KVM,点存储,左下角加号(+)
起名kgc,/data_kvm/store
点击kgc,添加卷(+),名称:test01,存储卷配额:10G
拉取镜像到/opt下,谁都能用

创建新虚拟机系统,选择本地iso或者本地目录,创建虚拟机

查看

virsh list --all

关闭

virsh shutdown centos7.0

运行,对系统来说通电皆是运行

virsh start centos7.0

强制关机,不建议

virsh destroy centos7.0

启动虚拟机

virsh create /etc/libvirt/qemu/centos7.0.xml

挂起

virsh suspend centos7.0

恢复

virsh resume centos7.0

开机自启动

virsh autostart centos7.0

 备份虚拟机

/data_kvm/store/test01.qcow2
/etc/libvirt/qemu
cd /etc/libvirt/qemu
virsh dumpxml centos7.0>test01.xml
ls
virsh define test01.xml

删除掉然后关机,注册,在删除文件会更彻底一些

virsh shutdown centos7.0
virsh undefine centos7.0

重新注册(重新定义)

virsh define test01.xml

启动

virsh start centos7.0
virsh list --all	#查看

 关闭虚拟机

virsh shutdown centos7.0

 查看虚拟机内部hosts文件,需要下载工具

使用这个命令需要安装 libguestfs-tools-c和guestfs-tools-c 工具包。 

virt-cat -a /data_kvm/store/test01.qcow2 /etc/hosts

修改hosts文件

virt-edit -a /data_kvm/store/test01.qcow2 /etc/hosts

 查看指定虚拟机

virt-df centos7.0

克隆

virt-clone -o centos7.0 -n test02 -f /data_kvm/stort/test02.qcow2
virsh list --all        #查看所有虚拟机

 快照,快照时间相隔越久,id越大

virsh snapshot-create test02
virsh snapshot-create test02
virsh snapshot-create test02

恢复快照

virsh snapshot-revert test02 快照id

查看快照

virsh snapshot-list test02

删除快照

virsh snapshot-delete test02 快照id

virsh snapshot-list test02


 

你可能感兴趣的:(linux,运维,服务器)