Featured image of post Proxmox LXC 容器:完整管理指南Featured image of post Proxmox LXC 容器:完整管理指南

Proxmox LXC 容器:完整管理指南

Proxmox VE 上 LXC 容器的完整指南。了解模板管理、非特权容器与特权容器、资源限制、绑定安装、备份和网络。

什么是LXC?

LXC(Linux 容器)是一种操作系统级虚拟化方法,它使用共享内核在单个主机上运行多个隔离的 Linux 系统。与完整虚拟机不同,LXC 容器共享主机操作系统内核,同时维护自己的文件系统、进程和网络堆栈。这种设计使它们极其轻便且启动速度快。

LXC 与虚拟机

LXC 容器和虚拟机之间的选择取决于您的隔离和性能要求:

特色LXC集装箱虚拟机(KVM/QEMU)
启动时间毫秒到秒秒到分钟
内存开销最小(仅应用程序内存)每个来宾的完整操作系统内存
磁盘空间100 MB–1 GB2–10+ GB
内核共享主机内核独立内核
隔离过程级硬件级
最适合Web 服务器、微服务、开发环境多租户、不同操作系统内核、完全隔离

下载模板

Proxmox 通过 pveam 提供预构建的容器模板。要列出来自 TurnKey Linux 和其他的可用模板:

pveam update
pveam available --section turnkeylinux

将模板下载到本地存储:

pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst

创建容器

从 CLI 或 Web UI 创建容器。基本参数包括主机名、密码、存储卷和网络配置:

pct create 100 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
  --hostname web01 \
  --password securePass123 \
  --storage local-lvm \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --unprivileged 1
pct start 100

密钥标志控制 root 密码、SSH 密钥、DNS 服务器和 CPU/内存分配。

非特权容器与特权容器

非特权容器通过 subuidsubgid 范围使用 UID/GID 映射运行,将容器内的根 (UID 0) 映射到主机上的高编号非特权 UID。这可以防止容器根目录具有主机根目录访问权限:

# Default mapping: container UID 0 maps to host UID 100000
# /etc/subuid contains: root:100000:65536

特权容器在主机上作为真正的 root 运行。它们提供更好的文件系统兼容性,但安全性较低。

关键权衡: 非特权容器无法挂载大多数文件系统(NFS、fuse、主机目录的绑定挂载),因为内核会阻止非特权挂载。如果您需要在容器内安装 NFS 或 FUSE,请使用特权容器并使用 AppArmor 限制访问。

资源限制

Proxmox 使用 cgroup 对容器实施资源限制:

资源参数示例
CPU配额占位符_050(一个核心的 50%)
CPU 核心占位符_0占位符_1
内存占位符_02048 (MB)
交换占位符_0512 (MB)
磁盘 IOPS占位符_0100 (MB/秒)

在创建时或通过 pct set 设置限制:

pct set 100 --memory 2048 --swap 512 --cpulimit 50 --cores 2

绑定坐骑

绑定挂载与容器共享主机目录。对于非特权容器,您必须使用 map 选项正确映射 UID/GID:

pct set 100 --mp0 /mnt/storage/data,mp=/srv/data,acl=1

如果需要根挤压映射,请在 /etc/pve/lxc/100.conf 中添加挂载点条目:

mp0: /mnt/storage/data,mp=/srv/data,rootuid=1000,rootgid=1000

对于特权容器,绑定挂载无需 UID 重新映射即可工作,从而使共享存储变得更简单。

快照和克隆

快照以最小的空间开销 (COW) 捕获某个时间点的容器状态:

pct snapshot 100 pre-upgrade --description "Before PHP 8.3 upgrade"

列出和回滚快照:

pct listsnapshot 100
pct rollback 100 pre-upgrade

从模板或快照克隆容器以进行测试:

pct clone 100 101 --hostname staging-web

组网方式

容器支持三种网络模型:

  • 桥接 (vmbr) — 容器显示为物理网络上的设备,通过 DHCP 获取自己的 MAC 和 IP。默认且最常见。
  • 路由 — 容器使用主机后面的虚拟网络,并具有 iptables 转发功能。当您控制上游路由时很有用。
  • NAT — 容器在主机后面获取一个私有 IP,伪装到物理网络。简单但没有端口转发就没有入站访问。

备份与恢复

使用 vzdump 实现带有静默的一致容器备份:

vzdump 100 --mode suspend --compress zstd --storage backup-store

要从备份恢复容器:

pct restore 200 /var/lib/vz/dump/vzdump-lxc-100-2024_05_22-00_00_00.tar.zst \
  --storage local-lvm

实际用例

  • Web 服务器 — 轻量级 Nginx/Apache 容器,每个容器都是独立的。
  • 数据库 — 容器中的 MySQL/PostgreSQL,绑定挂载到 ZFS 数据集以进行快照。
  • Docker-in-LXC — 使用 nesting=1 在特权容器中工作。由于 Docker 自己的隔离模型与 LXC cgroups 冲突,不建议用于生产。