在 PVE 8 中使用 Cloud-init 初始化 ubuntu cloud-image 并创建模板

玩儿 PVE 的小伙伴们肯定对虚拟机菜单栏中的“cloud-init”选项很眼熟了。cloud-init 是专为云环境中虚拟机的初始化而开发的工具,可以依据模板文件对虚拟机进行配置用户及密码,设置主机名,配置网络,扩容分区等功能。ubuntu cloud-image 是 ubuntu 专为云服务器编译的镜像,需要 cloud-init 或其他初始化工具初始化后正常使用。有了cloud-init 和cloud-image,我们可以很轻易地在 PVE 上批量克隆设置 ubuntu 虚拟机。

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

下载 ubuntu cloud-image

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

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

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

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

将镜像导入 PVE 中

使用任意 ftp/sftp 软件,连接到 PVE 中,将刚刚下载的固件上传至 PVE 中。本文以上传至 PVE 的 root 目录为例。

上传完毕后,使用 ssh 连接 PVE,输入 ls 查看是否成功上传:

root@PVE:~# ls
ubuntu-22.04-server-cloudimg-amd64.img

有以上回显则说明上传成功。如果不是上传至 root 目录,需要先 cd 至上传目录:

root@PVE:~# cd demo
root@PVE:~/demo# 

创建虚拟机并导入镜像

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

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

磁盘无须自定,待会儿要删掉。CPU 和 内存 按照个人需求进行更改。网络保持默认即可。

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

回到 ssh 中,执行以下命令将 cloud image 导入到虚拟机中,其中,“vmid”是创建虚拟机后的虚拟机 ID,可在 PVE web端的侧边栏中看到,“ubuntu-22.04-server-cloudimg-amd64.img”为镜像文件名,可能需要更改。如果不是上传至 root 目录,则需要填写绝对路径。“local-lvm”是存储池,也可以自行更改。

qm importdisk vmid ubuntu-22.04-server-cloudimg-amd64.img local-lvm

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

transferred x GiB of x GiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-vmid-disk-1'

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

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

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

在此可以输入增量大小:

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

之后点击左边栏的“Cloud-Init”,在这里可以编辑用户及密码,ssh公钥和 IP 地址了,编辑完成后,要点击上方的“重生成镜像”。建议大家生成一个ssh公钥连接ssh,cloud image 默认禁止以密码连接 ssh。

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

然后就可以启动系统了!

如果不想将此转换成模板的话,教程到此就结束了。想要转换成模板便于以后多开的小伙伴们,可以继续往下看。

将虚拟机转换成模板

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

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

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

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

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

这时,刚刚的虚拟机变成为了“模板”,我们可以克隆该虚拟机来创建多个 ubuntu 系统。

克隆虚拟机

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

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

链接克隆 与 完整克隆 的区别的话,一说链接克隆是从模板上创建一个快照,依靠这个快照继续运行的如果模板被删除,则链接克隆的虚拟机也无法使用了;链接克隆的性能可能比完整克隆的低。完整克隆则是一个完全独立的虚拟机,其性能与克隆的虚拟机相同,但是克隆时间长。如需了解更多信息,建议小伙伴们自行查找。我本人是一直用“完整克隆”的。

本篇文章不可转载。

参考文献

嘟嘟琳 (2023). 一.链接克隆和完整克隆的区别?作业. Available at: https://blog.csdn.net/2301_76871571/article/details/129569857 (Accessed: 5th Oct. 2023)

封面插画选自 mocha@新刊委託中 (2023)的 Cross

https://www.pixiv.net/artworks/106598253
Digiprove sealCopyright secured by Digiprove © 2023 Never.