Featured image of post Proxmox VE 虚拟机管理:从创建到优化Featured image of post Proxmox VE 虚拟机管理:从创建到优化

Proxmox VE 虚拟机管理:从创建到优化

Proxmox VE 虚拟机管理完整指南。了解 VM 创建、VirtIO 驱动程序、Qemu Guest Agent、cloud-init 模板、导入/导出和性能调整。

逐步创建虚拟机

Proxmox VE 提供了用于创建 VM 的引导向导,可通过 创建 VM 的 Web UI 或通过 qm CLI 工具进行访问。该向导将逐步完成八个配置页面。

一般的

设置唯一的 VM ID(整数,通常从 100 开始)和描述性名称。该名称不会影响访客网络——它纯粹是为了识别。 (可选)选择资源池来组织相关虚拟机。

操作系统

从本地存储或上传的文件中选择 ISO 映像。如果没有可用的 ISO,请通过 Web UI 在 local (pve) → ISO Images → Upload 下上传一个 ISO。对于 Linux 客户机,安装程序会自动检测操作系统类型。对于 Windows,明确选择 Microsoft Windows 作为来宾操作系统以启用最佳默认值。

系统

选择 显卡SCSI 控制器。对于现代客人,请使用:

组件推荐另类
BIOSSeaBIOS(默认)OVMF(UEFI)
机器类型q35i440fx
SCSI 控制器VirtIO SCSI 单LSI 53C895A
Qemu代理启用(选中)已禁用

SeaBIOS 与 OVMF/UEFI:SeaBIOS 是一种传统 BIOS,适用于几乎所有操作系统。 OVMF 提供 UEFI 支持,这是某些配置中安全启动和从 NVMe 驱动器启动所需的。如果需要 UEFI,请切换到 OVMF 并添加 EFI 磁盘。许多现代 Linux 发行版(Ubuntu 22.04+、RHEL 9+)在 UEFI 下安装速度更快。

勾选 Qemu Agent 以启用主机和来宾之间的通信,以实现正常关闭、快照静默和 IP 地址报告。

磁盘

磁盘配置对于性能至关重要。 Proxmox 支持三种总线类型:

巴士类型性能功能支持使用案例
虚拟IO最佳TRIM、丢弃、异步 IOLinux 来宾(默认选择)
SATA广泛的操作系统支持较旧的操作系统,兼容性
IDE可怜最大兼容性旧版操作系统(Windows XP 等)

对于生产工作负载,将缓存模式设置为写回(无缓存)。启用放弃以允许来宾回收精简配置存储上未使用的空间。 SSD 仿真 标志告诉来宾操作系统将磁盘视为 SSD,这可以改进 I/O 调度。

中央处理器

指定插槽和核心的数量。 Proxmox 将 vCPU 总数显示为 sockets * cores。对于大多数工作负载,将 sockets 设置为 1 并分配核心。将 type 设置为 host 以公开主机 CPU 功能集 - 这可以最大限度地提高性能,但会阻止实时迁移到不同的硬件。使用 kvm64qemu64 实现迁移兼容性。

当来宾拥有的 vCPU 数量多于单个物理 NUMA 节点时,启用 NUMA。 Proxmox 会自动将内存固定到正确的节点。

记忆

以 MiB 或 GiB 为单位分配内存。启用 Ballooning 以允许主机从来宾回收未使用的内存。最小的气球尺寸可以防止过度回收,从而导致客舱内部发生交换。对于延迟敏感的工作负载(数据库、实时系统),请禁用气球。

网络

选择 VirtIO(半虚拟化) 作为网络模型。 VirtIO 以较低的 CPU 开销提供接近本机的吞吐量。 Intel E1000 和 Realtek RTL8139 模拟网卡可实现兼容性,但性能明显较差。

设置静态 MAC 地址 或让它自动生成。将虚拟机分配给桥(通常为 vmbr0)。对于多租户环境,请创建具有不同 VLAN 标记的单独网桥。

确认

如果您希望虚拟机立即启动,请查看摘要并选中创建后启动。单击完成

适用于 Windows 的 VirtIO 驱动程序

Windows 不附带 VirtIO 驱动程序。从 Fedora 项目下载官方 VirtIO 驱动程序 ISO,并将其作为第二个 CD-ROM 驱动器附加到虚拟机。

wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
mount -o loop virtio-win.iso /mnt
cp /mnt /var/lib/vz/template/iso/

在 Windows 安装过程中,出现磁盘选择屏幕时手动加载 VirtIO 驱动程序。浏览 CD-ROM,找到与您的操作系统架构相匹配的正确驱动程序目录(对于 64 位 Windows 10/11,为 w10/amd64)。如果没有这些驱动程序,Windows 将无法识别 VirtIO 磁盘或网络适配器。

安装后,在 Windows 中安装 virtio-win-guest-tools 包以实现气球、内存气球和 viosock 支持。

Qemu 客座代理

Qemu Guest Agent (QEMU-GA) 在虚拟机内部运行,并为主机提供通信通道。首次启动后将其安装在来宾操作系统中。

Linux

# Debian / Ubuntu
apt install qemu-guest-agent

# RHEL / Rocky / Alma
dnf install qemu-guest-agent

# Enable and start
systemctl enable --now qemu-guest-agent

视窗

该代理包含在 virtio-win-guest-tools 安装程序中。或者,单独下载 MSI 并安装。安装后,QEMU Guest Agent 服务应该出现并自动启动。

验证代理是否正在从 Proxmox 主机运行:

qm agent <VMID> ping

如果代理响应,主机可以发出如下命令:

qm agent <VMID> shutdown
qm agent <VMID> get-time
qm agent <VMID> network-get-interfaces

该代理还启用冻结/解冻以获得一致的文件系统快照,并在 Web UI 摘要面板中报告访客 IP 地址。

用于自动部署的 Cloud-Init 模板

Cloud-init 是初始化云实例的行业标准。 Proxmox 本身支持它,允许您创建模板 VM 并使用自定义网络、SSH 密钥和用户数据克隆它。

创建兼容 cloud-init 的 VM:

# Create VM with cloud-init image
qm create 9000 --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
qm importdisk 9000 jammy-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent 1
qm template 9000

然后克隆新虚拟机的模板:

qm clone 9000 100 --name web-server --full
# Set cloud-init values
qm set 100 --sshkeys ~/.ssh/id_rsa.pub
qm set 100 --ipconfig0 ip=192.168.1.50/24,gw=192.168.1.1
qm set 100 --ciuser ubuntu
qm start 100

Web UI 在 Cloud-Init 选项卡下提供相同的 cloud-init 字段。这种方法消除了重复的手动设置,并确保所有虚拟机遵循一致的配置基准。

导入和导出虚拟机

OVF 导入

Proxmox 可以导入由 VMware、VirtualBox 或其他虚拟机管理程序创建的 OVF/OVA 文件。使用 qm importovf 命令:

qm importovf 200 vmware-export.ovf local-lvm

如果 OVF 引用的磁盘未存储在其旁边,请单独下载 VMDK 并使用:

qm importdisk 200 disk.vmdk local-lvm

导出到 OVF

要将 Proxmox VM 迁移到另一个平台,请将其导出:

qm template 100   # VM must be stopped

没有本机 qm exportovf — 使用 qemu-img 转换磁盘映像并手动构建 OVF 描述符,或使用 ovftool 等社区工具。

磁盘映像转换

使用 qemu-img 在格式之间进行转换:

qemu-img convert -f qcow2 -O vmdk vm-100-disk-0.qcow2 vm-100-disk-0.vmdk

支持的格式包括 qcow2、raw、vmdk、vdi、vhdx 和 qed。

性能调优

CPU 固定和 NUMA

CPU 固定将虚拟 CPU 绑定到特定的物理内核,从而防止上下文切换开销。将此用于延迟关键的工作负载。

qm set <VMID> --cpulist 0-3,8-11 --numa 0

NUMA(非统一内存访问)感知告诉访客有关主机 NUMA 拓扑的信息。当虚拟机拥有超过 4 个 vCPU 或运行内存密集型应用程序时启用它。

气球般的记忆

内存膨胀允许主机从来宾回收未使用的内存。 virtio-balloon 驱动程序协商主机和来宾之间的内存压力。监控气球使用情况:

# In guest
cat /sys/devices/system/memory/memory*/state

# On host
qm balloon <VMID> <memory-in-MB>

禁用数据库、Java 应用程序和实时工作负载的气球。

PCIe 和 GPU 直通

将物理设备直接传递给 VM 需要 IOMMU 支持。在内核中启用它:

# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
# For AMD
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

更新 grub 并重新启动:

update-grub
reboot

然后将设备添加到VM:

qm set <VMID> --hostpci0 01:00.0,pcie=1

GPU 直通在游戏虚拟机或 GPU 加速的计算工作负载中很流行。通过检查 lspci -v 确保 GPU 位于其自己的 IOMMU 组中。

指标和监控

Proxmox 通过 Proxmox VE Metrics 堆栈提供内置监控。从 Web UI 查看每个虚拟机的 CPU、内存、网络和磁盘 I/O 图表。对于外部监控,集成:

  • Zabbix:提供官方 Proxmox 模板
  • Prometheus:使用 Proxmox VE 导出器
  • Netdata:安装内部来宾以获取精细指标
  • SNMP:Proxmox 支持 SNMP v2c 和 v3

数据中心 → 通知下配置通知目标,以处理诸如来宾关闭、备份失败或 HA 防护等事件。