Ubuntu 20.04如何安装和创建KVM虚拟机

  • A+
所属分类:Linux

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

输出结果:

提示找不到文件。

Ubuntu 安装完成后,执行以下命令:

kvm-ok

我的服务器上输出的结果如下:

INFO: /dev/kvm exists
KVM acceleration can be used

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 kvmUSER

如果不把用户加入组中,那就要在每条命令之前添加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主机:

Ubuntu 20.04如何安装和创建KVM虚拟机

输入创建KVM虚拟机时配置的密码:

Ubuntu 20.04如何安装和创建KVM虚拟机

7. 结论:

本文主要演示如何在Ubuntu 20.04 系统上安装KVM与使用KVM基本功能。Linux KVM虚拟化平台非常值得深入研究和学习。它能提供稳定高性能的虚拟化技术。维护也比Exsi简单。命令行套件可以覆盖所有的功能。我一般使用命令行创建,一个SSH终端窗口可以搞定一切。如果您有更酷的用法。请留言。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: