KVM 虚拟化平台

目录

一、KVM 虚拟化

1. KVM 概述

2. KVM 原理简介

3. KVM 运行时的三种模式

4. KVM工作流程

5. 组件构成

 二、部署KVM


一、KVM 虚拟化

1. KVM 概述

KVM(Kernel-based Virtual Machine) 是基于 Linux 内核的开源虚拟化技术,通过将 Linux 内核转变为虚拟机监控器(Hypervisor),允许多个隔离的虚拟机(VM)直接访问物理硬件资源。

核心特点

  1. 集成于内核:作为内核模块(kvm.ko)实现,无需额外安装 Hypervisor。

  2. 硬件辅助虚拟化:依赖 CPU 的虚拟化扩展(Intel VT-x / AMD-V)。

  3. 开源生态:与 QEMU 结合提供完整的虚拟化解决方案(设备模拟、I/O 处理等)。

  4. 高性能:接近原生性能,适用于生产环境(如云计算平台 OpenStack)。

2. KVM 原理简介

KVM 的本质是 Linux 内核的一个模块

核心原理如下:

  1. 内核角色转换

    • 加载 KVM 模块后,Linux 内核直接作为 Hypervisor 运行。

  2. 硬件虚拟化支持

    • 通过 CPU 的 VT-x/AMD-V 技术,在硬件层面创建 VMX 模式(虚拟机扩展模式),实现指令截获和特权级隔离。

  3. 用户空间组件

    • QEMU 负责模拟虚拟设备(网卡、磁盘等),并管理虚拟机的生命周期(启动、暂停等)。

  4. 工作流程

    • 用户通过工具(如 libvirt)创建虚拟机 → QEMU 调用 KVM 内核模块 → KVM 利用 CPU 虚拟化扩展创建 vCPU,并调度物理 CPU 资源。

3. KVM 运行时的三种模式

  • 客户模式:是虚拟机在操作系统中的运行模式,分为内核模式和用户模式,主要由 KVM 内核模块模拟 CPU 和内存,实现模式切换及退出处理。
  • 用户模式:运行 QEMU,用于 IO 模拟与虚拟机管理,为用户提供管理工具并执行 I/O 操作。
  • 内核模式:是 KVM 虚拟化核心,运行 KVM 内核模块,负责创建虚拟 CPU 和内存,通过 VMLAUNCH 指令进入客户模式运行 Guest OS,还会处理 Guest OS 运行中的异常及 I/O 需求。
模式执行者权限与职责
内核模式KVM 内核模块处理 vCPU 的敏感指令(如 I/O 操作),通过硬件虚拟化截获并交由 Hypervisor 处理。
用户模式QEMU 进程模拟虚拟硬件设备(磁盘、网卡),处理非特权操作(如虚拟机启动/配置)。
客户模式虚拟机操作系统运行未经修改的 Guest OS,执行普通指令;敏感指令被硬件截获并陷入内核模式。

4. KVM工作流程

  1. 启动虚拟机

    • 用户通过 virt-manager 或 virsh 启动虚拟机 → libvirt 调用 QEMU 进程。

  2. 创建虚拟化环境

    • QEMU 调用 KVM 内核模块,创建虚拟的 CPU(vCPU)、内存等资源。

  3. vCPU 调度

    • 每个 vCPU 对应一个 Linux 线程,由宿主机的调度器(如 CFS)管理。

    • KVM 通过 ioctl(KVM_RUN) 启动 vCPU 运行。

  4. 内存虚拟化

    • 影子页表 或 EPT/NPT(Intel/AMD 硬件辅助)映射 Guest 物理地址到宿主机物理地址。

  5. I/O 虚拟化

    • 模拟模式:QEMU 完全模拟设备(如 IDE 磁盘),性能较低。

    • 半虚拟化(virtio):Guest 安装 virtio 驱动,直接与宿主机通信,减少模拟开销。

    • 设备直通(VFIO):将物理设备(如 GPU)直接分配给虚拟机,近乎原生性能。

  6. 中断处理

    • 物理中断由宿主机处理 → KVM 注入虚拟中断到目标虚拟机。

5. 组件构成

组件层级核心组件关键作用通俗理解
内核层kvm.ko直接管理 CPU 和内存虚拟化虚拟化引擎(指挥硬件资源)
kvm-intel.ko
kvm-amd.ko
调用 Intel/AMD 的 CPU 虚拟化指令硬件翻译官
用户层QEMU模拟磁盘、网卡等虚拟设备设备模拟器(造虚拟硬件)
virtio驱动高性能半虚拟化设备(磁盘/网卡/内存管理)加速芯片(提升 I/O 性能)
管理层libvirt统一管理虚拟机(创建/启动/迁移)管理员控制台
virsh命令行操作虚拟机终端遥控器
virt-manager图形化界面管理虚拟机可视化操作面板

核心组件详解: 

  1. QEMU(硬件模拟器)

    • 干什么:造出虚拟CPU、磁盘、网卡等硬件

    • 关键能力

      • 跨平台运行不同架构系统(如x86主机跑ARM虚拟机)

      • 与KVM协同实现高速虚拟化(不用KVM时性能差10倍+)

  2. /dev/kvm(内核接口)

    • 是什么:Linux内核暴露的字符设备文件

    • 核心作用:用户空间(QEMU)操作KVM内核模块的唯一入口

  3. ioctl(控制命令)

    • 干什么:通过文件描述符(fd)向设备发送指令

    • 关键操作

      • KVM_CREATE_VM(创建虚拟机)

      • KVM_RUN(启动vCPU执行)

  4. fd(操作手柄)

    • 本质:QEMU打开/dev/kvm后获得的文件描述符

    • 作用:所有ioctl命令必须通过fd操作

  5. KVM内核模块(虚拟化引擎)

    • 核心任务

      • 接管CPU的虚拟化功能(Intel VT-x/AMD-V)

      • 直接管理物理内存映射(硬件加速EPT/NPT)

      • 截获虚拟机敏感指令

 二、部署KVM

案例实验环境

主机

.  操作系统

IP地址

主要软件

kvm01

CentOS 7.9 x86_64

192.168.10.101

KVM 虚拟机

kvm02

CentOS 7.9 x86_64

192.168.10.102

搭建 KVM 虚拟化平台

101、102(配置一样)
#基础环境
--改主机名
101:
hostnamectl set-hostname kvm01
102:
hostnamectl set-hostname kvm02 

--生效
bash
--主机映射
 vim /etc/hosts
192.168.10.101 kvm01
192.168.10.102 kvm02
--关闭防火墙和setenforce
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config

--安装
dnf -y install gnome-shell gnome-session gdm gnome-terminal

#设置默认的登录环境
systemctl set-default graphical.target
poweroff(关机配置虚拟机)

#虚拟机配置
处理器——》虚拟化引擎——》虚拟化Inter
(开机后就可以看到界面,可以使用伪终端,若要使用更多功能,可以再安装)

#安装KVM模块的一组包
dnf -y install qemu-kvm qemu-img bridge-utils virt-manager libguestfs-tools virt-install libvirt 

#查看硬件和系统支不支持虚拟化
cat /proc/cpuinfo
lsmod | grep kvm

#启动
systemctl start libvirtd
systemctl enable libvirtd

#添加网络接口(自己设置虚拟网卡,为桥接网卡)
nmcli connection add type bridge con-name br0 ifname br0
语法格式:nmcli connection add type 网卡类型  网卡名字 ifname 网卡
#查看一下
cat /etc/sysconfig/network-scripts/ifcfg-br0

#虚拟与物理网卡绑定生成第三个网卡(为以太网网卡)
nmcli connection add type ethernet con-name br0-slave-ens33 ifname ens33 master br0

(实际网卡是来桥接虚拟与外部的网卡,类似交换机因此不需要地址)

#IP地址迁移到其他(br0)网卡
101:
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

102:
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

#查看(未转移到br0)
ifconfig

#关闭ens33网卡(让IP迁移生效)
nmcli con down ens33

#开启br0和br0-slave-ens33 
nmcli con up br0
nmcli con up br0-slave-ens33

#查看验证(成功转移)
ifconfig

桌面环境管理

活动——》点虚拟系统管理器
(可以直接创建虚拟机)
存储池:放在哪个目录下这个目录就是存储池。创建的是目录
镜像存储池:
存储卷:


新建虚拟机
拉取iso镜像,放在/opt 下(用xhell)
步骤:
1.点添加
2.本地安装
3.选择iso镜像文件(opt下的)
4.设置内存和CPU
5.选择硬盘(选择下面的自定义,使用自定义的卷)
6.保持默认,桥接模式
7.安装
8.IP设置要与KVM主机保持在一个子网里(因为是桥接模式。NAT则不用)

管理KVM

#查看所有虚拟机和运行状态
virsh list --all

#关闭虚拟机
virsh shutdown 虚拟机名

#开启虚拟机
virsh start 虚拟机名

#强制关机
virsh destroy 虚拟机名

#利用运行配置文件去加载,开启虚拟机
virsh create /etc/libvirt/qemu/虚拟机名

#挂起虚拟机
virsh suspend 虚拟机名

#恢复虚拟机
virsh resume 虚拟机名

#配置虚拟机实例伴随宿主机自动启动 
virsh autostart 虚拟机

#导出虚拟机配置文件(备份)
virsh dumpxml 虚拟机名 > /etc/libvirt/qemu/虚拟机m.xml

#虚拟机的删除与添加 
virsh shutdown 虚拟机名   //先关闭
virsh undefine 虚拟机名   //再删除

#重定义(恢复)
virsh define 备份名

#通过备份的配置文件重新定义虚拟机
cd /etc/libvirt/qemu 
mv 备份文件.xml 原名.xml

virsh list --all  #查看虚拟机信息
virsh start 虚拟机名  #启动

#修改虚拟机配置信息
(用来修改系统内存大小、磁盘文件等信息) 

直接通过 vim 命令修改。 
[root@kvm01 ~]# vim /etc/libvirt/qemu/test01.xml 

通过 virsh 命令修改。 
[root@kvm01 ~]# virsh edit test01

文件管理

文件管理,通过磁盘文件查看信息
关闭虚拟机
1.virt-cat 命令,类似cat
格式要求是qcow2
(需要安装 libguestfs-tools-c、 guestfs-tools工具包)
virt-cat -a /data_kvm/store/test01.qcow2 /etc/hosts

2.virt-edit 命令 
用于编辑文件,用法与 vim 基本一致。 
virt-edit -a /data_kvm/store/test01.qcow2 /etc/resolv.conf
3.virt-df 命令 
用于查看虚拟机磁盘信息。 
virt-df -h test01


#虚拟机克隆(记得关闭虚拟机)

(1)查看虚拟机状态 
[root@kvm01 ~]# virsh list --all

(2)从 test01 克隆 test02 
[root@kvm01 ~]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2 

(3)查看虚拟机状态 
[root@kvm01 ~]# virsh list --all 

(4)启动虚拟机 
[root@kvm01 ~]# virsh start test02

#虚拟机快照(磁盘格式必须为 qcow2)
如:
(1)对 test01 创建快照 
[root@kvm01 ~]# virsh snapshot-create test01 
已生成域快照 1503494464 
(2)查看虚拟机快照版本信息 
[root@kvm01 ~]# virsh snapshot-current test01

(3)查看快照信息 
[root@kvm01 ~]# virsh snapshot-list test01

(4)创建新快照 
[root@kvm01 ~]# virsh snapshot-create test01 

(5)查看快照信息 
[root@kvm01 ~]# virsh snapshot-list test01

(6)恢复虚拟机状态
[root@kvm01 ~]# virsh snapshot-revert test01 1503494464

(7)查看虚拟机快照版本信息 
[root@kvm01 ~]# virsh snapshot-current test01

(8)删除快照 
[root@kvm01 ~]# virsh snapshot-delete test01 1503494464

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值