PVE创建Cloud-init Debian虚拟机模板

1. 下载镜像

https://cloud.debian.org/images/cloud/ 下载 .qcow2 ,如 https://cloud.debian.org/images/cloud/trixie/20260518-2482/debian-13-genericcloud-amd64-20260518-2482.qcow2

mkdir -p /var/lib/vz/template/qcow2
cd /var/lib/vz/template/qcow2
wget https://cloud.debian.org/images/cloud/trixie/20260518-2482/debian-13-genericcloud-amd64-20260518-2482.qcow2
sha512sum debian-13-genericcloud-amd64-20260518-2482.qcow2

2. 创建模板

2.1 新建虚拟机

  • 操作系统:选择 “不使用任何介质”(Do not use any media)
  • SCSI 控制器选 VirtIO SCSI single
  • 删除默认硬盘
  • 网络选 VirtIO
  • CPU可选host

导入qcow2

qm importdisk 9000 /var/lib/vz/template/qcow2/debian-13-genericcloud-amd64-20260518-2482.qcow2 local-lvm

2.2 挂载硬盘

回到网页端,选中刚才的虚拟机 9000,点击 硬件 (Hardware)

点击上方的 添加 (Add) 按钮 -> 选择 CloudInit 设备 (CloudInit Drive),存储同样选择你的虚拟机存储(如 local-lvm),点击添加。

你会看到底部多了一个 “未使用的磁盘 0”(Unused Disk 0)。双击它,总线选择 SCSI,然后点击 添加 (Add)

可选优化:

  • Cache: Write Back
  • 勾选 SSD Emulation
  • 勾选 Discard
  • 保持勾选 IO thread 和 Backup

2.3 调整启动顺序

在虚拟机 9000选项 (Options) 菜单中:

  • 双击 引导顺序 (Boot Order)
  • 勾选刚刚添加的 scsi0 硬盘,并把它拖动到第一位(最顶上)。
  • 点击确定。

编辑 QEMU Guest Agent ,设置为 Enabled

2.4 初始化脚本

点击虚拟机的 Cloud-Init 菜单,配置 IP Config 为 DHCP,未配置ipv6即禁用,点击 Regenerate Image

(若无法编辑,查看是否已经在Hardware添加了一个CloudInit Drive,Bus/Device 默认 IDE 0,Storage选择虚拟机存储卷如 local-lvm)

创建一个自定义初始化脚本

mkdir -p /var/lib/vz/snippets/
nano /var/lib/vz/snippets/vm_config.yaml

设置了时区,sshkey等。公网部署考虑额外收紧安全配置。

#cloud-config
timezone: Asia/Hong_Kong
package_upgrade: true  # 可选,用于首次启动时自动升级软件包

# 定义多个用户
users:
  - name: sysadmin          # 第一个用户名
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL'] # 赋予完整的、免密的 root 权限
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...替换为公钥...

  - name: devops
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3NzaC1...

# 强制允许 SSH 密码登录(覆盖官方镜像的默认安全策略)
ssh_pwauth: true

# 设置初始登录密码(选填,提高一点可能的维护便利性)
chpasswd:
  list: |
    sysadmin:第一个用户的密码
  expire: False

挂载自定义配置

qm set 9000 --cicustom "user=local:snippets/vm_config.yaml"
qm cloudinit regenerate 9000

2.5 创建模板

将vm9000右键转换为模板Convert to template

3. 创建虚拟机

3.1 从模板新建虚拟机

克隆vm9000,选择 完整克隆 (Full Clone) 

可选提前编辑主机名,需要创建单独的初始化脚本:

# 1. 复制一份专门给 9001 使用的配置文件
cp /var/lib/vz/snippets/vm_config.yaml /var/lib/vz/snippets/vm_9001.yaml

# 2. 向这个新文件追加一行主机名设置(注意:冒号后面有一个空格)
echo "hostname: Debian13-9001" >> /var/lib/vz/snippets/vm_9001.yaml

# 3. 将新虚拟机的 Cloud-Init 脚本指向这个专属于它的文件
qm set 9001 --cicustom "user=local:snippets/vm_9001.yaml"

# 4. 刷新 9001 的 Cloud-Init 图像
qm cloudinit regenerate 9001

或者开机后再修改

sudo hostnamectl set-timezone Asia/Hong_Kong && sudo hostnamectl set-hostname Debian13-9001

3.2 调整硬盘大小

开机前可调整vm_9001的硬盘大小。默认3GB。

这个步骤可以在虚拟机开机状态下在线进行(热扩容),但为了保险起见,建议在关键操作前先关闭虚拟机。

  1. 登录 PVE 管理后台,找到该虚拟机。
  2. 点击 硬件 (Hardware) -> 选择你需要扩容的 硬盘 (Hard Disk)
  3. 点击上方的 磁盘操作 (Disk Action) -> 选择 调整大小 (Resize)
  4. 在弹出的窗口中,输入你想要增加的容量(例如:输入 20 表示在原基础上增加 20GB),然后点击“调整大小”。

此时,虚拟机的底层虚拟硬盘已经变大了。Resize不能用于减小硬盘。

boot后通常会自动识别扩容,查看Size是否为扩容后的正确大小:

df -h /
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!无需注册,过短或乱码评论会被屏蔽。
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容