Background image
1490 字
7 分钟
在PVE 8中使用Cloud-init初始化cloud-image并创建模板

cloud-init 是专为云环境中虚拟机的初始化而开发的工具,可以依据模板文件对虚拟机进行配置用户及密码,设置主机名,配置网络,扩容分区等功能。

cloud-image 是专为云服务器编译的镜像,需要 cloud-init 或其他初始化工具初始化后正常使用。有了cloud-init 和cloud-image,我们可以很轻易地在 PVE 上批量克隆设置Linux虚拟机。

cloud images下载地址

下载不下来请使用科学上网#

centoshttp://cloud.centos.org/centos/ ubuntu: http://cloud-images.ubuntu.com/releases/ debian: https://cloud.debian.org/images/cloud/OpenStack/ fedora: https://alt.fedoraproject.org/cloud/ rehat7https://access.redhat.com/downloads/content/69/ver=/rhel---7/x86_64/product-downloads opensusehttps://software.opensuse.org/distributions/leap#JeOS-ports

本文以 ubuntu 22.04 LTS 和 PVE 8.3.0 为例。

创建虚拟机#

下载 ubuntu cloud-image#

ubuntu 官网提供了多个版本的 cloud image 镜像,可依照要求选择下载。

https://cloud-images.ubuntu.com/releases/

以 ubuntu 22.04 LTS 为例,进入对应的文件夹,找到最下方的“release/”:

img

下载文件名为“ubuntu-22.04-server-cloudimg-amd64.img”的镜像:

最为推荐img格式的镜像,导入很简单。

img

将镜像导入 PVE 中#

按照下图的步骤打开上传界面,选择本地下载好的img并且上传。 上传完毕后,查看是否成功上传。

创建虚拟机并导入镜像#

打开 PVE 的 web 界面,创建虚拟机,“操作系统”中,选择“不使用任何介质”,客户机操作系统的类别选择 Linux,版本选择 6.x – 2.6 Kernel

img

“系统”中,显卡和 SCSI 控制器保持默认,机型选择“q35”,BIOS 选择“OVMF (UEFI)”,勾选添加 EFI 磁盘和预注册密钥。可以选择勾选 Qemu 代理(虚拟机中安装相应软件后可以在 PVE web段的虚拟机详情中查看 IP 地址)。

img

磁盘无须自定,待会儿要删掉。

CPU内存 按照个人需求进行更改。网络保持默认即可。

创建完毕后,打开虚拟机的“硬件”选项,分离并移除硬盘

img

回到 ssh 中,执行以下命令将 cloud image 导入到虚拟机中。

Terminal window
qm importdisk <vmid> /var/lib/vz/template/iso/ubuntu-22.04-server-cloudimg-amd64.img local

其中,vmid是创建虚拟机后的 虚拟机 ID,可在 PVE web端的侧边栏中看到。

ubuntu-22.04-server-cloudimg-amd64.img**镜像文件名,可能需要更改。

local存储池,根据你存储硬盘文件的分区而定,此处默认local。

导入成功后应该能看到回显:

Terminal window
transferred 1.0 GiB of 1.0 GiB (99.20%)
transferred 1.0 GiB of 1.0 GiB (100.00%)
transferred 1.0 GiB of 1.0 GiB (100.00%)
unused0: successfully imported disk 'local:123/vm-123-disk-5.raw'

此时回到虚拟机的硬件菜单,可以看到一个新的硬盘:

img

选中,单击上方的“编辑”,将“总线”更改为SATA或**,之后点击“添加”:

img

此时会有一个“硬盘0 (SATA)”,再次选中,选择上方的“磁盘操作”—“调整大小”:

img

在此可以输入增量大小:img

添加一个“Cloud-init”设备:

image-20250323121631277

这里的总线协议不需要修改,保持默认即可。只需要选择你的存放硬盘的目录即可。

之后点击左边栏的“Cloud-Init”,在这里可以编辑用户及密码,ssh公钥和 IP 地址了,编辑完成后,要点击上方的“重生成镜像”。

img

建议大家生成一个ssh公钥连接ssh,cloud image 默认禁止以密码连接 ssh。

完成后,点击左边的“选项”—“引导顺序”,勾选“sata0”并拖到第一位

img

然后就可以启动系统了!

img

如果不想将此转换成模板的话,教程到此就结束了。

想要转换成模板便于以后多开的小伙伴们,可以继续往下看。

克隆虚拟机#

转换模板#

测试一下没有问题的话,关闭虚拟机。

执行下述步骤前,请先确保选择正确的虚拟机,此操作无法挽回。

点击右上角的“更多”—“转换成模板”:

img

此时概要会变成下图这样:

img

左边栏的图标也发生变化:

img

这时,刚刚的虚拟机变成为了“模板”。

我们可以克隆该虚拟机来创建多个 ubuntu 系统。

克隆虚拟机#

点击右上角的“更多”—“克隆”:

img

根据个人需要选择“链接克隆”或“完整克隆”。其中,“完整克隆”可以更改目标存储池

img

链接克隆 与 完整克隆 的区别 链接克隆的性能可能比完整克隆的低。完整克隆则是一个完全独立的虚拟机,其性能与克隆的虚拟机相同,但是克隆时间长。我本人是一直用“完整克隆”的。

以下是链接克隆与完整克隆的详细介绍:

  1. 磁盘底层机制 链接克隆:基于qcow2格式的”写时复制”技术,仅生成增量磁盘文件(通常为10MB的meta数据文件),实际数据块仍指向母模板磁盘。相当于在母模板上叠加一个透明差分层。 完整克隆:执行深拷贝生成独立磁盘镜像,如将qcow2转换为raw格式,完全复制母盘所有数据块。

  2. 性能差异根源

链接克隆I/O路径:请求 -> 增量盘 -> 未修改部分回查母模板 -> 合并数据返回

完整克隆I/O路径:请求 -> 独立磁盘直读

  1. 模板管理策略

当母模板版本升级时:

链接克隆需逐个重建绑定 完整克隆可继续运行,但无法自动获得模板更新

  1. 适用场景建议 链接克隆:快速创建临时测试环境(平均创建速度提升90倍) 完整克隆:生产环境部署、需要长期运行的业务系统 附加技术点:在Proxmox中,即使删除母模板,通过qemu-img commit命令可将链接克隆转为独立磁盘(需停机操作)。

本篇完#


本文遵守 CC BY-NC-SA 4.0 协议,转载请注明出处。 作者: Mapleleaf

Github: https://github.com/mapleawaa


在PVE 8中使用Cloud-init初始化cloud-image并创建模板
https://mcyre.cc/posts/pve8-cloud-init-cloud-image-template/
作者
Maple
发布于
2025-03-14
许可协议
CC BY-NC-SA 4.0