开始输入,可搜索发票、服务、域名、工单,以及 更多...
如果你在独立服务器上用 Proxmox VE 给客户开 VPS,每次都挂 ISO 手动装系统既慢又容易出错。更高效的方法是制作一个 Proxmox VE Cloud-Init 模板:导入 Debian 或 Ubuntu 官方云镜像,挂上 cloud-init 驱动器,转换成模板后,每开一台 VPS 只需克隆并设置 IP、SSH 密钥和密码,几十秒即可交付。本文适用于 Proxmox VE 7.x / 8.x,所有命令在宿主机 root 下执行。
云镜像是发行版官方为云平台准备的精简系统盘,已经内置 cloud-init,首次启动时会自动读取主机名、用户、SSH 密钥和网络配置。Debian 推荐 genericcloud 版本(体积小、适合 KVM),Ubuntu 使用 server-cloudimg。可选地用 virt-customize 预装 qemu-guest-agent,方便 PVE 读取虚拟机 IP 和安全关机。
cd /var/lib/vz/template/iso # any directory with enough space
# Debian 12 (bookworm) generic cloud image
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
# Ubuntu 24.04 LTS (noble) cloud image
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
# optional: preinstall qemu-guest-agent into the image
apt install -y libguestfs-tools
virt-customize -a debian-12-genericcloud-amd64.qcow2 --install qemu-guest-agent
先创建一台没有磁盘的空虚拟机,再把云镜像导入成它的磁盘,最后把这块磁盘挂到 scsi0 并设为启动盘。导入时 PVE 会自动转换为目标存储的格式。
qm create 9000 --name debian12-cloudinit --memory 2048 --cores 2 \
--cpu host --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --ostype l26
# import the image as a disk of VM 9000 on storage local-lvm
qm importdisk 9000 debian-12-genericcloud-amd64.qcow2 local-lvm
# (PVE 8 also accepts: qm disk import 9000 debian-12-genericcloud-amd64.qcow2 local-lvm)
qm set 9000 --scsi0 local-lvm:vm-9000-disk-0,discard=on
qm set 9000 --boot order=scsi0
cloud-init 驱动器是一块虚拟光盘,PVE 会把你在“Cloud-Init”选项卡中填写的配置写入其中。云镜像通常需要串口控制台才能在网页 Console 中正常显示,因此一并设置 serial0。模板上设置的用户和密钥会作为默认值,克隆后可以逐台覆盖。
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1
# defaults stored in the template (can be overridden per clone)
qm set 9000 --ciuser debian --sshkeys /root/.ssh/id_ed25519.pub
qm set 9000 --ipconfig0 ip=dhcp
qm set 9000 --nameserver "1.1.1.1 8.8.8.8"
qm cloudinit dump 9000 user
最后一条命令可以预览生成的 cloud-init 用户配置,确认用户名和密钥已经写入。
不要启动这台虚拟机,直接转换为模板。模板不能再开机,只能被克隆,磁盘会变成只读的基础盘。
qm template 9000
qm list
克隆分两种:完整克隆(--full)会复制出独立磁盘,适合交付给客户;链接克隆几乎瞬间完成、节省空间,但依赖模板的基础盘,模板不能删除,更适合内部测试。克隆后为每台 VPS 设置独立的 IP、密钥或初始密码,按需扩容磁盘(云镜像原始只有 2–3GB,cloud-init 会在首次启动时自动扩展分区)。
# full clone (independent disk) for a customer VPS
qm clone 9000 201 --name vps201 --full --storage local-lvm
# or a linked clone: created in seconds, shares the base disk
# qm clone 9000 202 --name vps202
qm set 201 --cores 2 --memory 4096
qm set 201 --ipconfig0 ip=203.0.113.21/24,gw=203.0.113.1
qm set 201 --sshkeys /root/customer201.pub --cipassword 'Change-Me-123'
qm resize 201 scsi0 +38G
qm start 201
# check
qm guest cmd 201 network-get-interfaces
ssh [email protected]
如果需要批量开通,可以把上面的步骤写成一个简单脚本,传入 VM ID、IP 和客户公钥即可:
#!/bin/bash
# usage: ./newvps.sh 205 203.0.113.25 /root/keys/c205.pub
ID=$1; IP=$2; KEY=$3
qm clone 9000 "$ID" --name "vps$ID" --full --storage local-lvm
qm set "$ID" --ipconfig0 ip="$IP"/24,gw=203.0.113.1 --sshkeys "$KEY"
qm resize "$ID" scsi0 +38G
qm start "$ID"
在网页后台也可以操作:右键模板 → 克隆 → 选择“完整克隆”,然后在新虚拟机的“Cloud-Init”选项卡修改 IP 配置和 SSH 公钥,点击“重新生成镜像”后开机。
确认 ipconfig0 的 IP、掩码和网关与 IMIDC 分配的一致;登录用户是 ciuser 设置的用户(Debian 默认 debian,Ubuntu 默认 ubuntu),不是 root;修改 Cloud-Init 配置后需要重启虚拟机才会生效。可以在 PVE 的 Console(串口)中查看 cloud-init 启动日志排查。
需要先执行 qm resize 再首次开机,cloud-init 的 growpart 会自动扩展根分区。如果已经开过机,可在系统内执行 growpart /dev/sda 1 与 resize2fs /dev/sda1(具体分区号以 lsblk 为准)。
可以。Rocky Linux 和 AlmaLinux 官方都提供 GenericCloud 格式的 qcow2 镜像,制作流程与本文完全相同,只是默认用户分别为 rocky 和 almalinux。
如仍无法解决,可提交工单联系 IMIDC 7×24 技术支持:https://www.imidc.com/submitticket.php