KVM、LXC 与 OpenVZ 对比:为什么我们只销售 KVM

内核隔离、不超售的内存、自定义内核,以及虚拟机内的 Docker:切分一台宿主机的三种方式背后的取舍。

C工CheapServ 工程团队作者 6 分钟阅读
一台服务器被分隔成若干相互隔离、发着光的隔间
本页目录6
  1. 切分一台宿主机的三种方式
  2. 在容器里您会失去什么
  3. 容器确实更有优势的地方
  4. 我们的 VPS 套餐是什么
  5. 如何判断您买到的是哪一种
  6. 坦诚小结

“VPS”这个词,在不同服务商那里指的是三种截然不同的东西:拥有独立内核的 KVM 虚拟机,与宿主机共享内核的 LXC 容器,或者出自一条比前两者都更古老的技术路线的 OpenVZ 容器。价目表上很少会写明到底是哪一种。我们只销售 KVM,本文会说明另外两种放弃了什么、在哪些方面确实更好,以及如何判断您买到的是哪一种。

切分一台宿主机的三种方式

KVM 是硬件虚拟化。宿主机运行 hypervisor;每个客户机在虚拟硬件上启动自己的内核,拥有专属的内存页,虚拟 CPU 映射到真实的物理核心上。客户机看不到宿主机和其他客户机,宿主机在没有客户机配合的情况下,也看不到客户机内部。

LXC(以及 Proxmox 和 LXD 下的同类方案)属于操作系统级虚拟化。所有容器共享宿主机的内核,并通过 namespace 和 cgroup 相互隔离。它更轻量,一秒钟就能启动,而且由于容器只占用自己实际用到的内存,宿主机可以在用户无感知的情况下超售内存。

OpenVZ 的思路与之相同,只不过用的是更老、打了大量补丁的内核,并配有自己的一套工具;它的现代继任者是 Virtuozzo。如今它在市场最底端依然很常见,因为与其他任何方案相比,它能让一台宿主机塞进更多的容器。

在容器里您会失去什么

  • 属于您自己的内核。不能用自定义内核,不能加载内核模块,宿主机不允许的 sysctl 参数也改不了。WireGuard、ZFS、使用某些存储驱动的 Docker、nftables 的部分特性,以及一切标明“需要 6.x 内核”的软件,都取决于宿主机运行的内核,而那往往已经是好几年前的版本。
  • 货真价实的内存。容器的内存只是对共享内存池设置的一个 cgroup 上限。服务商完全可以、也确实会卖出比宿主机实际拥有的更多的内存,赌的是不会每个人都把自己的那份用满。赌输的时候,您的进程会被一次与您无关的 OOM 杀掉。
  • 不打折扣的 Docker。嵌套容器需要特权标志或 user namespace 的变通手法,而许多宿主机会禁用这些。在 KVM 上,Docker 的运行方式与在您的笔记本电脑上完全一样。
  • 隔离性。宿主机上的一个内核漏洞,就是其上每一个容器的漏洞。KVM 客户机的攻击面是虚拟硬件,范围更小,也经过了更充分的审计。
  • Swap、文件系统和挂载。宿主机给容器什么,容器就只能用什么。您无法分区,无法使用其他文件系统,也无法挂载镜像。

容器确实更有优势的地方

密度与成本。一台宿主机如果运行 200 个 LXC 容器,而不是 40 个 KVM 客户机,就可以只收五分之一的价格;对于 95% 的时间都处于空闲的负载,比如静态站点、小型机器人、个人代理,这样的价格是公道的。启动只要一秒,而不是二十秒。内存开销几乎为零,所以“512 MB”的容器真有 512 MB 留给您的应用,而 KVM 客户机要拿出 100 MB 给自己的内核。

问题出在负载并不空闲的时候,或者服务商指望负载空闲、而它偏偏并不空闲的时候。主机论坛里满是对“steal time”和“随机 OOM 查杀”的抱怨,几乎全部来自被超售的容器。

我们的 VPS 套餐是什么

  • 运行在 Linux 宿主机上的 KVM:宿主机内核由我们掌控,客户机内核由您掌控。
  • 内存是独占的:一台宿主机上所有客户机的内存总和,永远不会超过宿主机的物理内存。不使用 balloon 驱动,也没有靠 swap 撑起来的客户机。
  • vCPU 是物理核心的份额,由公平调度器调度;套餐里的 vCPU 数量就是您能获得的并行度,并且允许所有 vCPU 持续 100% 满载运行。
  • 磁盘是每个客户机独立的 NVMe 额度,公布在价格页面上,由 hypervisor 强制执行,未使用的容量会归还到资源池。
  • 磁盘和网络使用 virtio 驱动;采用 UEFI 启动,支持任意发行版,并可通过控制台使用自定义 ISO。

这样做的结果是,本博客教程里的所有内容,从 WireGuard 中心节点到 Docker Compose 栈再到 ZFS,都不用事先问过我们就能正常使用。下单表单里之所以有自定义 ISO 选项,正是因为这是一台真正的虚拟机。

如何判断您买到的是哪一种

如果价目表上没有写明,可以在服务器里运行下面这些命令之一:

systemd-detect-virt       # kvm | lxc | openvz | none
cat /proc/1/environ | tr '\0' '\n' | grep -i container
uname -r                  # a 2.6 or 3.x kernel in 2025 means OpenVZ
ls /dev/kvm /boot/vmlinuz* 2>/dev/null   # present on KVM, absent in containers

在我们的任何一台服务器上,systemd-detect-virt 都会输出 kvm,而 uname -r 输出的则是您的发行版所安装的内核版本,因为内核是属于您的。

坦诚小结

KVMLXCOpenVZ
独立内核、模块、sysctl是否否
开箱即用的 Docker、WireGuard、ZFS是有时可以很少可以
宿主机可以超售内存只有借助 balloon 才行,而我们不使用很容易设计上就如此
启动时间10 到 20 s~1 s~1 s
每个客户机的内核开销~100 MB~0~0
持续负载下是否公平是取决于宿主机通常不行

如果只是一台大部分时间闲置的业余小机器,运营良好的 LXC 宿主机是笔不错的买卖。而对于任何丢了会让您心疼的东西,一台内存真正属于您的虚拟机,值得多花那一美元,这也是我们卖的最便宜的套餐依然是 KVM 的原因。

C工
CheapServ 工程团队

负责构建开通流水线、控制面板和存储层的工程师。

一分钟内部署您的第一台服务器。

以 BTC、ETH、XMR 或 USDT 充值,$25 起。余额永不过期,未使用的部分可退款。

立即注册