当前在企业中不论是 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-configuser-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
导入完成后这里会多一块未使用的磁盘

挂载:
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 1000Enjoy! ::aru🔪: