跳过正文

Proxmox VE 结合 Cloud-Init 使用云镜像模板快速初始化虚拟机

·198 字·1 分钟
作者
王浩宇
记录服务器、虚拟化、网络和日常折腾。
当前在企业中不论是 VMware vSphere 还是 Proxmox VE、KVM 、OpenStack等,在常规创建虚拟机时要么通过官方的 ISO 镜像进行安装系统,然后配置网络,磁盘,基线等,要么就是直接使用自行制作模板镜像来创建虚拟机,从安装到完成开局配置比较消耗时间,多余的时间摸鱼不香吗?这里教大家如何在Proxmox平台中通过 Cloud-Init光速初始化一台虚拟机。

什么是 Cloud-Init?
#

cloud-init 是业界公认的 “云实例初始化标准”,由 Canonical 发起,现在 AWS / Azure / GCP / OpenStack / 阿里云 / 腾讯云 等云厂商全部默认集成,它的设计目标只有一个:让“一台虚拟机第一次开机”这件事完全无人化,首次启动时自动注入用户、密钥、网络、hostname、磁盘等,PVE 会在启动前 动态生成一个 4 MiB 的 ISO,标签 cidata,里面含如下内容:

  • meta-data:uuid、instance-id、hostname、network-config
  • user-data:用户、SSH 公钥、密码、runcmd等…

官方文档:https://docs.cloud-init.io/en/latest/

准备工作
#

生成密钥对(用于ssh登录)
#

ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""

参数说明:

选项含义
-t rsa算法类型
-b 2048密钥长度 最常用的就是RSA2048,如果需要更高的安全性推荐使用 ed25519
-f保存路径,默认即 ~/.ssh/id_rsa
-N ""私钥密码 为空的话是没有密码(自动化常用)

执行后会得到:

私钥:~/.ssh/id_rsa

公钥:~/.ssh/id_rsa.pub

下载Cloud-Init云镜像模板
#

这里以 Rocky Linux 为例

下载地址:https://rockylinux.org/zh-CN/download

wget https://dl.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base.latest.x86_64.qcow2

创建虚拟机
#

创建空壳虚拟机
#

首先需要创建一个空壳虚拟机(不包含磁盘)T这里的 1000 为你的 VMID。

qm create 1000 --name cloud-init-test --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --vga std
导入系统磁盘镜像并挂入系统盘
#

导入系统磁盘镜像

qm importdisk 1000 Rocky-9-GenericCloud-Base.latest.x86_64.qcow2 local --format qcow2

导入完成后这里会多一块未使用的磁盘

image-20251030105310653

挂载:

root@pve:~# qm set 1000 --scsihw virtio-scsi-pci --scsi0 local:1000/vm-1000-disk-0.qcow2
update VM 1000: -scsi0 local:1000/vm-1000-disk-0.qcow2 -scsihw virtio-scsi-pci
root@pve:~#
将刚挂进去的系统盘设置为启动盘
#
qm set 1000 --boot order=scsi0
初始化Cloud-Init
#

添加Cloud-init 驱动器以及串口

qm set 1000 --ide2 local:cloudinit
qm set 1000 --serial0 socket --vga serial0
qm set 1000 --agent enabled=1,fstrim_cloned_disks=1 

最后这条命令的作用是告诉 Proxmox VE 这台虚拟机里面装有 qemu-guest-agent,克隆,还原快照后自动发TRIM,节省物理存储。

配置 Cloud-Init
#
qm set 1000 --ciuser cloud-user
qm set 1000 --sshkeys .ssh/id_rsa.pub
qm set 1000 --ipconfig0 ip=dhcp       # 需要静态可改 ip=192.168.1.99/24,gw=192.168.1.1
qm set 1000 --nameserver 223.5.5.5

到这里直接启动虚拟机就可以了

qm start 1000

Enjoy! ::aru🔪: