kvm 虚拟化技术

本文详细介绍了KVM虚拟化技术,包括KVM的工作原理、与QEMU的关系,以及如何在Linux环境下创建和管理虚拟机。通过libvirt工具,可以更方便地管理和操控虚拟机实例,实现自动化部署和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KVM

虚拟化,即为在一物理机上,同时运行多个独立的操作系统。由 hypervisor (虚拟机管理程序) 创建一抽象层以完成对硬件的控制与分离,并为 guest (客户机) 提供对硬件的访问途径。

KVM 即为 Kernel-based Virtual Machine 的缩写,是一种 Linux 完全虚拟化的解决方案,并借由处理器硬件的特性,为客户机提供底层的实体抽象,以至于使客户机并不知自己身处虚拟化的环境中。

现在 KVM 已被设计为一种接口——可装载的内核模块 kvm.ko,提供虚拟化的核心底层架构。

但是,KVM 本身并不完成全部设备的模拟,转由 QEMU 通过 /dev/kvm 接口以完成对外围设备的模拟。
https://www.slideshare.net/NOVL/virtualization-with-kvm-kernelbased-virtual-machine
来源:https://www.slideshare.net/NOVL/virtualization-with-kvm-kernelbased-virtual-machine

图中,QEMU 与 KVM 模块共同将虚拟机在用户空间中启动为一进程,并传递给它合适的选项即参数,并与其他普通进程一样,由内核进行统一调度。

操作

首先你需要在 VMware 上,编辑处于关机状态的 Linux 虚拟机 (后文将称为 Linux 主机) 的处理器设置,开启如下选项:
在这里插入图片描述
后开启 Linux 主机,执行如下命令:

egrep -i '(vmx|svm|lm)' /proc/cpuinfo

当结果中前二者有其一,第三个必有时,则已确定 Linux 主机的硬件支持虚拟化。接着下载必要软件:

yum install qemu-kvm qemu-img tigervnc-y

并将 qemu-kvm 链接至环境变量 PATH 所包含的路径下:

ln -s /usr/libexec/qemu-kvm /usr/bin

创建保存镜像的目录,并下载最小安装版的 Centos:

mkdir /data/images -pv
wget -O /data/images/centos.iso https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso

现在,你为将要创建的虚拟机提供本地的存储空间,一个文件即可——也就是为其创建磁盘映像文件 (disk image),之后虚拟机的全部数据都将存储在其中;

如下命令,在当前目录下创建一个 qcow2 格式大小 3G 名为 testCentos.qcow2 的磁盘映像文件:

mkdir /vm/qemu -pv
cd /vm/qemu
qemu-img create -f qcow2 testCentos.qcow2 10G

在安装之前,你来对比一下目前所产生的两个文件信息:
在这里插入图片描述
传递给 qemu-kvm 合适的参数,丢至后台,进行安装任务:

qemu-kvm -smp 2 -m 1024 -drive file=/vm/qemu/testCentos.qcow2 -cdrom /data/images/centos -boot dc &
  • -smp:设置逻辑 cpu 的数量
  • -m:设置客户机内存大小
  • -drive file=:定义客户机启动时的磁盘映像
  • -cdrom:设置 CD-ROM 文件
  • -boot:指明引导顺序;其中 d 表示 CD-ROM 优先;c 为硬盘优先

再使用刚下载的 tigervnc 进行连接,

vncviewer :0

在这里插入图片描述
至此,你已经成功在虚拟机中创建了虚拟机;如上文所说,qemu-kvm 所创建的虚拟机在其宿主机中表现为一进程:

ps aux
# 你将不难在结果中找到它,你我部分参数不一致
# USER      PID   %CPU  %MEM    VSZ   RSS TTY   STAT START   TIME  COMMAND
# root      36901  7.8  0.8 1483360 39824 pts/1   Sl+  20:09  0:00 qemu-kvm -smp 2 -m 1024 -drive \
file=/vm/qemu/testCentos.qcow2 -cdrom /data/images/centos -boot dc

安装程序完成后,你需要根据 ps 命令获得到的进程号杀掉该进程;以后启动时,去掉从 cdrom 引导的参数即可:

kill -9 YOURPID
qemu-kvm -smp 1 -m 1024 -drive file=/vm/qemu/testCentos.qcow2

libvirt

上文中你艰难地创建客户机、杀掉客户机再运行客户机,每次还需要记住各种参数、磁盘映像文件在哪里,而且还没涉及到网络,同时你也缺少对客户机的管控能力。

libvirt 是一套为管理虚拟化而设计的 API、守护进程与程序包,也可以用来构建更为高级的管理工具。

virsh 与 virt-manager 就是两个libvirt API 之上的管理工具;前者使用命令行接口,后者使用图形接口。

virt-install 则是一款用于配置新虚拟机的命令行接口工具。

yum install libvirt virt-install -y

接下来同样是客户机的安装命令:

virt-install --connect qemu:///system --virt-type kvm --name test1 \ 
--vcpus 1 --memory 1024 \ 
--disk path=/var/lib/libvirt/images/test1,size=10,format=qcow2 \
--location /data/images/centos \
--network bridge=virbr0 \ 
--graphics none --extra-args='console=ttyS0'
# 或者 --graphics vnc 则与上文连接方式一致

在这里插入图片描述
进入非图形界面的安装程序后,你要将一条条的 ‘!’ 内容进行设置,成功变为 ‘x’ 后即可进行安装。

再说 virsh 常用命令的使用前,还有个相关的重要概念:域 (domain),libvirt 中的一个域也就是一个运行在 hypervisor 上的客户机实例。

virsh hlep    # 查看帮助信息
virsh list --all    # 列出全部的域
virsh shutdown    # 优雅地关闭一个域
virsh destroy    # 破坏一个域
virsh define    # 从 xml 文件中定义一个域
virsh start    # 启用域
virsh console    # 连接至客户机控制台
virsh undefine    # undefine a domain

再加上这两个重要的目录,我们可以通过修改 xml 文件的方式再次创建新的客户机:

  • 域的默认存储目录:/var/lib/libvirt/images/
  • 域的默认配置文件目录:/etc/libvirt/qemu/

首先进行复制磁盘映像文件与 xml 文件:

cp /var/lib/libvirt/images/test1 /var/lib/libvirt/images/test2
cd /etc/libvirt/qemu
cp test1.xml test2.xml

再对复制的 test2.xml 文件进行修改,修改内容有:

  • 修改 name 标签值为 test2
  • 删除 UUID 行
  • 修改 source file 标签值为 /var/lib/libvirt/images/test2
  • 修改 mac address 标签值为任意不重复值

在这里插入图片描述
上图从 xml 文件定义虚拟机成功后,执行启动命令,并且获取控制台。

至于图形界面的 virt-manager,没有命令行那么炫酷,在这里就不做过多的介绍了。

参考

https://blog.youkuaiyun.com/bbwangj/article/details/80465320#1.%20KVM%20%E4%BB%8B%E7%BB%8D
http://smilejay.com/kvm_theory_practice/
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/virtualization_getting_started_guide/index
https://developer.ibm.com/articles/cl-hypervisorcompare-kvm/
https://stackoverflow.com/questions/21462581/what-is-the-difference-between-full-para-and-hardware-assisted-virtualization
https://www.linux-kvm.org/page/Main_Page

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值