PVE 系统是什么:Proxmox VE 虚拟化平台功能与适用场景
PVE 系统就是 Proxmox VE,一个基于 Debian 的开源虚拟化平台:用 KVM 跑完整虚拟机,用 LXC 跑轻量容器,集群、高可用、ZFS 和 Ceph 存储、备份都内置,浏览器打开 8006 端口就能管理。软件本身免费,付费订阅买的是企业软件源和技术支持。
PVE 系统就是 Proxmox VE(Proxmox Virtual Environment),由奥地利的 Proxmox Server Solutions 公司开发,2008 年发布首个版本,以 AGPLv3 开源。它是一个装在物理服务器上的完整虚拟化平台:底层是 Debian,用 KVM/QEMU 运行完整的虚拟机(Linux、Windows、BSD 都能装),用 LXC 运行共享宿主内核的轻量容器,集群、高可用、ZFS 和 Ceph 存储、备份、防火墙、权限管理全部内置,浏览器访问 8006 端口就能管理一台或整个集群。软件本身免费,所有功能不需要许可证;付费订阅买的是经过更多测试的企业软件源和官方技术支持。在机房里,它常见于两种用法:独服或母机上切虚拟机对外出租,也就是俗称的“开小鸡”;以及用 3 台以上服务器搭一个跑内部系统的小型私有云。
PVE 系统由什么组成:Debian、KVM 和 LXC
| 组成部分 | 是什么 | 在 PVE 里怎么体现 |
|---|---|---|
| Debian | 底层操作系统,PVE 9 基于 Debian 13,PVE 8 基于 Debian 12 | 用 apt 升级,熟悉 Linux 就能维护宿主 |
| Proxmox 内核 | 以 Ubuntu 内核源码为基础定制,内置 ZFS 支持 | 硬件兼容性跟随 Linux 内核,没有单独的兼容列表 |
| KVM + QEMU | 硬件辅助的完整虚拟化 | 命令 qm,配置文件 /etc/pve/qemu-server/<VMID>.conf |
| LXC | 系统级容器,与宿主共用内核 | 命令 pct,配置文件 /etc/pve/lxc/<VMID>.conf |
| pmxcfs + corosync | 集群文件系统,挂载在 /etc/pve,由 corosync 在节点间同步 | 命令 pvecm,任何节点改的配置全集群可见 |
| pveproxy、pvedaemon | Web 界面和 REST API | 8006 端口,命令行用 pvesh 调用同一套 API |
所谓“PVE 虚拟机”,就是一台由 QEMU 进程运行的 KVM 虚拟机:每台有一个从 100 开始的编号(VMID),配置是一个文本文件,磁盘放在你添加的某个存储上。在宿主上它就是一个普通进程,命令行里带着 -id 101 这样的编号,所以出现性能问题时,top、iostat 这些 Linux 工具照样能用。
pveversion -v | head -n 5 # PVE 及关键组件版本
qm list # 所有 KVM 虚拟机及运行状态
pct list # 所有 LXC 容器
cat /etc/pve/qemu-server/101.conf # 101 号虚拟机的完整配置
ps -ef | grep '[k]vm -id 101' # 这台虚拟机对应的 QEMU 进程
systemctl status pveproxy pvedaemon pve-cluster --no-pager
核心功能:集群、高可用、存储与备份
集群:不需要单独的管理服务器
PVE 集群没有主节点,任意一台节点的 Web 界面都能管理整个集群,配置通过 corosync 实时同步到每个节点的 /etc/pve。这一点和 vSphere 不同:ESXi 要集中管理必须另外部署 vCenter,PVE 把管理平面分布在每个节点上。
pvecm create dc1-cluster # 在第一台上创建集群
pvecm add 10.10.40.11 # 在要加入的节点上执行,IP 填集群里已有的节点
pvecm status # 看 Quorate 是否为 Yes,以及投票数
三条规矩:加入集群的节点上不能已有虚拟机;corosync 对延迟敏感,节点放在同一机房的低延迟网络里,最好给它单独一个网口或 VLAN,不要和存储、迁移流量挤在一起;集群靠多数票工作,失去多数的一侧配置变为只读。
高可用:节点宕机后在别处重启虚拟机
用 ha-manager add vm:101 --state started 把虚拟机交给 HA 管理后,所在节点宕机时,它会在其他节点上自动启动。前提有三个:至少 3 个节点(或 2 个加 QDevice);虚拟机磁盘在共享存储上,或者用 ZFS 存储复制定期同步到其他节点;节点有看门狗,失去多数票的节点会自我隔离(重启),确保同一台虚拟机不会在两个节点上同时运行。HA 是“重启”不是“不中断”,切换期间业务会停几分钟。
存储:从本地 ZFS 到分布式 Ceph
| 存储类型 | 节点间共享 | 快照 | 适合 |
|---|---|---|---|
| 目录(local) | 否 | 磁盘为 qcow2 格式时支持 | ISO、模板、备份文件 |
| LVM-thin | 否 | 支持 | 有硬件 RAID 卡的单机 |
| ZFS | 否,可用存储复制同步 | 支持 | 单机,或两三台用复制做准高可用 |
| Ceph RBD | 是 | 支持 | 3 台以上的超融合集群 |
| NFS | 是 | 磁盘为 qcow2 格式时支持 | 已有 NAS |
| iSCSI、FC 上的 LVM | 是 | 不支持或受限 | 已有 SAN |
两种在机房里常用的组合:
- ZFS 加存储复制:每台节点用本地 NVMe 做 ZFS,关键虚拟机每 15 分钟(默认值,最短 1 分钟)异步复制到另一台。节点故障时 HA 用最近一次复制的数据启动,最多丢失一个复制间隔的数据,换来的是不需要共享存储。
- Ceph 超融合:在 Web 界面里就能部署,每台节点的硬盘作为 OSD,存储池默认 3 副本。假设 3 台节点每台 4 块 3.84 TB NVMe,裸容量约 46 TB,3 副本后可用约 15 TB,再留 20% 余量,规划时按 12 TB 用。Ceph 流量走单独的网络,万兆起步,25 GbE 更从容。
备份:vzdump 与 Proxmox Backup Server
内置的 vzdump 支持三种模式:snapshot(不停机,默认推荐)、suspend(短暂挂起)、stop(关机备份,一致性最好)。在“数据中心 → 备份”里建定时任务,保留策略按 keep-daily、keep-weekly 设置。数据量大了以后,可以接入同公司的 Proxmox Backup Server(PBS):增量备份、跨虚拟机去重、客户端加密、定期校验,Web 端口 8007。
vzdump 101 102 --storage pbs01 --mode snapshot --prune-backups keep-daily=7,keep-weekly=4
qmrestore /var/lib/vz/dump/vzdump-qemu-101-2026_12_20-02_00_01.vma.zst 151 # 本地备份文件恢复为 151 号
Proxmox VE 是否免费:免费使用与企业订阅的区别
免费。AGPLv3 不限制用途,商业环境、生产环境都可以合法使用,所有功能都在,不存在“免费版阉割功能”的问题。订阅按 CPU 插槽、按年计费,分 Community、Basic、Standard、Premium 四档,区别如下:
| 项目 | 不订阅 | 订阅 |
|---|---|---|
| 功能 | 全部 | 全部,订阅不解锁额外功能 |
| 软件源 | pve-no-subscription:更新来得早,测试相对少,官方定位为测试和非生产用途 | pve-enterprise:经过更多测试和验证的更新 |
| 技术支持 | 社区论坛 | Community 档只含企业源;Basic 起带工单支持,档位越高工单越多、响应越快 |
| 登录界面 | 每次登录弹出“无有效订阅”提示,不影响使用 | 无提示 |
装好后系统默认启用的是企业源,没有订阅时 apt update 会报 401 错误,需要改用免费源:在 Web 界面的“节点 → 更新 → 软件仓库”里禁用 enterprise,添加 No-Subscription。PVE 9 的软件源采用 deb822 格式,等价的做法是在 /etc/apt/sources.list.d/pve-enterprise.sources 里加一行 Enabled: no,再新建免费源文件:
# /etc/apt/sources.list.d/proxmox.sources
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
另外还有一个测试源(PVE 9 里叫 pve-test,PVE 8 叫 pvetest),主要供开发者测试新功能,生产环境不要启用。用免费源跑生产的团队不少,关键是自己承担验证:先在一台非关键节点上升级,观察几天再升其他节点。
PVE 和 ESXi 的定位差异
| 对比项 | Proxmox VE | VMware ESXi / vSphere |
|---|---|---|
| 底层 | Debian 加 KVM、LXC,开源 | 自研 VMkernel,闭源 |
| 授权 | 免费;可选订阅按 CPU 插槽计 | 生产需订阅,按 CPU 核心计,每颗至少 16 核 |
| 集中管理 | 内置,任一节点即可管理集群 | 需要单独部署 vCenter |
| 高可用、在线迁移 | 内置 | 依赖 vCenter 和对应套件 |
| 容器 | 原生 LXC | 不直接提供,容器要跑在虚拟机里 |
| 硬件兼容 | 跟随 Linux 内核,杂牌和老硬件也多能用 | 只认兼容列表里的硬件 |
| 备份 | 内置 vzdump,另有 PBS | 依赖第三方备份软件 |
| 生态 | 第三方软件的支持在增加,但仍少于 vSphere | 备份、监控、灾备等商业生态成熟 |
| 常见场景 | 中小机房、独服开小鸡、实验室、小型私有云 | 企业数据中心、已有 vSphere 体系的环境 |
简单说:已经围绕 vCenter 建好流程、依赖 vSAN 或 NSX 的环境留在 vSphere;新建的小型虚拟化平台、对外出租的母机、不在 VMware 兼容列表里的硬件,PVE 的门槛和成本都更低。
独服和机房母机用 PVE 开小鸡
先算一台母机能开多少台
母机能开多少台,由内存、磁盘、CPU 三者中最紧的那个决定。假设一台母机为 2 × 16 核 32 线程(共 64 线程)、256 GB 内存、4 块 3.84 TB NVMe 组 ZFS RAID10,套餐为 4 核、8 GB、100 GB:
| 资源 | 可分配 | 按套餐能开 |
|---|---|---|
| 内存(不超分) | 256 − 宿主预留 8 − ZFS 读缓存 16 = 232 GB | 232 ÷ 8 = 29 台 |
| 磁盘 | RAID10 约 7.68 TB,留 20% 余量约 6.1 TB | 6100 ÷ 100 = 61 台 |
| CPU(按 3 倍超分) | 64 × 3 = 192 个 vCPU | 192 ÷ 4 = 48 台 |
瓶颈是内存,这台母机按 29 台规划。ZFS 读缓存(ARC)的 16 GB 来自 PVE 8.1 起安装程序写入 /etc/modprobe.d/zfs.conf 的默认上限:内存的 10%,最多 16 GiB;8.1 之前装的系统沿用 ZFS 自身的默认上限(内存的 50% 或更多),开小鸡前要自己调小。CPU 可以超分,因为小鸡很少同时跑满;内存超分在出租业务里风险大,宿主内存不足时会有虚拟机被系统强制结束。
IP 也要提前算:29 台小鸡要 29 个公网 IP。一个 /27 有 32 个地址,去掉网络地址、广播地址和网关剩 29 个,宿主再占 1 个只剩 28 个,差一个。要么把宿主的管理地址放到内网或管理网段,要么申请 /26。
KVM 还是 LXC
| 对比项 | KVM 虚拟机 | LXC 容器 |
|---|---|---|
| 隔离 | 独立内核,硬件虚拟化隔离 | 与宿主共享内核,靠命名空间和 cgroup 隔离 |
| 能装的系统 | Linux、Windows、BSD | 只有 Linux |
| 资源开销 | 每台要单独预留内存 | 开销小,同样的母机能开更多 |
| 客户能做的事 | 换内核、装 Docker、加载内核模块 | 不能换内核,跑 Docker 要开启嵌套等选项且有限制 |
| 适合 | 对外出租的常规 VPS | 自用的内部服务;对外出租前要评估隔离风险 |
对外出租时,客户会做什么无法预料,KVM 的隔离更稳妥;LXC 更适合自己的 DNS、监控、反向代理这类内部服务。
用模板和 cloud-init 批量开机
逐台装系统太慢,标准做法是用发行版提供的云镜像做一个模板,开机时由 cloud-init 注入 IP、密码和 SSH 公钥:
# 一次性:用 Debian 13 云镜像做成 9000 号模板(镜像文件名以实际下载为准)
qm create 9000 --name debian13-tpl --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single
qm set 9000 --scsi0 local-zfs:0,import-from=/root/debian-13-genericcloud-amd64.qcow2
qm set 9000 --ide2 local-zfs:cloudinit --boot order=scsi0 --serial0 socket --vga serial0
qm template 9000
# 每开一台:完整克隆,改规格,注入地址和公钥,扩容磁盘,网卡限速 100 Mbps
qm clone 9000 201 --name vps201 --full
qm set 201 --cores 4 --memory 8192 --ipconfig0 ip=203.0.113.21/26,gw=203.0.113.1 --sshkeys /root/keys/vps201.pub
qm resize 201 scsi0 100G
qm set 201 --net0 virtio,bridge=vmbr0,rate=12.5,firewall=1
qm start 201
网卡的 rate 单位是 MB/s,12.5 MB/s 约等于 100 Mbps;磁盘也可以用 iops_rd、iops_wr、mbps_rd、mbps_wr 限制读写,防止一台小鸡压满整台母机的硬盘。
防止小鸡盗用别人的 IP
桥接模式下,客户在小鸡里把 IP 改成别人的,会造成地址冲突。PVE 防火墙的虚拟机选项里有两个开关:MAC filter(默认开启,禁止伪造 MAC)和 IP filter(默认关闭)。开启 IP filter 并在名为 ipfilter-net0 的 IPSet 里写入分配给它的地址,这台小鸡就只能用这些 IP 发包。前提是数据中心级和虚拟机网卡上的防火墙都已启用。启用数据中心防火墙前,先建一个名为 management 的 IPSet 写入运维网段(它会自动放行这些地址访问 8006、22 等管理端口),并保持一个 SSH 会话不断开,以免把自己挡在外面:
# /etc/pve/firewall/201.fw
[OPTIONS]
enable: 1
ipfilter: 1
[IPSET ipfilter-net0]
203.0.113.21
机房防火墙要放行的端口
| 端口 | 协议 | 用途 | 放行范围 |
|---|---|---|---|
| 8006 | TCP | Web 管理界面与 API | 只对运维网段开放 |
| 22 | TCP | SSH,集群内部操作也会用到 | 运维网段和集群节点之间 |
| 5900–5999 | TCP | 网页 VNC 控制台 | 同 8006 |
| 3128 | TCP | SPICE 代理 | 用 SPICE 客户端时 |
| 5405–5412 | UDP | corosync 集群通信 | 只在集群节点之间 |
| 60000–60050 | TCP | 在线迁移的内存和本地磁盘数据 | 只在集群节点之间 |
| 3300、6789、6800–7300 | TCP | Ceph 监视器与 OSD | 只在 Ceph 网络内 |
| 8007 | TCP | Proxmox Backup Server | PVE 节点到备份服务器 |
8006 对整台母机拥有完全控制权,不能直接暴露在公网。
在管理系统里怎么落地
母机开小鸡,最容易出问题的是地址台账和交换机侧的绑定。在 IP 地址管理 里把整段地址(例如上面的 /26)分配给这台母机并指定主 IP,这段地址就不会在开通其他服务器时被自动分出去,哪段地址在哪台母机上一查便知。交换机侧要留意:ARP 绑定会把 IP 和网卡的 MAC 锁在一起,而桥接模式下每台小鸡用自己的 MAC 收发。如果这段地址按母机网卡的 MAC 做了绑定,或者端口只允许母机的 MAC 通过,小鸡的流量就可能被交换机丢弃,表现为 IP 配好了却不通。处理办法有两种:按小鸡的实际 MAC 调整这些地址的绑定,或者改用路由方式,把整段地址路由到母机 IP 上,由母机转发。母机本身的系统,可以在 DCIM 的重装镜像中直接选择 Proxmox VE(见 DCIM 机房管理系统),由机房里的从节点就近完成安装。
常见问题
PVE 的管理界面怎么登录?
浏览器打开 https://服务器IP:8006,用 root 账号、认证域选 Linux PAM 登录。默认证书是安装时生成的自签名证书,浏览器会提示不安全,可以在节点的证书设置里上传正式证书,或用内置的 ACME 功能申请 Let's Encrypt 证书。
两台 PVE 能组集群吗?
能组,但两台各 1 票,任何一台宕机,剩下的一台都拿不到多数票,不能启动或修改虚拟机。解决办法是在集群外找一台机器(小虚拟机也可以)安装 corosync-qnetd 作为 QDevice,集群节点安装 corosync-qdevice 后执行 pvecm qdevice setup 加上它的 IP,凑出第 3 票。
不在同一个集群的两台 PVE 之间怎么迁移虚拟机?
通用做法是备份恢复:源主机用 vzdump 备份,把备份文件拷到目标主机后用 qmrestore 恢复;两边接入同一台 Proxmox Backup Server 时,在目标主机直接从备份服务器恢复。命令行的 qm remote-migrate 也支持跨集群迁移,官方标注为实验性功能,以当前文档为准。