PVE 创建 LXC 容器全流程,以及它与 KVM 虚拟机的区别
用 Proxmox VE(PVE)的时候,创建工作负载有两个入口:右上角的「创建虚拟机」(KVM)和「创建 CT」(LXC)。两者看起来只是向导页面不一样,实际上底层原理差别很大,内存、磁盘、稳定性的表现也都不同。
这篇文章先介绍一下 LXC 的创建流程(基于 PVE 9.1.1 的中文界面),再系统对比 LXC 和 KVM。
一、先搞清楚 LXC 和 KVM 是什么
| LXC | KVM | |
|---|---|---|
| 本质 | 容器,和宿主机共用同一个内核 | 完整虚拟机,有独立的内核和虚拟硬件 |
| 隔离方式 | namespace + cgroup | 硬件虚拟化(QEMU + KVM) |
| 能运行的系统 | 只能是 Linux(共用宿主机内核) | Linux、Windows、BSD 等几乎都行 |
| 启动速度 | 秒级 | 要完整走一遍开机流程 |
| 资源开销 | 很小 | 相对较大 |
一句话概括:LXC 是”轻量级的隔离环境”,KVM 是”一台完整的虚拟电脑”。
二、创建 LXC 容器的完整流程
点击右上角的「创建 CT」,会打开创建向导,顶部依次是:常规 → 模板 → 磁盘 → CPU → 内存 → 网络 → DNS → 确认。
1. 常规
| 选项 | 说明 |
|---|---|
| 节点 | 创建到哪个 PVE 节点,单机环境只有一个 |
| CT ID | 容器的唯一编号,PVE 会自动给出下一个可用编号(例如 101),虚拟机和容器共用同一套编号 |
| 主机名 | 容器的 hostname,必填 |
| 资源池 | 可选,用来给一批容器或虚拟机分组、做权限管理 |
| 无特权的容器 | 建议保持勾选。容器里的 root 会被映射为宿主机上的普通用户,安全性更高 |
| 嵌套 | 勾选后容器里可以再跑 Docker 之类的东西,需要的话保持勾选 |
| Add to HA | 加入高可用,单机环境不用管 |
| 密码 / 确认密码 | 容器 root 用户的密码,必填(和 SSH 公钥二选一或都填) |
| SSH 公钥 | 可粘贴公钥,也可以点「加载SSH密钥文件」导入,之后可免密登录 |
关于「无特权的容器」:它安全,但访问宿主机设备、挂载某些文件系统时会有权限限制。如果必须用特权容器,要清楚它的风险。
2. 模板
LXC 不是用 ISO 安装系统,而是从模板解压出一个根文件系统。
- 选择存储(通常是
local)和模板文件,例如debian-12-standard、ubuntu-24.04-standard - 如果下拉列表里没有模板,需要先下载:在左侧选中存储(如
local)→ CT 模板 → 模板,选择想要的系统点击下载 - 模板文件名里的版本号会随时间更新,以你实际看到的为准
3. 磁盘
- 选择存储位置,设置根磁盘大小(GiB)
- 要点:LXC 的磁盘只能调大,不能调小,所以不用一开始给太多,用多少给多少,之后再扩
4. CPU
- 设置核数,这是限制容器最多能用几个核
- 同样是上限,不是独占,容器空闲时不会占用这些核
- 之后可以在线修改
5. 内存
- 内存(MiB):内存上限
- 交换空间(MiB):容器的 swap 额度,可以设为 0 或较小的值
这里是 LXC 和 KVM 最大的区别之一:LXC 的内存本质是 cgroup 的上限,不会预先占用,用多少占多少,释放后宿主机能立刻拿回去(详见下文对比)。
6. 网络
- 名称:容器内的网卡名,默认
eth0 - 桥接:默认
vmbr0,也就是和宿主机在同一个局域网 - IPv4:选择
DHCP(由路由器分配)或静态(手动填 IP/CIDR 和网关) - IPv6、VLAN 标签、防火墙按需设置
建议在路由器里给容器做 DHCP 保留,或者直接设静态 IP,方便以后固定访问。
7. DNS
- 默认「使用主机设置」就行
- 也可以手动指定 DNS 域和 DNS 服务器
8. 确认
- 检查所有配置是否正确
- 勾选「创建后启动」可以创建完立刻开机
- 点击「完成」,在底部任务栏里能看到创建任务,状态为 OK 就成功了
三、命令行创建(可选)
如果想批量创建或写成脚本,可以直接用 pct:
# 创建容器 101(模板文件名请以实际下载的为准)pct create 101 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \ --hostname demo \ --memory 2048 \ --swap 512 \ --cores 2 \ --rootfs local-lvm:8 \ --net0 name=eth0,bridge=vmbr0,ip=dhcp \ --unprivileged 1 \ --features nesting=1 \ --password \ --start 1创建后常用的管理命令:
pct start 101 # 启动pct stop 101 # 停止pct enter 101 # 直接进入容器的 shellpct set 101 --memory 4096 # 在线调整内存上限pct config 101 # 查看配置四、LXC 与 KVM 的核心区别
1. 内存:上限 vs 向宿主机申请
LXC
- 设置的内存是 cgroup 的上限(
memory.max) - 容器启动时不会预先占用,用多少占多少,释放后宿主机立刻拿回
- 宿主机不会主动”抽走”容器的内存,所以没有 Ballooning 那种因为被回收而死机的问题
- 超过上限时,内核先回收容器自己的缓存,不够再触发 cgroup OOM,只会杀容器里的进程,不会拖垮宿主机
KVM
- 虚拟机有独立的内核,宿主机看到的只是 QEMU 进程占用的内存
- 客户机用过的内存(包括缓存)QEMU 会一直占着,即使客户机已经释放,所以 PVE 里的内存用量常常偏高,甚至接近 100%
- 想让内存可回收需要开启 Ballooning,但这个功能在某些场景下容易引发卡死(OOM、驱动问题、与 PCI 直通不兼容等),稳定性优先的话,很多人会选择关闭
2. 内存可见性
| LXC | KVM | |
|---|---|---|
| PVE 里显示的内存 | 实时、准确 | 默认只是 QEMU 进程占用 |
| 想看客户机内部真实用量 | 不需要额外配置 | 需要 QEMU Guest Agent,或在虚拟机内部监控 |
建议:KVM 虚拟机安装并启用 QEMU Guest Agent。它常驻内存只有几 MB 到十几 MB,对内存几乎没有影响,却能带来更准确的状态显示、IP 显示、正常关机和一致性备份。
3. 热调整
| LXC | KVM | |
|---|---|---|
| 修改内存 | 在线生效,无需重启 | 通常需要关机再开机(内存热插拔配置较麻烦) |
| 修改 CPU 核数 | 在线生效 | 视配置而定 |
| 扩容磁盘 | 在线可调大 | 可调大,客户机内还要再扩分区和文件系统 |
| 缩小磁盘 | 不支持 | 同样不建议 |
创建时设错了也不用慌,LXC 随时都能改。
4. 隔离性与兼容性
- KVM 隔离更彻底:拥有独立内核,一个虚拟机的内核崩溃不会影响其他。可以运行 Windows、可以安装不同内核版本,也支持显卡、HBA 等 PCI 直通
- LXC 隔离相对弱:所有容器共用宿主机内核,如果宿主机内核出问题,所有容器一起受影响。只能运行 Linux,容器里也不能随意换内核、加载内核模块
- 需要内核级功能的软件(某些 VPN、需要特殊内核模块的程序等)在 LXC 里可能跑不起来或需要额外配置
5. 资源占用与启动速度
- LXC 没有虚拟硬件层,也不需要完整开机流程,CPU 和内存开销很小,通常几秒就能启动
- KVM 需要模拟硬件、引导系统,开销更大,但换来了更完整的兼容性
6. 备份与迁移
- 两者都支持 PVE 自带的备份(vzdump)和快照,用法基本一致
- LXC 的备份体积通常更小、速度更快
- KVM 的备份可配合 Guest Agent 做一致性冻结
五、怎么选?
适合用 LXC 的场景
- 轻量级 Linux 服务:Nginx、数据库、各类 Web 应用、DNS、监控、下载工具等
- 追求资源利用率,想在一台机器上跑很多个服务
- 需要频繁调整内存、CPU,不想重启
适合用 KVM 的场景
- 需要运行 Windows 或其他非 Linux 系统
- 需要独立内核、特殊内核模块
- 需要 PCI 直通(显卡、网卡、HBA 等)
- 对安全隔离要求高,不放心共用内核
一个简单的经验:能用 LXC 的 Linux 服务就用 LXC,需要完整系统或强隔离时再用 KVM。
总结
- LXC 创建流程简单:常规 → 模板 → 磁盘 → CPU → 内存 → 网络 → DNS → 确认
- LXC 的内存、CPU 都是上限,按需使用,在线可调;磁盘只能扩不能缩
- KVM 是完整虚拟机,内存默认被 QEMU 占住不归还,要看真实用量需要 Guest Agent
- Ballooning 收益不稳定、坑多,稳定优先可以关闭,只保留 Guest Agent
- 轻量 Linux 服务选 LXC,Windows、直通、强隔离选 KVM
两者并不是谁取代谁,在同一台 PVE 上混用,才是最合理的方式。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
记忆转储