跳到主要内容

Cloud-Init支持

1.介绍Cloud-Init

Cloud-Init兼容多个Linux发行版,主要用于虚拟机初始化配置。通过Cloud-Init,虚拟机管理器(qm)可以直接配置虚拟机网络设备和ssh密钥。当虚拟机首次启动时,Cloud-Init能够在虚拟机内部启用相关配置。

云镜像

使用Cloud-Init的第一步是准备虚拟机。理论上可以使用任何虚拟机。只需在虚拟机内部安装Cloud-Init软件包即可。例如在基于Debian/Ubuntu的虚拟机上,执行以下命令即可:

apt-get install cloud-init

很多Linux发行版都提供可直接使用的Cloud-Init镜像(以.qcow2文件形式),因此也可以直接下载并导入这类镜像。

系统说明
Ubuntu 云镜像img/qcow2
Debian 云镜像qcow2

下面的例子就使用 Ubuntu 在 https://cloud-images.ubuntu.com 提供的云镜像。

PixPin_2025-01-20_21-53-42

2.使用Cloud-Init安装虚拟机

准备Cloud-Init镜像

下载云镜像

# 1.切换到 PVE 存储池目录
cd /var/lib/vz/template/iso

# 2.下载镜像
wget https://cloud-images.ubuntu.com/oracular/current/oracular-server-cloudimg-amd64.img

创建虚拟机

# 创建虚拟机:1C2G 桥接网络
qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0

# 将下载的磁盘导入到 local-lvm 存储
qm importdisk 9000 oracular-server-cloudimg-amd64.img local-lvm

# 最后将新磁盘作为 scsi 驱动器附加到 VM
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0

操作过程截图:

PixPin_2025-01-21_00-05-42

PixPin_2025-01-21_00-10-54

PixPin_2025-01-21_00-16-55

创建虚拟机时指定更多参数
--cores 2 #核心数
--name ubuntu #名称
--ipconfig0 ip=dhcp #使用DHCP自动分配IP,不可与手动IP同时使用

添加 Cloud-Init CDROM 驱动器

接下来要为虚拟机配置CDROM驱动器,以便传递Cloud-Init配置数据。

qm set 9000 --ide2 local-lvm:cloudinit

为直接启动Cloud-Init镜像,需要将bootdisk设置为scsi0,并设置仅从磁盘启动。这可以省去虚拟机BIOS的自检并加速启动过程。

qm set 9000 --boot c --bootdisk scsi0

此外还需要配置一个串口控制台,并用于显示虚拟机信息。由于这是OpenStack镜像的标准要求,所以有很多Cloud-Init镜像都依赖这种配置。

qm set 9000 --serial0 socket --vga serial0

最后,可以将虚拟机转换为模板。通过该模板,可以用链接克隆快速创建新的虚拟机。这种部署方式比完整克隆(复制)要快得多。

qm template 9000

操作过程截图:

PixPin_2025-01-21_00-21-25

PixPin_2025-01-21_00-22-40

PixPin_2025-01-21_00-24-22

在Web页面可以看见刚才创建的 VM 模板

PixPin_2025-01-21_00-26-39

部署Cloud-Init模板

利用模板可以轻松克隆并部署虚拟机

qm clone 9000 100 -–name ubuntu2

初始化虚拟机 然后设置登录认证SSH公钥,并配置IP地址,修改硬盘容量:

# 修改主机名
qm set 100 --name ubuntu2
# 添加公钥
qm set 100 --sshkey ~/.ssh/id_rsa.pub
# 设置静态网络
qm set 100 --ipconfig0 ip=192.168.10.101/24,gw=192.168.10.1
# 硬盘大小
qm resize 100 scsi0 40G
# 用户名、密码。注意:使用复杂密码!!!
qm set 100 --ciuser ubuntu --cipassword 123456

可以通过一个命令行配置Cloud-Init的全部参数项。上面的例子是为了避免命令行过长而做了拆分。此外,需要注意确保IP配置符合你的网络环境要求。

操作截图:

PixPin_2025-01-21_00-31-19

PixPin_2025-01-21_00-57-47

PixPin_2025-01-21_00-35-07

PixPin_2025-01-21_01-45-41

启动虚拟机

启动虚拟机

qm start 100

PixPin_2025-01-21_01-46-38

若物理机未开启虚拟化功能,则会报错:

PixPin_2025-01-21_00-59-34

解决方法:

  1. 重启服务器
  2. 进入系统前按 F9(惠普工作站) 进入 BIOS
  3. 开启CPU虚拟化功能(VT-x)
  4. 保存并退出

进入虚拟监视器

qm terminal 100

虚拟机首次开机会加载配置,所以屏幕会滚动输出很多信息。

PixPin_2025-01-21_01-25-37

输出完毕后即可登录

PixPin_2025-01-21_01-33-30

退出虚拟机监视器:只需按 Ctrl+O,即可回到 PVE 终端

PixPin_2025-01-21_01-51-40

到此,我们学会了在PVE中使用Cloud-Init初始化虚拟机的简单操作。更多操作可以查看下面的Cloud-Init学习资源。

3.Cloud-Init学习资源

URL说明
PVE 官方文档命令行工具的用法
10.8 Cloud-Init支持 — Promxox VE 中文文档 7.1 文档PVE中文教程Cloud-Init章节​ ⭐
Cloud-Init官方文档英语 ​ ❌
安装cloud-init确保ECS实例完成初始化配置_云服务器 ECS(ECS)-阿里云帮助中心除了 Cloud-Init 还有其他内容可学习。
一键变身!Cloud-Init让PVE镜像华丽转身,快来看看怎么做!_pve cloud-init-CSDN博客博客,介绍PVE使用Cloud-Init。