[scode type="blue"] 当前在企业中不论是 VMware vSphere 还是 Proxmox VE、KVM 、OpenStack等,在常规创建虚拟机时要么通过官方的 ISO 镜像进行安装系统,然后配置网络,磁盘,基线等,要么就是直接使用自行制作模板镜像来创建虚拟机,从安装到完成开局配置比较消耗时间,多余的时间摸鱼不香吗?这里教大家如何在Proxmox平台中通过 Cloud-Init光速初始化一台虚拟机。 [/scode] ### 什么是 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登录) ```bash 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  ```bash wget https://dl.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base.latest.x86_64.qcow2 ``` ### 创建虚拟机 ##### 创建空壳虚拟机 首先需要创建一个空壳虚拟机(不包含磁盘)T这里的 `1000` 为你的 VMID。 ```bash qm create 1000 --name cloud-init-test --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --vga std ```  ##### 导入系统磁盘镜像并挂入系统盘 导入系统磁盘镜像 ```bash qm importdisk 1000 Rocky-9-GenericCloud-Base.latest.x86_64.qcow2 local --format qcow2 ```  导入完成后这里会多一块未使用的磁盘  挂载: ```bash 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:~# ``` ##### 将刚挂进去的系统盘设置为启动盘 ```bash qm set 1000 --boot order=scsi0 ```  ##### 初始化Cloud-Init 添加Cloud-init 驱动器以及串口 ```bash 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 ```bash 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 ```  到这里直接启动虚拟机就可以了 ```bash qm start 1000 ``` Enjoy! ::aru:knife:: Loading... <div class="tip inlineBlock info"> 当前在企业中不论是 VMware vSphere 还是 Proxmox VE、KVM 、OpenStack等,在常规创建虚拟机时要么通过官方的 ISO 镜像进行安装系统,然后配置网络,磁盘,基线等,要么就是直接使用自行制作模板镜像来创建虚拟机,从安装到完成开局配置比较消耗时间,多余的时间摸鱼不香吗?这里教大家如何在Proxmox平台中通过 Cloud-Init光速初始化一台虚拟机。 </div> ### 什么是 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登录) ```bash 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  ```bash wget https://dl.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud-Base.latest.x86_64.qcow2 ``` ### 创建虚拟机 ##### 创建空壳虚拟机 首先需要创建一个空壳虚拟机(不包含磁盘)T这里的 `1000` 为你的 VMID。 ```bash qm create 1000 --name cloud-init-test --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --vga std ```  ##### 导入系统磁盘镜像并挂入系统盘 导入系统磁盘镜像 ```bash qm importdisk 1000 Rocky-9-GenericCloud-Base.latest.x86_64.qcow2 local --format qcow2 ```  导入完成后这里会多一块未使用的磁盘  挂载: ```bash 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:~# ``` ##### 将刚挂进去的系统盘设置为启动盘 ```bash qm set 1000 --boot order=scsi0 ```  ##### 初始化Cloud-Init 添加Cloud-init 驱动器以及串口 ```bash 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 ```bash 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 ```  到这里直接启动虚拟机就可以了 ```bash qm start 1000 ``` Enjoy! <img src="https://wanghaoyu.com.cn/usr/themes/handsome/assets/img/emotion/aru/knife.png" class="emotion-aru"> Last modification:November 8, 2025 © Allow specification reprint Support Appreciate the author Like 1 如果觉得我的文章对你有用,请随意赞赏