kvm 是内核级 type-1 hypervisor,依赖 cpu 硬件虚拟化,仅虚拟 cpu/内存,i/o 由用户态 qemu 模拟;容器是 os 级隔离,复用宿主机内核,通过 namespaces、cgroups 和 unionfs 实现轻量进程组隔离。

KVM 是内核级虚拟机监控器
KVM 把 Linux 内核变成一个 Type-1 Hypervisor,依赖 CPU 硬件虚拟化扩展(如 Intel VT-x、AMD-V)。它本身不模拟硬件,只负责 CPU 和内存的虚拟化;I/O 设备模拟由用户态的 QEMU 完成。一个虚拟机在宿主机上表现为一个普通 QEMU 进程,其 vCPU 是 Linux 调度器管理的线程,可绑定物理核、支持超分。
运行时 KVM 的 vCPU 切换于三种模式:
- 客户模式:执行 Guest OS 的非特权指令
- 内核模式:KVM 内核模块处理 VM Entry/Exit、特权指令和内存地址转换
- 用户模式:QEMU 处理设备模拟、磁盘读写、网络收发等 I/O 操作
容器是操作系统级隔离机制
容器不启动新内核,而是复用宿主机内核,通过 Linux 原生机制实现轻量隔离:
- Namespaces:为每个容器提供独立的 PID、网络、挂载点、用户 ID、IPC 等视图
- cgroups:限制并计量容器对 CPU、内存、IO、PID 数等资源的实际占用
- UnionFS(如 overlay2):以分层只读镜像 + 顶层可写层构成容器文件系统,共享基础层减少存储开销
容器本质是受约束的普通进程组,启动快、内存占用低、无虚拟化指令翻译开销,但无法运行非 Linux 内核的操作系统(如 Windows)。
隔离粒度与安全边界不同
KVM 提供硬件级隔离:每个虚拟机拥有独立内核、完整设备栈和专属内存空间,Guest OS 故障或内核漏洞不会直接影响其他虚拟机或宿主机。适合多租户云平台、异构系统共存、高合规要求场景。
容器共享宿主机内核,隔离在内核命名空间和 cgroups 层面完成。若容器逃逸利用内核漏洞(如脏牛、cve-2024-1086),可能危及整个宿主机和其他容器。因此生产环境需启用 seccomp、AppArmor/SELinux、rootless 模式、只读文件系统等加固手段。
资源模型与调度逻辑差异明显
KVM 中资源分配面向“虚拟机”:vCPU 数、内存大小、虚拟磁盘容量在创建时静态声明,由 Linux 进程调度器和 KVM 内核模块协同调度,支持热添加、NUMA 绑定、大页内存等高级特性。
容器资源由 cgroups 实时控制,更贴近应用视角:可按服务维度设置 CPU shares、memory limit、blkio weight;Kubernetes 等编排系统进一步将资源抽象为 request/limit,配合调度器做节点级弹性分配。这种细粒度、动态、面向服务的资源管理更适合微服务与 CI/CD 流水线。











