当前位置:网站首页 > 压力管理与职场平衡 > 正文

kvm虚拟化管理系统(kvm虚拟化架构)



KVM是指基于Linux内核的虚拟机(Kernel-base Virtual Machine),增加到Linux内核是Linux发展的一个重要里程碑,这也是第一个整合到Linux主线内核的虚拟化技术。在KVM模型中,每一个虚拟机都是一个由Linux调度程序管理的标准进程,你可以在用户空间启动客户机操作系统,一个普通的Linux进程有两种运行模式:内核和用户,KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。

KVM仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具。

在 Linux 系统中,可以使用 modprobe 系统工具去加载 KVM 模块,如果用 RPM 安装 KVM软件包,系统会在启动时自动加载模块。加载了模块后,才能进一步通过其它工具创建虚拟机。

但仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块进行操作,因而必须有一个用户空间的工具。关于用户空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU

QEMU 是一个强大的虚拟化软件,它可以虚拟不同的CPU构架。比如说在x86的CPU上虚拟一个Power的CPU,并利用它编译出可运行在Power上的程序。

KVM 使用了 QEMU 的基于x86的部分,并稍加改造,形成可控制KVM内核模块的用户空间工具QEMU-KVM

所以Linux发行版中分为kernel部分的KVM内核模块和QEMU-KVM工具。这就是 KVM 和 QEMU 的关系。

虽然QEMU-KVM工具可以创建和管理KVM虚拟机,但是由于QEMU 工具效率不高,不易于使用,RedHat 为 KVM 开发了更多的辅助工具,比如 libvirtlibguestfs 等。

Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。

使用 libvirt,只需要通过libvirt提供的函数连接到KVM或Xen宿主机,便可以用同样的命令控制不同的虚拟机了。

Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令virsh,可以通过使用 virsh 命令来使用 libvirt 的全部功能。

如果用户希望通过图形用户界面管理KVM,这就是virt-manager工具使用的功能。他是一套用python编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager就是利用 libvirt 的 API 实现的。

宿主机是虚拟机的物理基础,虚拟机存在于宿主机中,与宿主机共享使用硬件。宿主机的运行是虚拟机运行的前提与基础。也称宿主机为主机(host)。

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。也称虚拟机为客户机(guest)。

宿主机支持虚拟化技术是使用KVM的前提,因此在开始使用KVM之前需要确认宿主机是否支持虚拟化。

通过如下命令查看CPU是否支持虚拟机:

 

如果看到有输出结果,即证明cpu支持虚拟化。vmx属于inter处理器,svm属于amd处理器。

使用KVM虚拟化,还需要开启VT(Virtualization Technology),因此需要确认BIOS中是否开启VT,如果没有启用,虚拟机将会变得很慢,无法使用。

 
 
 
 

当安装好kvm,会自动新建一个虚拟网卡,这个虚拟网卡就是NAT模式的网卡

 

如果希望主机的网卡是NAT模式,直接指定这个网卡就可以了

如果需要桥接网卡,就还需要手动配置

原网卡配置

 

新建ens32网卡的桥接网卡

 

生效

 

查看网络

 
 

新建一个50G的磁盘,格式为qcow2

 
 

此时,可通过vnc viewer连接此安装进程开启的vnc连接端口(默认是5900端口)

查看端口

 

参数说明

  • --name 指定虚拟机名称
  • --memory 分配内存大小,单位M。
  • --vcpus 分配CPU核心数,最大与实体机CPU核心数相同
  • --disk 指定虚拟机镜像,size 指定分配大小单位为G。
  • --network 网络类型,此处用的是默认,一般用的都是bridge桥接,这个br0就是在之前宿主机上创建好的一个桥接设备。
  • --accelerate 加速参数,在linux系统安装开始就要注意添加提高性能的一些参数,后面就不需要做一些调整了。
  • --cdrom 指定安装镜像iso
  • --vnc 启用VNC远程管理,一般安装系统都要启用。
  • --vncport 指定VNC 监控端口,默认端口为5900,端口不能重复。一般不设置此参数。
  • --vnclisten 指定VNC 绑定IP,默认绑定127.0.0.1,这里改为 0.0.0.0。
  • --noautoconsole 使用本选项指定不自动试图连接到客户机控制台。默认行为是调用一个VNC客户端显示图形控制台,或者运行 "virsh" "console"命令显示文本控制台。

通过VNC Viewer连接宿主机的5900端口

点击连接,就可以连接到虚拟机,看到安装页面

在安装完成系统后,会提示重启,但是,但是,但是,虚拟机并不会重启,而是关机

 

可以看到,虚拟机已经看不到了

但是可以通过查看所有虚拟机来查看

 

可以看到,是关机的

这个时候,只要开机就好了

 

每次安装虚拟机比较浪费时间,KVM提供了虚拟机克隆技术,可以几分钟内克隆出一个新的虚拟机,并不需要安装系统,非常方便迅速。

kvm虚拟机的克隆分为两种情况,

  1. KVM本机虚拟机直接克隆。
  2. 通过复制配置文件与磁盘文件复制克隆(适用于异机的静态迁移)。

虚拟机克隆通过 命令来实现

例如,我们的虚拟机是 mylinux1

 

现在我们需要克隆 mylinux1 虚拟机

如果直接克隆,会直接报错

 

所以需要先将原虚拟机关机

 

然后再克隆

 

这个时候就会有两个虚拟机

 

那么这个时候就会有个小疑问,那如果两个主机同时启动,vnc的端口会不会冲突呢

这个是不会的,因为我们在创建虚拟机的时候,并没有明确指定vnc的端口,所以如果遇到多个虚拟机需要开启vnc端口,就会在端口5900后延

例如此时同时启动了两个虚拟机,那么端口就是5900和5901

注意: 这里vnc的端口虽然可以平滑克隆,但是虚拟机内部的ip地址是无法平滑克隆的,还是需要手动修改(如果是手动设置的ip地址的话)

当我们有异机迁移的需求时,该如何来迁移主机呢

KVM虚拟机跨物理机的迁移方式比较简单, 只要拷贝其磁盘文件和xml配置文件,再根据xml来创建域即可

  1. 需要先确保目标主机满足虚拟机的硬件需求,例如 CPU、内存和磁盘空间
  2. 在源主机上,使用 导出虚拟机的 XML 配置文件
     
  3. 将虚拟机的 XML 配置文件和磁盘文件复制到目标主机
    配置文件是刚到出的 文件
    磁盘文件是创建虚拟机时候新建的磁盘文件
  4. 在目标主机上,确保您已安装了 KVM 和 Libvirt。如果尚未安装,按照安装的步骤安装一下
  5. 确保虚拟机的磁盘文件路径在 XML 配置文件中正确。如果需要,使用文本编辑器编辑 XML 配置文件,并更新磁盘文件的路径。
     

    将上面的 中的file值修改为真是的磁盘文件存放地址

  6. 加载虚拟机配置生成虚拟机
     
  7. 启动迁移的虚拟机
     

autostart目录是配置kvm虚拟机开机自启动目录

 

或直接virsh命令(进入交互模式)

然后再执行子命令。

如下所示。

 

显示虚拟机列表:

 

启动虚拟机:

 

在安装KVM linux虚拟机必须配置此服务。

 
 

重启虚拟机:

 
 
 
 

autostart目录是kvm虚拟机开机自启动目录,可以看到该目录中有KVM配置文件链接。

 

KVM虚拟机配置文件可以通过这种方式进行备份。

 

说明:该命令只是删除wintest01的配置文件,并不删除虚拟磁盘文件。

通过导出备份的配置文件恢复原KVM虚拟机的定义,并重新定义虚拟机。

 
 
 
 

格式

  • 是要创建快照的虚拟机名称
  • 快照的名称

例如

为虚拟机mylinux1创建快照first-snapshot

 

格式

  • 是要查看快照的虚拟机名称

例如

 

格式

  • 是要还原快照的虚拟机名称
  • 快照的名称

例如

 

格式

  • 是要删除快照的虚拟机名称
  • 快照的名称

例如

 

格式

  • 是虚拟机名称
  • 快照的名称
  • 配置文件的名称

这个一般再需要用快照克隆新主机的情况

还需要删除快照配置文件中的 标签,并且将虚拟机的名称修改,然后用这个配置文件创建虚拟机

到此这篇kvm虚拟化管理系统(kvm虚拟化架构)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 服务器压力测试软件(服务器压力测试报告)2025-05-09 15:45:06
  • 动态库和静态库参与编译时的区别(动态库和静态库参与编译时的区别是)2025-05-09 15:45:06
  • 服务器压力测试网站有哪些(服务器压力测试软件)2025-05-09 15:45:06
  • 日志管理最大的作用(日志管理是怎么实现的)2025-05-09 15:45:06
  • rbac权限管理设计案例(rbac权限管理系统)2025-05-09 15:45:06
  • 免费的个人服务器软件(免费服务器管理软件)2025-05-09 15:45:06
  • 制作软件的程序(制作软件程序,没有参与内容下载内容传播)2025-05-09 15:45:06
  • 动态库和静态库参与编译时的区别(动态库和静态库的使用)2025-05-09 15:45:06
  • 服务器压力测试平台(服务器压力测试软件)2025-05-09 15:45:06
  • gridbagconstraints布局(gridbaglayout布局管理器的用法)2025-05-09 15:45:06
  • 全屏图片