KVM虚拟化技术及常用命令详解

KVM全称是Kernel-based Virtual Machine,即基于内核的虚拟机,是采用硬件辅助虚拟化技术的全虚拟化解决方案。对于I/O设备(如硬盘、网卡等),KVM即支持QEMU仿真的全虚,也支持virtio方式的半虚。

KVM从诞生开始就定位于基于硬件虚拟化支持的全虚实现,由于其在Linux内核2.6版本后被集成,通过内核加载模式使得Linux内核变成一个事实上的Hypervisor(虚拟机管理器,也叫VMM(Virtual Machine Monitor)),但是硬件管理还是由Linux Kernel来完成。

Hypervisor和VMM:

可以把hypervisor和VMM(virtual machine monitor)理解为同一样东西,它们都是用于监控和控制虚拟机操作系统。

在创建虚拟机的过程中,会虚拟出一整套的硬件资源,例如硬盘、内存、CPU、网络设备等,这些工作都是由hypervisor负责,除此之外,它还负责虚拟系统运行过程的资源分配和虚拟机的生命周期管理等。

一个KVM客户机就对应一个Linux进程,每个vCPU对应这个进程下的一个线程,还有单独处理I/O的线程,属于同一个进程组。

所以,宿主机上Linux Kernel可以像调度普通Linux进程一样调度KVM虚拟机,这种机制使得Linux Kernel的进程优化和调度功能优化等策略,都能用于KVM虚拟机。比如:通过进程权限限定功能可以限制KVM客户机的权限和优先级等。

由于KVM嵌入Linux内核中,除了硬件辅助虚拟化(如VT-d)的硬件设备能被虚拟机看见外,其他的I/O设备都是QEMU模拟出来的,所以QEMU是KVM天生的好基友。

可以说KVM就是在硬件辅助虚拟化技术之上构建起来的VMM。

但并非要求所有硬件虚拟化技术都支持才能运行KVM虚拟化,KVM对硬件最低的依赖是CPU的硬件虚拟化支持(比如:Intel的VT-x技术和AMD的AMD-V技术),而其他的内存和I/O的硬件虚拟化支持,会让整个KVM虚拟化下的性能得到更多的提升。

所以在虚拟机部署KVM功能时,首先就是要查看宿主机Host(也就是主机上的虚拟机,这里是在VMware Workstations的虚拟机打开CPU虚拟化功能。

图片[1]-KVM虚拟化技术及常用命令详解-不念博客

然后在Linux系统中可以通过如下命令确定支持VT-x功能:

如果什么输出都没有,那说明你的系统并没有支持虚拟化的处理 ,不能使用KVM。

图片[2]-KVM虚拟化技术及常用命令详解-不念博客

“vmx” 是 Intel CPU 的虚拟化技术标识,”svm” 是 AMD CPU 的虚拟化技术标识。安装KVM及相关的工具:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

qemu-kvm:KVM虚拟化的基本包

libvirt-daemon-system:libvirt守护程序,提供API和管理虚拟化功能

libvirt-clients:包含用于与libvirt守护程序通信的客户端实用程序

bridge-utils:用于创建和管理网络桥接的工具集

virt-manager:用于管理虚拟机的图形化工具确认libvirtd服务已启动并运行:

sudo systemctl start libvirtd
sudo systemctl status libvirtd
#确保在系统启动时自动启动
sudo systemctl enable libvirtd

通过virt-manger(图形化工具)来创建或者管理虚拟机

图片[3]-KVM虚拟化技术及常用命令详解-不念博客

或者通过virsh(命令行工具)来创建或者管理虚拟机

图片[4]-KVM虚拟化技术及常用命令详解-不念博客

下面是一些常用的virsh命令:

  • virsh list: 列出当前运行的虚拟机
  • virsh start <domain>: 启动指定名称的虚拟机
  • virsh shutdown <domain>: 关闭指定名称的虚拟机
  • virsh reboot <domain>: 重启指定名称的虚拟机
  • virsh create <xmlfile>: 根据指定的XML文件创建虚拟机
  • virsh destroy <domain>: 强制停止指定名称的虚拟机
  • virsh undefine <domain>: 删除指定名称的虚拟机配置
  • virsh console <domain>: 进入指定名称的虚拟机控制台
  • virsh dominfo <domain>: 显示指定名称的虚拟机信息
  • virsh domstate <domain>: 显示指定名称的虚拟机状态

接下来分析一下kvm的Makefile :

图片[5]-KVM虚拟化技术及常用命令详解-不念博客
图片[6]-KVM虚拟化技术及常用命令详解-不念博客

可以看出kvm的Makefile主要生成三个模块,kvm.o和kvm-intel.o、kvm-amd.o。

  • kvm.o是kvm的核心模块,kvm基本只实现硬件辅助虚拟化相关部分,而不支持的用Qemu来模拟实现。
  • kvm-intel.o是intel平台架构虚拟化模块,平台相关
  • kvm-amd.o是amd架构虚拟化模块,平台相关
© 版权声明
THE END
喜欢就支持一下吧
点赞70赞赏 分享
评论 抢沙发
头像
欢迎光临不念博客,留下您的想法和建议,祝您有愉快的一天~
提交
头像

昵称

取消
昵称

    暂无评论内容