1.部署KVM虚拟化平台

一.KVM原理简介

广义的KVM实际上包含两部分,一部分是基于Linux内核支持的KVM内核模块,另一部分就是经过简化和修改的Qemuo

KVM内核模块是模拟处理器和内存以支持虚拟机的运行,Qemu主要处理丨℃以及为用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合、相辅相成,构成了一个完整的虚拟化平台。

需要注意的是,Qemu本身并不是KVM的一部分,Qemu是一套完整的虚拟化解决方案,是纯软件实现虚拟化,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟出来的,所以Qemu的性能比较低。

二.KVM运行时的三种模式

客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下

用户模式:用户执行I/O代码,QEMU运行在这个模式下 

内核模式:CPU调度和内存管理相关

客户模式(‌Guest Mode)‌:‌可以理解为虚拟机在操作系统中运行的模式。客户模式又分为内核模式和用户模式。‌内核模式模拟CPU以及内存,‌实现客户模式的切换,‌处理从客户模式的退出。‌KVM内核模块运行在这个模式下,‌模拟CPU以及内存,‌实现客户模式的切换,‌处理从客户模式的退出。

用户模式(‌User Mode)‌在这种模式下,‌运行QEMU,‌实现IO模拟与虚拟机管理。‌QEMU运行在这个模式下,‌为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O操作。‌

内核模式(‌Kernel Mode)‌这是KVM虚拟化的核心模式,‌运行KVM内核模块。‌在这个模式下,‌KVM为虚拟机创建虚拟CPU和虚拟内存,‌然后执行VMLAUNCH指令进入客户模式,‌装载Guest OS并运行。‌如果Guest OS运行过程中发生异常,‌KVM会暂停Guest OS的运行,‌保存当前状态,‌并退出到内核模式来处理这些异常。‌内核模式还负责处理需要I/O的情况,‌处理完成后重新进入客户模式。

三.KVM工作原理

KVM(Kernel-based Virtual Machine)是基于Linux内核的虚拟机技术,其工作原理核心是利用硬件虚拟化扩展(如Intel VT-x/AMD-V)将物理CPU、内存和I/O设备虚拟化为多个虚拟机资源,具体如下:

核心组件

• KVM模块:作为Linux内核模块,负责创建和管理虚拟机(VM),并通过硬件虚拟化功能实现CPU和内存的虚拟化。

• QEMU:模拟I/O设备(如网卡、硬盘),与KVM结合后,通过KVM模块接管CPU和内存,自身专注于I/O模拟,提升性能。

工作流程

1. 初始化:KVM模块加载后,通过/dev/kvm接口为每个虚拟机创建虚拟CPU(vCPU),每个vCPU对应一个Linux进程。

2. CPU虚拟化:利用硬件虚拟化技术(如Intel VT-x的VMX模式),将vCPU调度到物理CPU上运行,实现指令集的隔离和特权级转换。

3. 内存虚拟化:通过KVM的内存管理组件(如影子页表或EPT/NPT技术),将虚拟机的虚拟地址映射到物理地址,确保各VM内存独立。

4. I/O虚拟化:QEMU通过软件模拟或硬件直通(如PCIe设备直通),让VM访问外设,硬件直通可提升I/O性能。

5. 资源调度:Linux内核的调度器负责分配物理CPU时间片给各个vCPU,内存和I/O资源也由KVM和QEMU协同管理。

关键技术

• 硬件辅助虚拟化:依赖CPU提供的虚拟化指令,避免纯软件模拟的性能损耗。

• 半虚拟化驱动(virtio):VM通过virtio接口与宿主机通信,优化网络、磁盘等I/O性能。

• 实时迁移:利用KVM的状态保存和恢复机制,可在物理主机间迁移运行中的VM,不中断服务。

KVM通过与Linux内核深度整合,实现了高效的服务器虚拟化,广泛应用于云计算和企业服务器集群。

  • Qemu:快速仿真器
  • Libkvm: libkvm 通过 ioctl 系统调用进入内核模式
  • Ioctl:ioctl是设备驱动程序中对设备的I/O通道进行管理的函数
  • fd:用fd 通过ioctl 向设备驱动来发送创建,运行虚拟机命令,设备驱动/dev/kvm 就会来解析命令
  • /dev/kvm:Linux字符集设备 /dev/kvm,是kvm的内核模块

QEMU(Quick EMUlator)是一个开源的通用模拟器和虚拟化软件,由‌Fabrice Bellard创建。 它允许在一个平台上运行一个或多个操作系统,这些操作系统与宿主机(运行QEMU的机器)的原生操作系统完全隔离。QEMU具有以下主要功能:

  • 系统模拟:可以模拟多种不同的计算机类型和架构,如x86, x86-64 (AMD64/Intel 64), ‌ARM, ‌PowerPC, ‌SPARC等。这意味着可以在一个架构上运行为另一架构编译的操作系统和程序。
  • 用户模式模拟:支持用户模式模拟,允许单个程序以不同的操作系统用户空间在主机上运行,这对于开发和测试跨平台应用程序非常有用。
  • 虚拟化:当在支持硬件虚拟化的处理器上运行时,QEMU可以利用‌KVM(Kernel-based Virtual Machine)模块提供快速虚拟化,使虚拟机以接近物理硬件的速度运行,同时提供隔离和资源控制的优点。
  • 网络和设备模拟:支持复杂的网络模拟功能,允许虚拟机通过不同的网络拓扑配置相互通信或访问互联网。同时能够模拟各种硬件设备,如硬盘、网络接口卡、图形适配器、USB设备等。

QEMU可以独立使用,也经常与其他虚拟化和模拟工具一起使用,如‌VirtualBox或‌VMware的用户界面,或者与‌libvirt这样的虚拟化管理库配合使用,以简化虚拟机的管理和操作。这使得QEMU在软件开发、测试、系统管理、教育和研究等领域有广泛应用

四.实验步骤

实验环境

主机

操作系统

IP地址

主要软件

kvm01

CentOS 7.9 x86_64

192.168.10.108

KVM 虚拟机

kvm02

CentOS 7.9 x86_64

192.168.10.109

1.搭建KVM虚拟化平台

1.2准备KVM虚拟化环境

1YUM 安装 KVM

yum -y install qemu-kvm

yum -y install qemu-img

yum -y install bridge-utils

yum -y install qemu-kvm-tools

yum -y install virt-install

yum -y install libvirt

yum -y install virt-manager

yum -y install libguestfs-tools

备注:

qemu-kvm : kvm核心包–虚拟操作系统模拟器加速模块

qemu-img :是QEMU的磁盘管理工具

bridge-utils:虚拟机与外界通信的命令管理工具

qemu-kvm-tools :qemu-kvm的工具包

virt-install:虚拟机安装工具

libvirt:必须要装的核心工具

virt-manager:虚拟机图形管理工具(宿主机有桌面环境时可以考虑安装,命令操作或者远程控制则不需要)

libguestfs-tools:用于访问虚拟机的磁盘映像文件提供的一组命令

QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。

QEMU(Quick Emulator)快速仿真器

(2)关机,设置CPU支持虚拟化,然后开机

(3)开机后验证

hostnamectl set-hostname kvm01

 bash

vim /etc/hosts

192.168.10.201 kvm01

192.168.10.202 kvm02

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

cat /proc/cpuinfo | grep vmx

lsmod | grep kvm

(4)开启libvirtd服务

安装完成后还需要开启 libvirtd 服务,以开启相关支持。

systemctl start libvirtd

systemctl enable libvirtd

2.设置KVM网络

这里以 Bridge(桥接)为例进行操作演示

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-br0

vi ifcfg-ens160

BRIDGE=br0

vi ifcfg-br0

TYPE=bridge

NAME=br0

DEVICE=br0

systemctl restart network

ifconfig

3.KVM管理

virt-manager

1)创建存储池

存储池的名称为:kgc

存储池的目录为:/data_kvm/store

(2)创建存储卷

kgc的存储池中添加存储卷

存储卷名称为:test01

卷最大容量10G

(3)将Linux系统的ISO文件拷贝到/opt目录下,并关闭存储设置

(4)在kvm01的主机上新建虚拟机,名称为test01

5.使用KVM命令集管理虚拟机

virsh -h                              //查看命令帮助

ls /etc/libvirt/qemu/            //查看KVM的配置文件存放目录

virsh list --all                      //查看虚拟机状态

virsh shutdown test01       //虚拟机关机

virsh start test01                //虚拟机开机

virsh destroy test01           //强制实例系统关闭电源

 virsh create /etc/libvirt/qemu/test01.xml   //通过配置文件启动虚拟机系统实例

virsh suspend test01             //挂起虚拟机

 virsh resume test01              //恢复虚拟机

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

virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml         //导出虚拟机配置

virsh shutdown test01

virsh undefine test01                 //虚拟机的删除与添加

查看删除结果,test01 的配置文件被删除,但是磁盘文件不会被删除。

ls /etc/libvirt/qemu/

通过 virsh list --all 查看不到 test01 的信息,说明此虚拟机被删除

通过备份的配置文件重新定义虚拟机:

cd /etc/libvirt/qemu

 mv test02.xml test01.xml

重新定义虚拟机:

virsh define test01.xml

修改虚拟机配置信息

vim命令:vim /etc/libvirt/qemu/test01.xml

virsh命令: virsh edit test01

6.KVM文件管理

(1)查看当前磁盘格式

qemu-img info /data_kvm/store/test01.qcow2

备注:

如果虚拟机磁盘文件不是 qcow2 格式,可以通过 qemu-img 命令转换磁盘文件格式,

如执行以下操作可以将 test01 虚拟机 raw 格式磁盘转换至 qcow2 格式。

[root@kvm01 ~]# virsh shutdown test01

[root@kvm01 ~]# qemu-img convert -f raw -O qcow2 /data_kvm/store/test01.img /data_kvm/store/test01.qcow2

执行转换磁盘格式的命令后还需要修改 test01 的 xml 配置文件中磁盘的类型与磁盘文件名。

[root@kvm01 ~]# virsh edit test01

…… //省略部分内容

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2' cache='none'/>

<source file='/data_KVM/store/test01.qcow2'/>

<target dev='vda' bus='virtio'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

</disk>

(2)virt-cat 命令,类似于 cat 命令

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

virt-cat -a /data_kvm/store/test01.qcow2 /etc/sysconfig/grub

3virt-edit 命令

virt-edit 命令,用于编辑文件,用法与 vim 基本一致。

virt-edit -a /data_kvm/store/test01.qcow2 /etc/resolv.conf

(4virt-df 命令

virt-df 命令用于查看虚拟机磁盘信息。

virt-df -h test01

7.虚拟机克隆

 (1)查看虚拟机状态  

virsh list --all

(2)从 test01 克隆 test02

virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2

(3)查看虚拟机状态

virsh list --all

(4)启动虚拟机

 virsh start test02

8.虚拟机快照

KVM 虚拟机要使用镜像功能,磁盘格式必须为 qcow2。

1)对 test01 创建快照

virsh snapshot-create test01

已生成域快照 1503494464

2)查看虚拟机快照版本信息

virsh snapshot-current test01

(3)查看快照信息

 virsh snapshot-list test01

(4)创建新快照

 virsh snapshot-create test01

(5)查看快照信息

virsh snapshot-list test01

(6)恢复虚拟机状态

virsh snapshot-revert test01 1503494464

(7)查看虚拟机快照版本信息

 virsh snapshot-current test01

(8)删除快照

 virsh snapshot-delete test01 1503494464

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值