前置

本次实验延续延续云计算基础与VMware虚拟化实践,采用CentOS Stream 10系统。本次实验只是用主虚拟机,克隆的那两台暂时不用。

一、KVM虚拟化基础与环境部署

KVM

KVM的核心特性
特性 具体说明
高性能 性能接近原生物理机,在典型测试中CPU性能损耗仅约3.2%。
全虚拟化 支持多种操作系统无需修改即可运行,兼容性好。
开源免费 KVM是Linux内核的一部分,无需额外购买许可,能大幅降低总体拥有成本。
深度集成 与Linux生态无缝融合,可复用内核的调度器、内存管理等机制。
安全隔离 每个虚拟机都是一个Linux进程,依赖SELinux等安全模块实现隔离与保护。
功能丰富 支持实时迁移、快照、内存超分、热插拔等企业级功能。

KVM凭借其原生融入Linux的架构,直接利用硬件辅助虚拟化技术(如Intel VT-x/AMD-V),在性能、成本、灵活性上构筑了坚实基础。

KVM vs. VMware:核心区别
对比维度 KVM VMware ESXi/vSphere
核心性质 开源虚拟化技术,集成于Linux内核。 专有闭源的商业软件。
许可成本 免费。获得商业支持可能需订阅。 付费。订阅制,大规模部署成本高。
性能表现 性能极高,尤其在Linux系统上。 性能稳定,拥有丰富的性能调优选项。
管理工具 virshvirt-manager, Cockpit等基础工具,部分功能需自行扩展。 提供强大的集中管理平台(vCenter),功能全面,界面成熟。
高可用性 可整合Pacemaker等开源方案实现,配置相对复杂。 自带成熟套件(vMotion, HA, DRS),开箱即用。
安全功能 依赖内核安全机制(如SELinux),适合有安全加固能力的团队。 提供集成安全方案(如vShield),功能丰富,满足严格合规要求。
适用场景 成本敏感、技术实力强、以Linux为主的环境。 对稳定性和商业支持要求高、预算充足的大型企业。
技术趋势 主动拥抱云原生(如集成Kata Containers、Firecracker)。 随着被博通收购后策略调整,部分企业开始评估替代方案。

简而言之,KVM更适合追求高性价比和深度定制的技术驱动型团队;而VMware则以其稳定可靠、功能全面的企业级特性,更适合大型组织。

KVM核心组件与工作原理
组件 位置 核心职责
KVM内核模块 内核空间 负责CPU和内存的虚拟化。核心模块是 kvm.ko,提供通用的虚拟化功能。平台相关模块(如 kvm-intel.ko / kvm-amd.ko)则负责启用硬件虚拟化特性。
QEMU 用户空间 负责模拟各类I/O设备(如硬盘、网卡、显卡、USB等)。每个虚拟机在宿主机上都表现为一个独立的QEMU进程。
Libvirt 用户空间 提供统一的管理API和工具(如virsh命令行、virt-manager图形界面),实现对KVM虚拟机的统一管理。

核心工作原理

  1. 进程模型:KVM将每个虚拟机视为一个标准的Linux进程(QEMU进程),虚拟机的每个vCPU(虚拟CPU)则是该进程下的一个线程。这意味着Linux内核调度器可以像调度普通进程一样调度虚拟机。

  2. CPU与内存虚拟化:当虚拟机执行非I/O的CPU指令时,KVM内核模块会利用CPU的硬件虚拟化扩展(Intel VT-x/AMD-V),让这些指令直接在物理CPU上运行,无需软件模拟,从而保证了性能接近物理机。对于内存访问,KVM使用硬件辅助的EPT/NPT技术,将虚拟机的物理地址高效地映射到宿主机的物理地址上。

  3. I/O设备模拟:当虚拟机需要访问硬件(如读写网卡),请求会触发“虚拟机退出”(VM-Exit),控制权从KVM内核模块交还给用户空间的QEMU进程。QEMU完成设备模拟后,再将结果返回给虚拟机。为减少此处的性能开销,KVM支持VirtIO半虚拟化驱动,让虚拟机直接与后端交互,能大幅提升I/O性能。此外,KVM也支持VT-d等技术将物理设备直接分配给虚拟机使用,达到近乎原生的性能。

KVM支持检查

为避免多次输入密码,开始时su -  root,使用root用户进行操作。

在安装前先执行dnf update -y进行一些更新,该过程会持续比较长的时间。

然后关闭虚拟机,打开编辑界面,修改处理器,勾选虚拟化Inter VT-x。

然后输入lamod | grep kvm查看能不能使用KVM

KVM组件安装

因为我的系统是10已经不支持virt-manager,后续的图形化界面使用Cockpit图形化工具,执行sudo dnf -y install qemu-kvm libvirt virt-install virt-viewer cockpit cockpit-machines安装一些插件。

安装完成后执行以下操作看是否成功。

system enable --now libvirtd

system enable --now cockpit.socket

system status libvirtd

确认没有问题后,我们执行一些virsh命令熟悉一下。

virsh list --all

virsh net-list --all

virsh pool-list --all

这些命令能查看安装好的虚拟机,使用的网络,存储池等,目前我们还没有进行任何配置,所以显示空白。

二、KVM网络配置与虚拟机创建

KVM桥连接网络配置

我们回到windows系统,以管理员身份打开记事本,然后打开文件CC.vmx(这里是我的文件名,你用什么命名就是什么,主要是找vmx后缀,找的时候注意下方选择所有文件)

打开后我们在文件的末尾添加以下内容:

ethernet0.promiscuous = "TRUE"
vnet.promiscuous = "TRUE"
vmxnet.promiscuous = "TRUE"

然后保存退出回到虚拟机环境。

继续执行以下命令进行桥连接网络的设置:

创建桥接接口 br0 (此时不配置IP)

nmcli connection add type bridge ifname br0 con-name br0

添加物理网卡 ens33 作为从设备

nmcli connection add type bridge-slave ifname ens33 master br0 con-name bridge-slave-ens33

为 br0 配置静态IP信息 (请根据你的网络环境修改,网关根据VMnet8修改)

nmcli connection modify br0 ipv4.addresses 192.168.11.104/24
nmcli connection modify br0 ipv4.gateway 192.168.11.2
nmcli connection modify br0 ipv4.dns "8.8.8.8"
nmcli connection modify br0 ipv4.method manual

激活 bridge-slave,再激活 br0

nmcli connection up bridge-slave-ens33

nmcli connection down br0
nmcli connection up br0

ip link set ens33 master br0
ip link set ens33 up
ip link set br0 up

然后创建一个文件br0.xml

cat > /tmp/br0.xml << 'EOF'
<network>
  <name>br0</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>
EOF

都完成之后,reboot重启虚拟机。

virsh net-define /tmp/br0.xml

virsh net-start br0

virsh net-autostart br0

virsh net-list --all

virsh net-dumpxml br0

能ping通网络后,进入firefox输入https://192.168.11.104:9090(这是我的地址,根据自己真实情况来),输入用户名和密码,登录进去

然后点击右上角的感叹号,输入密码接可以使用root用户了。

在左边就可以查看各种操作了,然后我们点到网络,可以看到我们配置的br0在成功运行。

KVM创建虚拟机

因为磁盘大小原因,这里我们安装轻量级的系统。点击虚拟机,进行创建,采用url进行安https://mirrors.aliyun.com/debian/dists/stable/main/installer-amd64/

随便输入一个名称

下面这个直接回车

下面这个也是直接回车

设置root密码123,还要再确认一次密码,这里没截图,到时候看提示再输一次密码就行。

随机输入一个名称创建用户hhh

设置密码123,一样的要再输入确认一次。

直接回车

下面这个执行了后会等待一会才能进行下一步。

直接回车

安装成功。

整个过程会持续很久的时间,耐心。

命令行创建KVM-Test2

在终端执行wget https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.21/releases/x86_64/alpine-virt-3.21.3-x86_64.iso下载镜像iso。

输入root回车

接着setup-alpine进行一些设置

rrr为机名,接下来几个和图中一样的话就直接回车,这样就是NAT连接。

然后输入密码123(自己设置就好),时区输入Asia/Shanghai

接下来回车后输入f继续回车,会自动去给你找合适的镜像。

照着图中的输入和回车就行,然后sda那个是错的,应该是下面的vda,做的时候就不要输sda了,然后我这台KVM-Test2只设置了root用户没有创建新用户,所以直接就是root。

最终可以在界面看到这两台机器。

然后我们互相ping查看是否连通

都执行ping -c 3 8.8.8.8发现都通,证明可以访问外网。

然后ip a show查看地址,我这里分别是192.168.11.145和192.168.122.146,根据截图我们可以看到,NAT可以ping通桥连接,但是反过来却不行,这是对的,不要觉得错了。这正好体现了 NAT 模式的隔离性:内部的虚拟机可以访问外部,但外部无法直接访问内部。

更多推荐