并非每台 VPS 都是以同样方式构建的。底层的虚拟化技术决定了你的服务器隔离程度、可以运行哪些软件以及性能表现。你最常见到的两个名称是 KVM 和 OpenVZ,此外还有 LXC。
构建虚拟服务器的两种方式
完全虚拟化(KVM)为每位客户提供拥有独立内核的完整虚拟机。虚拟机监控程序划分硬件,你的服务器表现得就像一台真正的计算机。
容器虚拟化(OpenVZ、LXC)让所有客户共享主机的内核。每个容器看到的是自己的文件和进程,但与邻居运行在同一个内核上。
并排对比
| KVM | OpenVZ / LXC | |
|---|---|---|
| 内核 | 你自己的 | 与主机共享 |
| 隔离性 | 强 | 较弱 |
| 运行 Docker、WireGuard、自定义内核模块 | 可以 | 通常受限或不可能 |
| 运行 Windows | 可以 | 不可以 |
| 内存保证 | 固定并预留 | 可能超售(“可突发”) |
| 开销 | 小 | 最小 |
为什么 KVM 是更稳妥的选择
- 软件由你选择。Docker、VPN、nftables 等防火墙以及需要加载内核模块的工具,无需征得许可就能正常工作。
- 真实的内存。你购买的内存会分配给你的机器。容器主机有时会出售超过实际存在的内存,并寄希望于客户不会全部用完。
- 更好的隔离。邻居虚拟机中的故障或攻击影响到你的可能性要小得多。
- 任意操作系统。Linux 发行版、BSD 和 Windows 都可以原样运行。
容器仍然适用的场景
容器启动快、浪费少,这就是主机商把它们用于非常便宜的套餐的原因,也是你在自己的 VPS 内通过 Docker 使用它们的原因。对于不需要内核提供任何特殊功能的简单工作负载,它们完全够用。
如何检查你用的是哪种
systemd-detect-virt
lscpu | grep -i hypervisor
cat /proc/user_beancounters # exists only on OpenVZ
第一条命令中出现 kvm 表示完全虚拟化。如果最后一个文件存在,则说明你用的是 OpenVZ。
常见问题
KVM 比 OpenVZ 更好吗?
对大多数用途来说是的。KVM 为每台 VPS 提供独立内核和更强的隔离,因此可以运行任意操作系统和 Docker。OpenVZ 共享主机内核,限制更多。
可以在 OpenVZ 上运行 Docker 吗?
通常不行,或只能在受限条件下运行,因为容器共享主机内核。对于 Docker,KVM 是更稳妥的选择。
KVM 更贵吗?
略贵一些,因为资源分配更严格,但隔离性和兼容性通常物有所值。