分类目录归档:Proxmox VE

迁移Proxmox VE(KVM)虚拟机到VMWare ESXi

迁移前的准备工作

  • 记录下VMID和VM信息的对应关系——Proxmox VE关机以后这些数据很难找到
  • 关闭所有虚拟机
  • 把所有LVM类型的存储上的硬盘迁移到local类型存储上,以便提取文件

如果你像我一样面前摆着一块离线的Proxmox VE硬盘,想知道VMID和虚拟机名的对应关系,那么可以前往/var/lib/pve-cluster/config.db,用SQLite 3打开。

转换磁盘格式(第一遍)

/var/lib/vz/images/{VMID}文件夹下找到对应的磁盘镜像文件,然后用qemu-img做转换:

qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 100/vm-100-disk-0.qcow2 vm-100-disk-0.vmdk

(虽然这里写了adapter_type=lsilogic,但是和之后具体使用什么虚拟adapter没有直接关系。)

如果遇到以下bug,那么请更新qemu-utils

error while converting vmdk: compat6 cannot be enabled with hwversion set

传输镜像到ESXi

用网页管理面板或者打开SSH服务以后用SCP传输都行。目标位置:/vmfs/volumes/{your_disk_name}/

转换磁盘格式(第二遍)

从普通vmdk转换成flat的vmdk以能被ESXi使用。

vmkfstools -d thin -i origin.vmdk converted.vmdk

注意这样转换出来的是两个文件:一个converted.vmdk是元数据,一个converted-flat.vmdk是硬盘数据,二者必须保持一致的命名,如果要移动必须一起移动。不要自己给硬盘文件取名的时候在后面加-flat,这会导致问题。

后续设置

配置了静态IP的虚拟机可能需要重新配置,因为网卡名变了。


参考:

Proxmox VE中虚拟机非对等路由出站数据包被丢的情况分析

有客户反应,在Proxmox VE中的虚拟机,当一条进站TCP连接的进站方向路由经过隧道,而出站方向是直接走默认路由时,出站的数据包被丢。首先我们怀疑iptables:

# iptables-save | grep INVALID
-A PVEFW-Drop -m conntrack --ctstate INVALID -j DROP
-A PVEFW-FWBR-IN -m conntrack --ctstate INVALID,NEW -j PVEFW-smurfs
-A PVEFW-HOST-IN -m conntrack --ctstate INVALID -j DROP
-A PVEFW-HOST-IN -m conntrack --ctstate INVALID,NEW -j PVEFW-smurfs
-A PVEFW-HOST-OUT -m conntrack --ctstate INVALID -j DROP
-A PVEFW-Reject -m conntrack --ctstate INVALID -j DROP

看来确实配置了conntrack规则,丢掉没有正确建立连接的数据包。但是我们的虚拟机出去到上游路由器是同一个二层,数据包为什么会被丢呢?这就要说到Linux的bridge中有个功能是将所有经过bridge的数据包发给iptables过滤。让我们看看这个功能是否开启:

# sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

果然是开启的。Proxmox VE需要实现VM上的ipset,这个功能是必需的。

那么要解决这一问题,我们只能关闭Proxmox VE防火墙的丢弃INVALID包功能了。根据文档,新建或编辑/etc/pve/nodes/<nodename>/host.fw文件:

[OPTIONS]

nf_conntrack_allow_invalid: 1

然后重新启动防火墙服务以更新规则:

pve-firewall stop
pve-firewall start

参考:

Proxmox VE后台用作分销时的权限设定参考

需求:因为Proxmox VE不好接SolusVM之类的管理面板,所以我们在分销时直接把Proxmox VE自带的管理后台给用户。我们仅允许用户:

  • 开机,关机
  • 使用VNC功能
  • 挂载指定的ISO自行重装系统

参考配置方法如下。

Storage

创建一个叫iso的Datastore用于存放共享的ISO文件。

Pools

为每个用户创建一个pool。

Roles

创建EndUser role用于用户VM,Privileges:

  • Datastore.Audit
  • VM.Audit
  • VM.Config.CDROM
  • VM.Config.Disk(不给这个的话CDROM还是没法修改;但是因为没有Datastore相关的权限,用户是分配不了更多硬盘空间的)
  • VM.Console
  • VM.Monitor
  • VM.PowerMgmt

创建EndUserData role用于共享的存储空间,Privileges:

  • Datastore.Audit

Groups

创建一个User group。

Users

为每个用户创建一个user,Group设为上面创建的User。

Permissions

  • /storage/iso给User group一个EndUserData的role
  • /pool/{user}给对应用户账号一个EndUser的role

Proxmox VE 5.4不停机修改主机名

今天修理一台坏掉的Proxmox VE。打开网页管理面板一看,本来是单节点工作的机子上显示了两个节点,但是corosync并没有在运行。更为诡异的是,其中一个节点显示了本机的存储池,另一个节点显示了本机的虚拟机,各种状态API则是有的好有的坏。检查后发现,这台机子的主机名被人改过,但是PVE的一些设置没有同步,导致API出现了各种问题。这里就体现出了PVE的缺点:有些地方过度设计(例如用DNS查询来寻找所有节点),有些地方欠缺考虑(例如主机名不和系统同步),有些地方文档几乎没有。

经过研究,单节点的PVE修改主机名还算简单,只需要将几个不同地方的配置文件同步上即可。至于集群的PVE主机,我的建议是能少折腾尽量少折腾,毕竟身体最重要。

继续阅读