使用 CloudInit 在 Proxmox 上创建 Ubuntu 24.04 模板虚拟机

使用 CloudInit 在 Proxmox 上创建 Ubuntu 24.04 模板虚拟机
胖胖📌 本文翻译整理自国外社区原文,原帖地址详见末尾,转载请注明出处。
本文是一篇简要教程,介绍如何在 Proxmox 虚拟化平台上使用 CloudInit 创建一个 Ubuntu 24.04 的模板虚拟机,适合希望自动化部署的用户。以下内容假设你具备一定的 Proxmox 使用经验,并具备如下环境:
- 虚拟机采用 UEFI 引导(非 BIOS)
- Proxmox 节点的主要存储为
local-zfs - 系统镜像为 Ubuntu 24.04 Cloud Image
- 你的主用户账户下
~/.ssh/authorized_keys中已存在有效的 SSH 公钥
开启 Snippets 支持
首先需要在 Proxmox 中开启 snippets 功能以便使用 CloudInit 的扩展配置。
- 登录 Proxmox Web UI
- 左侧选择
Datacenter->Storage-> 选择local - 点击 “Edit”,在弹窗中勾选
Snippets,然后点击 OK
下载并调整 Cloud 镜像
在 Proxmox 节点中通过 SSH 执行:
1 | wget -q https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img |
说明:
- 镜像是 sparse 文件,初始大小约 2GB,实际不会占满 32G
- 你可以根据需要调整大小,比如 20G、40G、80G 等
创建基础虚拟机
1 | sudo qm create 8001 --name "ubuntu-2404-cloudinit-template" --ostype l26 \ |
参数说明:
- VM ID 为 8001,可自行替换,但后续命令需保持一致
--agent 1启用 QEMU Guest Agent--vga serial0便于通过串口复制粘贴--net0绑定默认桥接接口vmbr0,如需 VLAN 可写作bridge=vmbr0,tag=XX
导入硬盘并设置启动项
1 | sudo qm importdisk 8001 noble-server-cloudimg-amd64.img local-zfs |
说明:
- 第一条导入我们下载的镜像
- 第二条将其挂载为 virtio 磁盘
- 第三条设定启动顺序
- 第四条添加 cloudinit 专用的伪装光驱
配置 CloudInit 的 vendor.yaml 脚本
1 | mkdir -p /var/lib/vz/snippets |
作用说明:
- 安装并启动 qemu-guest-agent
- 修复 CloudInit 在网络服务启动后才初始化的问题,避免无法 SSH 连接
配置 CloudInit 参数
1 | sudo qm set 8001 --cicustom "vendor=local:snippets/vendor.yaml" |
说明:
--cicustom指定 CloudInit 配置文件--ciuser设置默认用户--cipassword设置用户密码(使用 openssl 生成加密字符串)--sshkeys注入公钥--ipconfig0设置为 DHCP 获取 IP(默认如此,但建议显式指定)
转换为模板虚拟机
1 | sudo qm template 8001 |
至此模板创建完成,可随时克隆并启动。启动后 CloudInit 会自动配置系统用户、安装 QEMU Agent 并重启系统。重启完成后,即可通过 SSH 连接并使用该 VM。
可选:自动化脚本
原作者提供了一组 Shell 脚本用于快速创建模板,在对应文件顶部定义了两个环境变量,可根据自身 Proxmox 配置进行调整。
附录与参考
- Ubuntu Cloud Images 下载地址:https://cloud-images.ubuntu.com/noble/current
- Proxmox 官方文档:https://pve.proxmox.com/wiki/Main_Page
- 原文链接:https://github.com/UntouchedWagons/docs/blob/main/proxmox/ubuntu-template.md
🔁 转载自 UntouchedWagons GitHub 文档,原始英文文档版权归原作者所有,翻译仅供学习参考。
原文作者感谢论坛用户 ilude 提供了设置密码的关键命令。







-863b9c5323fbe3a333ba6b5da0bd8ebd.png)


