新手必读:Linux虚拟化实现

2024-02-22 08:59:34 浏览数 (1)

文章开头必须介绍下这位github开源大佬,是腾讯的一位前辈,仓库地址:https://github.com/yifengyou,里面有他学习的各种资料,包含linux内核态、用户态、虚拟化、云原生、编程语言等分类,很震撼。大家可以看下贡献图,感受下压迫感,这位大佬大年三十都还在学习!

浅谈虚拟化

1. 全虚拟化:

全虚拟化利用虚拟机监视器(VMM)或者称为 hypervisor 的软件层来模拟底层硬件。Hypervisor 位于宿主硬件和虚拟机之间,负责协调虚拟机对硬件的访问请求。

  • 硬件辅助的全虚拟化:现代 CPU 提供了虚拟化扩展(Intel VT-x 或 AMD-V),这些技术提供了执行控制功能,允许 hypervisor 有效地管理和隔离在虚拟环境中运行的指令,而不需要软件模拟。
  • 二进制翻译:对于缺乏硬件辅助的系统,hypervisor 需要使用二进制翻译(binary translation)来处理宿主机CPU不直接支持的虚拟化指令。这种方法通过在运行时将虚拟化指令转换为宿主机指令来实现。

2. 半虚拟化:

半虚拟化需要客户操作系统知道它们在虚拟环境中运行,并且要进行相应的修改来与 hypervisor 交流。这意味着客户操作系统中的关键元素,如内存管理和 I/O 设备操作,需要针对虚拟化环境进行优化。

  • 超调用(hypercalls):在半虚拟化中,修改后的操作系统通过超调用接口与 hypervisor 通信。这类似于应用程序使用系统调用与操作系统通信。

3. 操作系统级虚拟化(容器化):

容器化是一种轻量级的虚拟化形式,其中虚拟化发生在操作系统层面。容器内的应用程序使用宿主机的操作系统内核,但运行在隔离的用户空间内。

  • Linux Containers (LXC):LXC 是实现操作系统级虚拟化的一种技术,它利用了 Linux 内核的特性,如 cgroups 和 namespace,来实现资源管理和隔离。
    • Namespaces:这是 Linux 内核提供的一种功能,用于隔离和管理系统资源。Namespaces 将系统资源划分为不同的独立的区域(例如 PID(进程ID)namespaces、network namespaces、mount namespaces 等),每个容器都在自己的 namespace 中运行,不会看到或影响其他容器的资源。
    • Control Groups (cgroups):cgroups 是 Linux 内核的另一个特性,它用于限制、记录和隔离进程组使用的物理资源(如 CPU、内存、磁盘 I/O、网络等)。通过 cgroups,系统管理员可以精确控制每个容器可以使用多少资源,保证资源分配的公平性和效率。
  • Docker:Docker 使用 LXC 作为其最初的容器执行环境,后来发展出了自己的容器运行时,即 Docker Engine。Docker 容器通过 Dockerfile 配置,并可以通过 Docker Hub 分享。

KVM

KVM(Kernel-based Virtual Machine)是一种虚拟化解决方案,可以在Linux系统上运行多个隔离的虚拟机。每个虚拟机都有私有的虚拟化硬件:CPU、内存、磁盘等,使得它们可以运行各自的操作系统。

KVM是一种基于硬件的虚拟化技术,它利用了现代处理器中的虚拟化扩展(如Intel的VT-x技术或者AMD的AMD-V技术),从而提供了高效的虚拟机性能。KVM本身是Linux内核的一部分,这意味着它能够利用Linux内核的所有功能和优化。

KVM是开源的,成为了许多虚拟化平台和云计算解决方案的基础,例如OpenStack和Proxmox VE。用户可以通过诸如libvirt这样的工具和API来管理KVM虚拟机,也可以使用图形界面前端如Virt-Manager来进行虚拟机的创建、监控和管理。

KVM与VMware以及OpenStack的主要区别在于它们的定位、使用的技术和功能。

KVM与VMware的区别:

  1. 开源与专有:KVM(Kernel-based Virtual Machine)是一个开源的虚拟化基础设施,可以集成到Linux内核中,而VMware提供的是专有的虚拟化解决方案,其主要产品例如VMware vSphere/ESXi是闭源的。
  2. 成本:KVM作为开源软件,通常没有直接的费用,但可能需要投入时间进行配置和管理。VMware的产品通常需要购买许可证,尤其是对于企业级功能。
  3. 管理工具:VMware提供了一整套成熟的管理工具,如vCenter,可以提供集中管理和丰富的功能。KVM通常需要依赖其他开源项目如libvirt进行管理,或者通过第三方工具如Virt-Manager、Proxmox VE等。
  4. 性能和特性:VMware以其良好的性能和高级特性(如vMotion、Storage DRS等)而著称。KVM作为Linux的一部分,性能也非常优秀,但某些高级特性可能需要额外的工具和配置来实现。

KVM与OpenStack的区别:

  1. 虚拟化层与云平台:KVM是虚拟化层,提供硬件的虚拟化能力;而OpenStack是一套开源的云计算管理平台,可以用来构建和管理公有云和私有云环境。
  2. 作用范围:KVM关注于将物理服务器虚拟化为多个虚拟机。OpenStack则涵盖了更多的云服务组件,如计算(Nova)、存储(Cinder/Swift)和网络(Neutron)等多个模块,它可以使用KVM作为其底层计算节点的虚拟化技术。
  3. 使用场景:KVM通常适用于需要虚拟化服务器的场景,而OpenStack适用于需要构建和管理整个云计算环境的场景。
  4. 集成层次:OpenStack设计为可以与多种虚拟化技术整合,不仅限于KVM。它还可以与VMware、Xen和Hyper-V等虚拟化解决方案一起工作。

总的来说,KVM主要是虚拟化技术,VMware是提供更广泛虚拟化解决方案的商业公司,而OpenStack是以KVM为其中一个选项的云平台管理框架。

0 人点赞