目录

Proxmox VE使用

概述

Proxmox Virtual Environment是一个基于QEMU/KVM和LXC的开源服务器虚拟化管理解决方案。你可以使用易于使用的集成Web界面或通过CLI管理虚拟机容器高可用性集群存储网络

镜像管理

导入ISO镜像

/posts/linux/tools/pve/upload_iso.png
导入ISO镜像

导入外部磁盘镜像

其他虚拟机管理器导出的虚拟机一般由一个或多个磁盘镜像和一个虚拟机配置文件(描述内存,CPU数量)构成。

如果虚拟机由VMware或VirtualBox导出,磁盘镜像有可能是vmdk格式,如果从KVM管理器导出,可能是qcow2格式。最流行的虚拟机导出格式是OVF标准,但实际上由于OVF标准本身不完善,以及虚拟机管理器导出的众多非标准扩展信息,跨管理器使用OVF往往受很多限制。

1
2
3
4
# 将磁盘镜像以unused0导入虚拟机600,存储位置为pvedir
qm importdisk 600 vm600.raw pvedir
# 最后将磁盘连接到虚拟机的SCSI控制器
qm set 600 --scsi0 pvedir:600/vm-600-disk-1.raw

Cloud-Init支持

Cloud-Init是事实上的multi-distribution package,用于处理虚拟机实例的早期初始化。使用Cloud-Init,可以在管理程序端配置网络设备ssh密钥。当VM第一次启动时,VM中的Cloud-Init软件将应用这些设置。

许多Linux发行版都提供现成的Cloud-Init镜像,主要是为OpenStack设计的。这些镜像也适用于Proxmox VE。创建此类Cloud-Init镜像后,我们建议将其转换为VM模板。你可以从VM模板快速创建链接克隆,因此这是推出新VM实例的快速方法。在启动新VM之前,你只需要配置网络(可能还有 ssh 密钥)。

Proxmox VE生成一个ISO映像以将Cloud-Init数据传递给VM。为此,所有Cloud-Init VM都需要分配一个CD-ROM驱动器。通常,应添加串行控制台并用作显示。许多Clo​​ud-Init映像都依赖于此,这是OpenStack的要求。但是,其他图像可能对此配置有问题。如果使用串行控制台不起作用,请切换回默认显示配置。

示例:创建一个Cloud-Init的VM模板

在进行这些操作之前,先准备好对应的云镜像,我们这里,在/var/lib/vz/template/iso位置上有一个jammy-server-cloudimg-amd64-disk-kvm.img镜像。

执行下面的语句来创建一个基于cloud image的VM:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# create a new VM with VirtIO SCSI controller
qm create 800 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci

# import the downloaded disk to the local-lvm storage, attaching it as a SCSI drive
qm set 800 --scsi0 local-lvm:0,import-from=/var/lib/vz/template/iso/jammy-server-cloudimg-amd64-disk-kvm.img

# 添加Cloud-Init的CD-ROM驱动
qm set 800 --ide2 local-lvm:cloudinit
# 并调整启动顺序,将第一启动项设置为从scsi0启动
qm set 800 --boot order=scsi0
# 设置显示为串口
qm set 800 --serial0 socket --vga serial0

设置这些完成之后,由于默认设置的scsi是比较小的,一般来说还需要调整下硬盘的大小:

/posts/linux/tools/pve/cloud-init-resize-disk.png
调整磁盘大小

需要注意的是,在设置ubuntu的Cloud-Init的时候,用户名要避免使用rootadmin这种,否则会失效。

然后设置好对应的Cloud-Init选项,如下图所示:

/posts/linux/tools/pve/cloud-init-options.png

若更改选项之后,需要选择重生成映象。然后执行下面的语句,将该虚拟机转换成VM模板:

1
qm template 800

之后就可以愉快的通过这个模板克隆出新的虚拟机了。

常见问题

  1. 使用集群出现:permission denied - invalid PVE ticket (401) 这个时候可能是时间没有进行对齐,可以参考解答

参考链接

  1. Official Wiki
  2. qm命令行工具使用说明
  3. PVE中文文档