跳到主要内容

虚拟化与容器:云计算的基石

虚拟化是在单台物理机上运行多个独立操作系统的能力。它彻底改变了 IT 行业,实现了现代云的效率和可扩展性。

本章探讨虚拟机 (VM) 与容器之间的架构差异、使其运行快速的硬件加速技术,以及在大规模环境下管理它们的编排层。


1. 虚拟化频谱

1.1 全虚拟化 (Full Virtualization)

客户机操作系统 (Guest OS) 并不知道自己运行在虚拟环境中。

  • 二进制翻译:如果 Guest OS 尝试执行特权指令 (Ring 0),虚拟机管理器 (Hypervisor) 会捕获它,进行翻译,并执行一个安全的替代指令。
  • 优点:任何操作系统都可以不加修改地运行。
  • 缺点:开销大。

1.2 半虚拟化 (Para-virtualization, 如 Xen)

Guest OS 被修改以感知到自己已被虚拟化。

  • Hypercalls:Guest OS 不再尝试执行特权指令,而是通过特殊的 API 直接调用 Hypervisor。
  • 优点:开销较低。
  • 缺点:必须修改 Guest OS 内核。

1.3 硬件辅助虚拟化 (现代标准)

现代 CPU(Intel VT-x, AMD-V)具有内置的虚拟化支持。

  • VMX Root/Non-Root 模式:CPU 提供了一个硬件“陷阱”,自动处理特权指令。无需二进制翻译或修改内核。

2. 虚拟机管理器 (Hypervisor/VMM) 架构

虚拟机管理器 (VMM) 负责管理物理主机的 CPU、内存和 I/O 资源。

2.1 Type 1 (裸机型)

Hypervisor 直接运行在硬件上。

  • 示例:VMware ESXi, Xen, Microsoft Hyper-V。
  • 优点:性能高且安全隔离性好。

2.2 Type 2 (宿主型)

Hypervisor 作为应用程序运行在宿主操作系统 (Host OS) 之上。

  • 示例:VMware Workstation, Oracle VirtualBox。
  • 优点:易于使用。

2.3 KVM (内核级虚拟机)

KVM 非常独特。它通过使 Linux 内核成为“VMX Root”管理器,将其转变为 Type 1 Hypervisor。

  • QEMU:一个用户态程序,模拟“虚拟硬件”(磁盘、网络、BIOS),而 KVM 处理 CPU 和内存。

3. 硬件加速:MMU 与 I/O

3.1 内存:EPT (扩展页表)

在虚拟机中,存在两级内存转换:

  1. 客户机虚拟地址 -> 客户机物理地址
  2. 客户机物理地址 -> 宿主机物理地址
  • 没有加速时:Hypervisor 必须手动管理“影子页表 (Shadow Page Tables)”,这极其缓慢。
  • 有了 EPT/NPT:CPU 硬件在单次“页表行走”中同时处理两级转换。

3.2 I/O:SR-IOV 与 VT-d

  • VT-d (直接 I/O):允许虚拟机直接“拥有”一个物理硬件设备(如 GPU 或网卡),绕过 Hypervisor 以获得近乎原生的性能。
  • SR-IOV:允许单个物理设备向不同的虚拟机呈现为多个“虚拟功能 (Virtual Functions)”。

4. 容器技术:轻量级替代方案

容器并不虚拟化硬件。它们利用宿主内核中已有的功能来隔离用户态进程

4.1 Linux 命名空间 (Namespaces - “视图”隔离)

  • PID:容器看到的自己 PID 为 1。
  • NET:私有网络栈(拥有自己的 IP、路由表、防火墙)。
  • MNT:私有挂载点(无法看到宿主机文件)。
  • UTS:私有主机名。

4.2 控制组 (Cgroups v2 - “资源”隔离)

限制并统计资源使用(CPU 份额、内存限制、磁盘 I/O 限制)。

  • OOM Killer:如果容器超过其 Cgroup 内存限制,内核将杀掉它,同时保持宿主机和其他容器安全。

4.3 联合文件系统 (OverlayFS)

允许将多个目录合并为一个。

  • 分层架构:Docker 镜像由多个只读层组成,顶部有一个可写层。这使得镜像极其微小且高效。

5. 对比:虚拟机 vs 容器

特性虚拟机 (VM)容器 (Container)
隔离性硬件级 (强)进程级 (中)
客户机 OS每个 VM 都有完整 OS共享宿主内核
启动速度分钟级秒级
开销高 (每个 VM 一个完整内核)极低
内核版本可以不同必须与宿主相同

6. 容器编排 (Kubernetes)

在大规模集群中运行数以千计的容器时,手动管理是不可能的。

  • 调度器:根据资源可用性决定哪个物理节点应该运行 Pod。
  • 网络 (CNI):确保集群中的每个容器都有自己的 IP,并能与其他任何容器通信。
  • 存储 (CSI):当容器在节点间迁移时,动态地为其挂载持久化磁盘。

7. 虚拟化与容器调试工具

工具用途关键指标
virshKVM 管理列出、启动、停止和快照虚拟机
docker stats容器健康状况每个容器的实时资源占用
nsenter深度探测进入运行中容器的命名空间进行调试
crictl运行时用于 Kubernetes 容器运行时的底层工具
kubectl编排Kubernetes 集群的主要接口

8. 核心概念复习清单

  • 解释 Type 1 和 Type 2 Hypervisor 之间的区别。
  • EPT (扩展页表) 如何加速虚拟机内存访问?
  • Linux 内核在 KVM 虚拟化中扮演什么角色?
  • 对比“影子页表”与“硬件辅助分页”。
  • 为什么容器的开销比虚拟机低?

第 09 章结束。继续前往:第 10 章:Linux 基础