PVE下安装ESXI测试环境

启用嵌套虚拟化

验证节点CPU是否支持硬件辅助虚拟化

# cat/proc/cpuinfo |grep -E '(vmx|svm)'

有结果输出则CPU支持硬件辅助虚拟化,Intel的VTX(vmx)、AMD的AMD-V(SVM)

启用嵌套虚拟化

如果重载模块后 cat /sys/module/kvm_intel/parameters/nested 输出仍然为N,需要重启节点。

  • Intel编辑修改/etc/modprobe.d/kvm-intel.conf,重载模块
# vim /etc/modprobe.d/kvm-intel.conf 
options kvm ignore_msrs=y options kvm-intel nested=Y ept=Y
# modprobe -r kvm-intel kvm; modprobe kvm kvm-intel
  • AMD同intel一样,只是模块名称不同。
# vim /etc/modprobe.d/kvm-amd.conf 
options kvm ignore_msrs=y options kvm-amd nested=Y ept=Y 
# modprobe -r kvm-amd kvm; modprobe kvm kvm-amd

虚拟机设置

在启用嵌套虚拟化后,虚拟机的CPU类型需要设置为host

# qm set <vmid> --cpu cputype=host

或在web界面中直接修改

安装esxi

创建虚拟机的要求

  1. OS Type :Other
  2. CPU Type:host
  3. Network Type: VMWare vmxnet3
  4. NUMA:禁用 (启用NUMA无法启动到安装界面,failed to resolve circular relocation)
  5. SCSI Controller Type: Default (LSI 53C895A)

esxi创建虚拟机默认情况会无法启动,需要打开虚拟化嵌套

vim /etc/vmware/config  
vmx.allowNested = "TRUE"

pve集群中使用zfs replication做HA

这两天因为QNAP NAS意外断电,造成共享的NFS文件系统出现问题,而PVE原有的共享存储都是位于该NAS共享的NFS上。先是发现集群中vm的性能出奇的差,从vnc console登录进系统的时候都要卡许久,后发现大部分nginx转发的后端都出现502、503等无法访问的问题。在QNAP中检查修复文件系统后,服务才恢复正常。 所以想着还是找多两块硬盘,在两节点上各加一块,做ZFS Pool,在集群中使用zfs replicaion 做HA。

创建ZFS pool

要使用replication功能,必须使用ZFS文件系统。在每个节点中创建相同名称的zfs池。需要注意的是,在WEB UI中无法在不同节点中创建相同名称的ZFS存储,所以需要登录到每个节点中创建zfs pool,这里使用的是单硬盘。

# fdisk /dev/sda    ##如果是未分区的硬盘可以忽略
>> 进到 fdisk中按o清空分区表,按w保存退出
#  zpool create -f pve-cluster-zfs /dev/sda

在节点中创建完zfs pool后,就可以在web ui中添加存储。 在web管理页面中,点击Datacenter–Storage–Add–ZFS,填写ID <ZFS_REP>(后面创件虚拟机使用存储),ZFS pool选择先前创建的 pve-cluster-zfs。

创建测试虚拟机

创建新的虚拟机,HARD DISK Storage存储选中Datacenter中创建的ZFS_REP,大小设置为1G即可。

选中刚创建完的虚拟机,点击Replication–Add,将Schedule设置为”*/1″,每分钟创建同步一次。 一分钟后,应看到该任务被执行,如

2021-07-01 23:05:00 102-0: start replication job 2021-07-01 23:05:00 102-0: guest => VM 102, running => 0 2021-07-01 23:05:00 102-0: volumes => ZFS_REP:vm-102-disk-0 2021-07-01 23:05:01 102-0: create snapshot ‘replicate_102-0_1625151900‘ on ZFS_REP:vm-102-disk-0 2021-07-01 23:05:01 102-0: using secure transmission, rate limit: none 2021-07-01 23:05:01 102-0: full sync ‘ZFS_REP:vm-102-disk-0’ (replicate_102-0_1625151900) 2021-07-01 23:05:02 102-0: full send of pve-cluster-zfs/vm-102-disk-0@replicate_102-0_1625151900 estimated size is 29.1K 2021-07-01 23:05:02 102-0: total estimated size is 29.1K 2021-07-01 23:05:02 102-0: TIME SENT SNAPSHOT pve-cluster-zfs/vm-102-disk-0@replicate_102-0_1625151900 2021-07-01 23:05:03 102-0: successfully imported ‘ZFS_REP:vm-102-disk-0’ 2021-07-01 23:05:03 102-0: end replication job

schedule:这里设置的schedule */1只是为了快速测速看到结果用,实际使用视情况而定,如考虑虚拟机的镜像大小,网络带宽等。

创建HA

Datacenter–HA–Groups–Create,创建TESTREP组,选中HA节点并设置优先级。 Datacenter–HA–Add,选中VM102,group选择TESTREP。

# ha-manage groupadd TESTREP -nodes "node1:1,node2:2"
# ha-manager add vm:102 --state started --group TESTREP --max_relocate 2

只在部分节点上存储池需要做节点访问限制,restriction限制访问节点,storage.cfg配置如下

# vim /etc/pve/stroage.cfg
zfspool: px-zfs-z1
        pool px-zfs-z1
        content images,rootdir
        mountpoint /px-zfs-z1
        nodes pve
        sparse 1

nodes: 指定节点

如果没有做节点访问限制,虚拟机在HA迁移时候会报错:

Failed to sync data - could not activate storage 'Migration of VM between nodes failed - could not activate storage 'px-zfs-z1', zfs error: 

Ubuntu中使用cockpit管理kvm虚拟机

cockpit

使用cockpit管理kvm需要安装cockpit本身,还有cockpit-machines组件来管理虚拟机

$ sudo apt update
$ sudo apt install -y kpit cockpit-machines
$ sudo systemctl start cockpit

kvm、qemu、libvirt

安装kvm、qemu、libvirt相关工具

$ sudo apt install qemu qemu-kvm libvirt-bin  bridge-utils  virt-manager
$ sudo systemctl start libvirtd
$ sudo systemctl enable libvirtd

创建虚拟机无法启动network相关问题

在安装完成kvm后从cockpit中创建虚拟机时报错:libvirtError: Requested operation is not valid: network ‘default’ is not active,在用virsh 尝试激活default network失败。

$ sudo virsh net-start default

error: Failed to start network default
error: internal error: Failed to initialize a valid firewall backend

从错误信息中可以看到,无法初始化防火墙后端,需要安装firewalld,然后重启libvirtd

$ sudo apt update && sudo apt install firewalld -y
$ sudo systemctl enable --now firewalld
$ sudo systemctl restart libvirtd****

virt-manager

无法创建虚拟网络:Failed to initialize a valid firewall backend

安装ebtables、dnsmasq,重启libvirtd

##debian
apt install ebtables dnsmasq

##arhch
pacman -S ebtables dnsmasq