PVE使用cloud-init快速启动虚拟机

Posted 上海一亩地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PVE使用cloud-init快速启动虚拟机相关的知识,希望对你有一定的参考价值。

这里写目录标题

关于cloud-init

传统ISO镜像装机时,需要一步一步规定虚拟机,比如系统盘安装在哪个磁盘里,ip是多少,root密码是多少,然后执行安装。安装时会下载许多系统包,整个过程耗时10分钟-30分钟,非常的慢。
大家在使用公有云的时候就很爽,可以在创建云服务器的时候,规定root密码、内网IP地址、DNS服务器等信息。第一次创建虚拟机到启动成功只要2分钟。这种开箱即用的爽感其实是cloud-init的功劳。
其实各种linux系统发行版除了有传统ISO镜像外,还有云镜像。云镜像一般是qcow文件或者raw文件。在启动之初如果虚拟机有cloud-init硬件并规定好信息后,虚拟机能在几秒-1分钟内启动好linux系统,无需一步一步手动设置。而且更改配置比较方便。而且云镜像支持resize,当虚拟机正在运行的时候增大系统盘(pve无法缩小系统盘)。

云镜像(cloud image)下载

Debian10:
https://cloud.debian.org/images/cloud/OpenStack/current-10/
目前可以选择 debian-10-openstack-amd64.qcow2

Ubuntu server22:
http://cloud-images.ubuntu.com/releases/22.04/release/
目前可以选择 ubuntu-22.04-server-cloudimg-amd64.img

CentOS 7:
http://cloud.centos.org/centos/7/images/
目前可以选择 CentOS-7-x86_64-GenericCloud-2009.qcow2

CentOS 9-steam
https://cloud.centos.org/centos/9-stream/x86_64/images/
选择:CentOS-Stream-GenericCloud-9-20221206.0.x86_64.qcow2

cloud-init支持的最好的是Debian,所以本文使用Debian bullseye版本。

创建虚拟机模板,可反复使用

Debian

任意一台物理机执行一下命令,创建模板机

# 创建虚拟机
qm create 1001 --name debian10-cloudimage-template --memory 2048 --net0 virtio,bridge=vmbr0

# 导入云镜像
qm importdisk 1001 debian-10-openstack-amd64.qcow2 local-lvm
# 我使用RBD和Ceph FS,则命令如下
qm importdisk 1001 /mnt/pve/system_images/template/cloud-image/debian-10-openstack-amd64.qcow2 system_volumes

# 设置硬盘总线为virtio
qm set 1001 --virtio0 local-lvm:vm-1001-disk-0
# 我的RBD
qm set 1001 --virtio0 system_volumes:vm-1001-disk-0

# 修改虚拟机的引导顺序
qm set 1001 --boot c --bootdisk virtio0

# 虚拟机添加cloud-init硬件设备
qm set 1001 --ide2 local-lvm:cloudinit
# 我的RBD
qm set 1001 --ide2 system_volumes:cloudinit

# 设置串口显卡,否则你的虚拟机启动不了
qm set 1001 --serial0 socket --vga serial0

# 将虚拟机设置成模板(这个虚拟机只能被克隆,无法运行)
qm template 1001

Ubuntu

# 创建虚拟机
qm create 1002 --name ubuntu-server22.04-cloudimage-template --memory 2048 --net0 virtio,bridge=vmbr0

# 导入云镜像
qm importdisk 1002 ubuntu-22.04-server-cloudimg-amd64.img  local-lvm

# 设置总线scsi,你也可以设置成ide或者virtio
qm set 1002 --scsi0 local-lvm:vm-1002-disk-0 --scsihw virtio-scsi-pci

# 创建cloud-init设备
qm set 1002 --ide2 local-lvm:cloudinit

# 设置引导顺序
qm set 1002 --boot c --bootdisk scsi0

# 设置屏幕
qm set 1002 --serial0 socket --vga serial0

# 虚拟机变成模板
qm template 1002

CentOS

# 创建虚拟机
qm create 1003 --memory 2048 --name CentOS9-cloudimage-template --net0 virtio,bridge=vmbr0
 
# 导入下载的镜像到local-lvm 存储空间
qm importdisk 1003 CentOS-Stream-GenericCloud-9-20221206.0.x86_64.qcow2 local-lvm
 
# 将导入的磁盘以ide方式挂载到虚拟机上面,你也可以选择上面的virtio或者scsi
qm set 1003 --ide0 local-lvm:vm-1003-disk-0
 
# 添加 Cloud-Init 硬件
qm set 1003 --ide2 local-lvm:cloudinit
 
# 设置屏幕
qm set 1003 --serial0 socket --vga serial0
 
# 设置引导
qm set 1003 --boot c --bootdisk ide0
 
# 虚拟机变成模板
qm template 1003

使用模板

  1. 根据模板克隆一个虚拟机出来。

  1. 修改新虚拟机的CPU、内存、系统盘大小




从2GB增加到50GB

  1. 修改cloud init

  2. 启动

    启动后查看配置是否cloudinit的设置是否在linux中生效。

以上是关于PVE使用cloud-init快速启动虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

在本地KVM中使用cloud-init

pve虚拟机登录不了

pverecovery模式没加载虚拟机配置

pve直通硬盘跑不满

PVE虚拟化平台之创建虚拟机流程

Linux系统之虚拟化实战PVE下KVM虚拟机的嵌套安装方法