基础知识-虚拟化(Virtualization)技术

news/2025/1/7 18:33:25/文章来源:https://www.cnblogs.com/mugetsukun/p/18653433

(250106)

参考资料

KVM 虚拟化技术 | cnblogs | 惨绿少年@clsn.io
虚拟化介绍 | cnblogs | 休耕
云计算与虚拟化技术发展编年史 | cnblogs | 云物互联
nova系列二:kvm介绍 | cnblogs | linhaifeng
虚拟化与容器 | cnblogs | marility
《LPIC-3-Virtualization-and-Containerization-Study-Guide-Certification-Companion-for-the-LPIC-3-305-Exam-(Certification-Study...-(Antonio-Vazquez)》(只翻译理论内容,实操部分因于各种问题无法复刻。)

虚拟化概念

  • 虚拟化的术语
  • 虚拟化的优缺点
  • 各种虚拟机监控程序(hypervisor)和虚拟机监视器的变体
  • 物理机到虚拟机的迁移
  • 虚拟机在主机系统间的迁移 还会介绍这些术语和工具:hypervisor、硬件虚拟机(HVM)、半虚拟化(PV)、模拟与仿真、CPU标志、/proc/cpuinfo、以及迁移。

引言

说到虚拟化,大家通常想到的是运行一个虚拟的(而非实际的)机器。但虚拟化这个概念,不仅适用于机器,还能用在存储设备、网络等等上。用“虚拟化”这个广义的术语,我们可以通过软件模拟、硬件虚拟化、容器等多种方式来实现“虚拟化”。在书里,我们会学习主要概念,并通过实例来加深理解。

仿真化(emulation)

image
图1-1. DOSBox

我们可以用软件来模拟另一个系统,从而创建一个“虚拟”机器。比如,用来模拟基于Z80的经典个人电脑,像Spectrum、Amstrad、Commodore等。MAME(多街机模拟器)是个著名的例子,用来模拟经典街机。DOSBox(图1-1)是另一个模拟器例子,常用于玩老式的DOS游戏和其他程序。最后,我们还会提到QEMU(快速模拟器),这将在第2章详细讨论。

所有这些程序都使用软件来模拟原始机器中每个硬件组件的行为。让我们更详细地看看什么是模拟。
我们可以将模拟器定义为一种硬件或软件,它使一个计算机系统表现得像另一个系统。很多时候,模拟器只是模拟硬件架构;如果需要特定的固件或操作系统,也需要提供或模拟。你可能熟悉一些需要用户提供ROM文件才能工作的计算机模拟器。根据用途不同,有几种类型的模拟器。我们将列举其中一些。

游戏机模拟器
这是我们之前提到的第一种模拟器。针对不同平台有许多模拟器,例如Fuse用于Spectrum,Caprice用于Amstrad,Retro Virtual Machine用于Spectrum和Amstrad(图1-2),PPSSPP用于PlayStation Portable,PCSXR用于PlayStation 1等等。
image
图1-2. Retro Virtual Machine

终端模拟器
在过去,通常有一台大型主机和几个“哑”终端。这些终端只有键盘和显示器,连接到主机,主机负责执行实际的计算。如今,现代计算机使用终端模拟器远程连接到其他系统。你可能熟悉像PuTTY(图1-3)这样的程序,它是一个多平台终端模拟器。
image
图1-3. PuTTY

打印机模拟器
当应用程序想要打印文档时,应用程序需要使用页面描述语言(PDL)将适当的信息发送到打印机。两种最常用的PDL是Postscript和PCL。打印机命令语言(PCL)由惠普开发。许多不同制造商的打印机使用模拟来支持PCL语言。

网络模拟器
网络模拟器旨在测试应用程序在真实网络中的性能。它们允许测试路由器和交换机的配置。一些最著名的是GNS3(图1-4)和Cisco Packet Tracer。
image
图1-4. GNS3

系统模拟器
还有一些程序模拟完整系统,如QEMU,我们将在下一章详细讨论,以及PearPC。PearPC在x86主机上模拟PowerPC系统。

模拟化(simulation)

与模拟非常相似的概念是仿真;尽管在某些情况下这两个术语可以互换使用,但它们之间还是有一些区别。在仿真器中,主要目标是使仿真器的行为尽可能接近原始系统。
例如,模拟器可以模仿另一个系统的工作方式,但在较高层次上,不会深入到低层次的细节。另一方面,仿真器应尝试在所有层次上模仿原始系统的工作方式。
还有另一个区别,模拟器的主要目标是提供与原始系统相同的功能,但不一定以与原始系统相同的方式工作。也就是说,模拟器通常可以执行为原始系统设计的任何程序。然而,正如我们之前提到的,仿真器更感兴趣的是模仿原始系统的工作方式,而不是提供功能。因此,为原始系统设计的程序在仿真器中通常表现较差,甚至根本无法工作。

虚拟化(Virtualization)

正如我们之前所说,最初“虚拟”机器仅通过软件实现,但很快英特尔和AMD分别在他们的处理器中加入了称为Intel VT-x和AMD-V的新扩展。这种硬件辅助虚拟化提供了比纯软件解决方案更好的性能。在Linux系统中,我们可以检查/proc/cpuinfo文件以查看处理器的特性:速度、型号、CPU标志等。如果处理器支持硬件辅助虚拟化,相应的标志将会出现。

如果我们有一个英特尔CPU,我们会寻找vmx标志。

grep vmx /proc/cpuinfo
flags           : ... vmx ...

如果我们有一个AMD CPU,我们应该寻找svm标志。

grep svm /proc/cpuinfo
flags           : ... svm ...

我们可以使用lscpu命令获得大致相同的信息。
lscpu

当一个系统的CPU启用了这些标志时,它可以轻松地执行虚拟机。托管虚拟机的软件称为hypervisor(“超级监督者”)。有时,使用术语“虚拟机监视器”而不是hypervisor。在这种情况下,我们可以恰当地谈论“虚拟化”。
hypervisor管理虚拟机,分配它们正常运行所需的资源。有两种不同类型的hypervisor:

  • 类型I hypervisor,也称为“裸机”hypervisor:在这种情况下,hypervisor直接运行在系统硬件上。这种类型的hypervisor的例子有VMware ESXi、Microsoft Hyper-V或Xen。
  • 类型II hypervisor:这些hypervisor作为操作系统上的应用程序运行。一些例子包括VMware Workstation、Oracle VirtualBox(图1-5)或Microsoft Virtual PC。
    image
    图1-5. Oracle VirtualBox

虚拟化类型
我们之前已经看到,我们可以广义地谈论“虚拟化”,这包括软件模拟和仿真。但只有当存在硬件虚拟化时,我们才能恰当地谈论“虚拟化”。
从这个起点出发,我们可以根据使用的标准区分许多类型的虚拟化。最初我们可以列举这两种虚拟化类型:

  • 完全虚拟化:hypervisor几乎重新创建了原始系统的每个组件,使得客户操作系统无需修改即可运行。
  • 半虚拟化:通过特殊接口提供对硬件资源的访问。这更高效,因为hypervisor不需要执行完全虚拟化中所需的许多高成本操作。然而,客户操作系统需要修改,以便它可以在半虚拟化环境中执行。
    还有其他结合了完全虚拟化和半虚拟化特性的解决方案,如PVHVM或PVH。由于这是入门内容,我们不会深入细节,但我们将在第3章中看到这些其他虚拟化类型。
    当使用半虚拟化时,我们将谈论半虚拟化虚拟机。当使用完全虚拟化时,我们将谈论硬件虚拟机,或HVM。
    我们还应该在这里提到另一个概念,操作系统级虚拟化。在这种情况下,内核允许多个用户空间实例完全隔离地存在。这些实例在Linux环境中通常称为容器,尽管在其他操作系统中使用不同的术语来表示相同的概念,如FreeBSD中的jails或Solaris中的zones。

虚拟化的优缺点
使用虚拟化有许多优点。我们可以列举以下内容:

  • 成本效益:硬件使用效率更高;我们不再需要为每个逻辑服务器配备专用的物理服务器。
  • 管理更简单:通过使用虚拟化,我们可以使用快照在需要时回滚更改;我们还可以通过使用编排自动化许多任务。
  • 能源使用效率高:通过使用更少的硬件,需要更少的能源,从而降低成本。

不幸的是,在考虑虚拟化时,我们还需要了解一些缺点:

  • 并非所有软件和/或硬件都可以轻松虚拟化。
  • 硬件访问是间接的,因此效率较低。

物理机到虚拟机的迁移
通过虚拟化现有的物理机,我们可以从虚拟化的优势中受益。简化备份和恢复操作。这个过程通常被称为物理到虚拟迁移,简称P2V。我们可以使用不同的工具进行P2V。我们将列举其中一些。

VMware Converter
目前用于执行P2V迁移的最常用工具之一是VMware独立转换器。这是一个非常易于使用的商业工具。

virt-p2v
virt-p2v将物理机转换为由KVM管理的虚拟机。在本书的后面,我们将更详细地研究KVM和这个工具,并看到一个例子。

openQRM
openQRM是一个用于异构数据中心基础设施的管理平台,具有许多有趣的功能,其中包括P2V和V2V转换。

Clonezilla
另一种可能性,虽然不像我们之前看到的那么容易,是克隆我们计划虚拟化的服务器的磁盘。我们可以使用的一个非常好的工具是Clonezilla(图1-6)。之后,我们应该将磁盘映像文件转换为我们的hypervisor识别的格式。我们可以在他们的官方网站上看到一个完整的例子。
image
图1-6. 启动Clonezilla Live

在系统之间迁移虚拟机
除了将物理机转换为虚拟机外,有时我们可能需要将虚拟机从某个hypervisor迁移到另一个;这简称为V2V。我们将在接下来的章节中看到几个实际例子。

容器虚拟化概念

在本章中,我们将涵盖以下概念:

  • 理解系统和应用程序容器的概念
  • 理解并分析内核命名空间(kernel namespaces)
  • 理解并分析控制组(control groups,cgroups)
  • 理解并分析能力(capabilities)
  • 理解seccomp、SELinux和AppArmor在容器虚拟化中的作用

我们还将介绍以下术语和工具:nsenter、unshare、ip、capsh、/sys/fs/cgroups、/proc/[0-9]+/ns和/proc/[0-9]+/status。

系统容器与应用程序容器

容器本质上是一系列被隔离的系统进程。它依赖于主机操作系统的一系列特性来提供这种隔离,主要是命名空间(namespaces)和控制组(cgroups)。在某些文档中,容器化也被称为操作系统级虚拟化。

  • 系统容器:运行完整操作系统的容器。
  • 应用程序容器:一个最小化的独立包,包含运行特定应用程序所需的一切,仅此而已。

内核命名空间(Kernel Namespaces)

Linux命名空间是Linux内核的一项功能,用于分区内核资源。通过命名空间,一个进程或一组进程只能看到特定的资源,而另一个进程或组进程看到的是不同的资源。根据隔离的资源类型,命名空间有多种类型,并且随着内核的发展,可能会添加更多类型。常见的命名空间包括:

  • 挂载命名空间(Mount)
  • 进程ID命名空间(Process ID,pid)
  • 网络命名空间(Network,net)
  • 进程间通信命名空间(Inter-process communication,ipc)
  • UTS命名空间(Unix time sharing)
  • 用户ID命名空间(User ID,user)
  • cgroup命名空间(cgroup namespace)
  • 时间命名空间(Time namespace)

查看系统中的命名空间

要列出当前系统中正在使用的命名空间,可以使用lsns命令。

虚拟化与容器详细内容

KVM 虚拟化技术 | cnblogs | 惨绿少年@clsn.io
nova系列二:kvm介绍 | cnblogs | linhaifeng
虚拟化与容器 | cnblogs | marility

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864948.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【k8s基础】k8s 基本使用

介绍及教程大全 Kubernetes中文文档 结构模型 k8s 是经典的一对多模型,有一个主要的管理节点master和许多的工作节点slaver。当然,k8s 也可以配置多个管理节点,拥有两个以上的管理节点被称为 高可用。k8s 包括了许多的组件,每个组件都是单运行在一个docker容器中,然后通过…

Scss 入门

Scss 是对 CSS 的扩展,提供了比 CSS 更简洁的语法和更强大的功能。不过,在部署时,我们要先把 Scss 编译成 CSS,才能让浏览器识别。编译 Scss 的方法有很多,这里我们使用 VS Code 的插件 Live Sass Compiler 进行自动编译。 基本准备配置保存目录。在 VS Code 配置文件中添…

Seed Lab实验:RSAPublic-Key Encryption and Signature Lab

Seed Lab实验:RSAPublic-Key Encryption and Signature Lab笔记RSAPublic-Key Encryption and Signature Lab 1.推导RSA私钥 import gmpy2p = 0xF7E75FDC469067FFDC4E847C51F452DF q = 0xE85CED54AF57E53E092113E62F436F4F e = 0x0D88C3n = q * p phi = (p - 1) * (q - 1) d =…

双稳态触发器

双稳态触发器双稳态触发器是一种具有记忆功能的逻辑单元电路,它能储存一位二进制码。 特点有两个稳定状态“0”态和“1”态; 能根据输入信号将触发器置成“0”或“1”态; 输入信号消失后,被置成的“0”或“1”态能保存下来,即具有记忆功能。RS触发器 基本RS触发器 输入低电…

在Lazarus下的Free Pascal编程教程——以数据处置推动程序运行的模块化程序设计方法

0.前言 我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。 了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”和…

foobar2000 v2.24.1 汉化版

foobar2000 v2.24.1 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支持 unicode 及支持播放增益的高级标签功能. 特色: * 支持的…

ABB机器人IO板DSQC652维修方法归纳

ABB机械手IO板DSQC652维修需要一定的专业知识和技能,以下是详细的维修步骤和注意事项:1. 初步检查断电操作:在维修前,确保机器人系统完全断电,避免触电或损坏设备。外观检查:检查DSQC652板是否有明显的物理损坏,如烧焦痕迹、裂纹或元件脱落。连接检查:检查IO板与控制器…

车载以太网一致性测试套件TAE.AETP

随着汽车电子电气架构的发展,高带宽、高速率的数据通信需求逐步涌现,具有稳定、高效特点的车载以太网技术逐步成为汽车主干网通信主流方案。为了满足复杂的通信需求,越来越多的以太网通信协议被应用到车载领域与之而来的是更多新技术的测试验证需求,经纬恒润自主研发的车载…

直播电商运营工具如何选?看这一篇就够了

近年来,直播电商迅速崛起,成为电商行业的新风口。无论是头部主播还是中小商家,都希望通过直播带货实现销售增长。然而,随着市场竞争的加剧,直播电商的运营难度也在不断增加。商家们面临着选品、数据分析、用户互动、流量获取等多重挑战。如何高效管理直播流程、精准分析数…

使用 NodeLocalDNS 提升集群 DNS 性能和可靠性

本文主要分享如何使用 NodeLocal DNSCache 来提升集群中的 DNS 性能以及可靠性,包括部署、使用配置以及原理分析,最终通过压测表明使用后带来了高达 50% 的性能提升。1.背景 什么是 NodeLocalDNS NodeLocal DNSCache 是一套 DNS 本地缓存解决方案。NodeLocal DNSCache 通过在…

如何提高企业团队间的协作效率?四大关键策略

在现代企业管理中,团队协作和任务管理是提升整体工作效率的关键。然而,随着团队规模的扩大和任务复杂性的增加,如何高效地分配任务、跟踪进度并确保协作流畅,成为了企业管理者头痛的问题。尤其在跨部门合作和远程团队的背景下,传统的沟通方式和任务管理手段显得尤为不适应…