传统ISO镜像装机时,需要一步一步规定虚拟机,比如系统盘安装在哪个磁盘里,ip是多少,root密码是多少,然后执行安装。安装时会下载许多系统包,整个过程耗时10分钟-30分钟,非常的慢。
大家在使用公有云的时候就很爽,可以在创建云服务器的时候,规定root密码、内网IP地址、DNS服务器等信息。第一次创建虚拟机到启动成功只要2分钟。这种开箱即用的爽感其实是cloud-init的功劳。
其实各种linux系统发行版除了有传统ISO镜像外,还有云镜像。云镜像一般是qcow文件或者raw文件。在启动之初如果虚拟机有cloud-init硬件并规定好信息后,虚拟机能在几秒-1分钟内启动好linux系统,无需一步一步手动设置。而且更改配置比较方便。而且云镜像支持resize,当虚拟机正在运行的时候增大系统盘(pve无法缩小系统盘)。
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支持的最好的是Ubuntu Server。
包括PVE、ovirt、Harvester在内的众多超融合方案中,对虚拟机硬盘卷volume的虚拟化方式无非是3种:
任意一台物理机执行一下命令,创建模板机
# 创建虚拟机
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
# 创建虚拟机
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的话,在cloud-init类的image中无法正常启动,ide性能过低,所以只能用virtio
# 查看命令支持哪些scsi设备,使用命令qm help set,然后找--scsihw。
# --scsi0创建的系统盘无法启动,别用。
qm set 1002 --scsi0 local-lvm:vm-1002-disk-0 --scsihw lsi # 别用
qm set 1002 --virtio0 system_volumes:vm-1002-disk-0 # 用virtio0!
# 创建cloud-init设备
qm set 1002 --ide2 local-lvm:cloudinit
# 设置引导顺序
qm set 1002 --boot c --bootdisk virtio0
# 设置屏幕
qm set 1002 --serial0 socket --vga serial0
# 虚拟机变成模板
qm template 1002
scsi类磁盘的cloud image无法启动!如下图。所以不要创建scsi0 !!!
# 创建虚拟机
qm create 1003 --memory 2048 --name CentOS7-cloudimage-template --net0 virtio,bridge=vmbr0
# 导入下载的镜像到local-lvm 存储空间
qm importdisk 1003 CentOS-7-x86_64-GenericCloud-2009.qcow2 local-lvm
# 将导入的磁盘以ide方式挂载到虚拟机上面,ide全虚拟化的性能差,你也可以选择上面的virtio
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
# 克隆机器
# 命令格式是 qm clone 模板id 新vm的id --name 新vm的名称
qm clone 1001 103 --name k8s-master-01
# 设置cpu的通道数socket和核心数core
# 下方命令设置2通道4核心,占用物理cpu 8个线程。模拟物理环境中的2核每核心有4个线程。
# 虚拟CPU中的核心=物理CPU的线程,虚拟CPU的通道=物理CPU的核心,虚拟CPU的个数=物理cpu的路数(几颗cpu)
# 物理CPU占用量=虚拟个数*虚拟通道数*虚拟核心数,概念有点绕,所以大家包涵一点,我也没办法。
qm set 103 --sockets 2 --cores 4
# 设置内存
# PVE要求内存单位是MB,内存数为整数且是16的倍数,默认512
qm set 103 --memory 16384
# 加大系统盘,下方命令中的磁盘接口按照你实际设置来。
qm disk resize 103 virtio0/scsi0/ide0 +48G
# 设置cloud-init
qm set 103 --nameserver 192.168.0.1 \
--ipconfig0 ip=192.168.1.13/23,gw=192.168.0.1 \
--ciuser root \
--cipassword 1234567890
# 由于模板机和新建机都在一个物理机上,所以需要迁移到其他服务器上,填上目标物理机的名字。
qm migrate 103 server003
# 启动VM
qm start 103