1. 前言
本文讲解KVM虚拟化的优势以及如何在Ubuntu 20.04 系统上安装KVM虚拟化套件。
先来了解了一下KVM虚拟化技术:
以下引用摘自红帽官网:
1.1 KVM是什么?
KVM是基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux® 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。
KVM 是 Linux 的一部分。Linux 2.6.20 或更新版本包括 KVM。KVM 于 2006 年首次公布,并在一年后合并到主流 Linux 内核版本中。由于 KVM 属于现有的 Linux 代码,因此它能立即享受每一项新的 Linux 功能、修复和发展,无需进行额外工程。
1.2 Linux KVM虚拟化有什么优势?
安全性: KVM 利用安全增强型 Linux(SELinux) 和安全虚拟化(sVirt) 组合来加强虚拟机的安全性和隔离性。SELinux 在虚拟机周围建立安全边界。sVirt 则扩展 SELinux 的功能,使强制访问控制 (MAC)安全机制应用到客户虚拟机,并且预防手动标记错误。
存储:KVM 能够使用 Linux 支持的任何存储,包括某些本地磁盘和网络附加存储(NAS)。还可以利用多路径 I/O 来增强存储并提供冗余能力。KVM 还支持共享文件系统,因此虚拟机镜像可以由多个主机共享。磁盘镜像支持精简置备,可以按需分配存储,不必预先备妥一切。
硬件支持:KVM 可以使用多种多样的认证 Linux 兼容硬件平台。由于硬件供应商经常助力内核开发,所以 Linux 内核中通常能快速采用最新的硬件功能。
内存管理:KVM 继承了 Linux 的内存管理功能,包括非统一内存访问和内核同页合并。虚拟机的内存可以交换,也可通过大型宗卷支持来提高性能,还可由磁盘文件共享或支持。
实时迁移:KVM 支持实时迁移,也就是能够在物理主机之间移动运行中的虚拟机,而不会造成服务中断。虚拟机保持开机状态,网络连接保持活跃,各个应用也会在虚拟机重新定位期间正常运行。KVM 也会保存虚拟机的当前状态,从而存储下来供日后恢复。
性能和可扩展性:KVM 继承了 Linux 的性能,针对客户机和请求数量的增长进行扩展,满足负载的需求。KVM 可让要求最苛刻的应用工作负载实现虚拟化,而这也是许多企业虚拟化设置的基础,如数据中心和私有云等(通过 OpenStack®)。
调度和资源控制:在 KVM 模型中,虚拟机是一种 Linux 进程,由内核进行调度和管理。通过 Linux 调度程序,可对分配给 Linux 进程的资源进行精细的控制,并且保障特定进程的服务质量。在 KVM 中,这包括完全公平的调度程序、控制组、网络命名空间和实时扩展。
更低延迟,更高优先级: Linux 内核提供实时扩展,允许基于虚拟机的应用以更低的延迟、更高的优先级来运行(相对于裸机恢复)。内核也将需要长时间计算的进程划分为更小的组件,再进行相应的调度和处理。
了解完KVM的特性与优势后,我们开始在Linux系统上安装KVM套件和尝试启动一台虚拟机。
2. 先检查我们自己服务器的硬件条件
2.1 检查CPU是否支持虚拟化
我们先检查本机CPU是否可以支持虚拟化。
- grep -Eoc '(vmx|svm)' /proc/cpuinfo
输出结果
- 96
我的输出结果表明,被匹配了96次。为什么是96次呢?因为我的服务器的每个CPU都带虚拟化,共96个CPU,每个CPU都匹配一次。所以在每台机器上执行该命令都可能不一样。只要输出结果大于0即表明您的CPU支持虚拟化。
注:Linux系统上的CPU数量与CPU的线程数一致,即一个线程数一个CPU
2.2 检查主板是否开启虚拟化
CPU支持虚拟化就可以正常使用KVM加速功能了吗?不一定的,我们还需要在主板BIOS上开启虚拟化的功能。
使用下面的指令检查KVM加速是否可用。
先安装检查工具:
Ubuntu系统执行以下命令:
- sudo apt update && sudo apt install cpu-checker -y
笔者在CentOS系统上查找kvm-ok命令对应的软件包时,被提示所有EPEL仓库移除了该命令对应的软件包。
查找kvm-ok命令对应的软件包
- yum provides kvm-ok
输出结果:
- https://centos.anexia.at/epel/7/x86_64/repodata/83cce7d719a366a5ebc50fd9a1ff70f575d9df83a6994f948f582850213897f7-filelists.sqlite.bz2: [Errno 14] HTTPS Error 404 - Not Found
提示找不到文件。
Ubuntu 安装完成后,执行以下命令:
- kvm-ok
我的服务器上输出的结果如下:
- INFO: /dev/kvm exists
- KVM acceleration can be used
表明kvm加速可用。
3. 安装KVM虚拟化套件
确认CPU和主板都可支持后。接下来安装kvm虚拟化套件:
Ubuntu系统:
- sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager -y
qemu-kvm: 提供硬件底层虚拟化。
libvirt-daemon-system: 为 libvirt作为系统服务的守护程序运行。
libvirt-clients: 为不同的虚拟机提供长期稳定的C API
bridge-utils:提供网络桥接功能
virtinst: 为libvirt创建虚拟机提供一系列的命令行工作
virt-manager: KVM虚拟机管理图形界面,如果服务器没有安装图形化界面,没有必要安装它。
检查libvirtd是否正在运行:
- sudo systemctl is-active libvirtd
输出结果:
- active
表明我的服务器上正在运行libvirtd
想要创建和管理虚拟机,你需要添加你的用户到libvirt 和 kvm用户组。输入:
- sudo usermod -aG libvirt $USER
- sudo usermod -aG kvm $USER
如果不把用户加入组中,那就要在每条命令之前添加sudo获取更高的权限。
4. 查看虚拟网络
查看虚拟网桥,您可以理解为一个多接口的虚拟交换机:
- brctl show
我的服务器输出结果:
该网桥用于为虚拟机提供连接物理网络的功能,即虚拟机可以访问其它机器,其它机器也可以直接访问它。
但本文不讨论它,因为接下来我只演示NAT模式。
5. 创建KVM虚拟机
先准备好操作系统的ISO镜像文件:
我已经准备好了CentOS 7.8的安装镜像,它的位置是:
- /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso
先规划好虚拟机参数:
- 名字:centos7_2003
- 内存:4096M
- CPU:2
- 类型:linux
- 模版:centos7.0
- 虚拟显示器:VNC,定义密码,定义端口号5911
- 网络模式:NAT
- 虚拟磁盘文件:/var/lib/libvirt/images/CentOS7.qcow2
- ISO安装镜像: /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso
命令行创建:
- sudo virt-install --name=centos7_2003 --ram=4096 --vcpus=2 --virt-type=kvm --os-type=linux --os-variant=centos7.0 --network default,model=virtio --graphics=vnc,password=linuxrumen.com,port=5911,listen=0.0.0.0 --noautoconsole --accelerate --cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso --disk path=/var/lib/libvirt/images/CentOS7.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40
输出以下结果即表明创建成功:
- 开始安装......
- 正在分配 'CentOS7.qcow2' | 40 GB 00:00:00
- 域安装仍在进行。您可以重新连接
- 到控制台以便完成安装进程。
当然,您也可以在Linux桌面环境中使用图形界面的virt-manager创建它。
6. 连接KVM虚拟机显示器
在Windows系统上安装VNC viewer客户端:
连接新创建虚拟机的显示器:
VNC服务器地址:
IP+端口
比如192.168.20.35:5911
在VNC viewer客户端:
添加一台VNC主机:
输入创建KVM虚拟机时配置的密码:
7. 结论:
本文主要演示如何在Ubuntu 20.04 系统上安装KVM与使用KVM基本功能。Linux KVM虚拟化平台非常值得深入研究和学习。它能提供稳定高性能的虚拟化技术。维护也比Exsi简单。命令行套件可以覆盖所有的功能。我一般使用命令行创建,一个SSH终端窗口可以搞定一切。如果您有更酷的用法。请留言。
本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:
https://www.linuxrumen.com/rmxx/1866.html