ESXi on Arm 10/22 更新

前些天在ESXi on Arm — 树莓派4b安装ESXi中体验了在树莓派4b上使用ESXi on Arm。一些Arm64虚拟机用了十几天体验还可以。用Arm虚拟机体验了一些应用,比如Pi-hole,HomeAssistant,OpenMediaVault,AdGuard Home等等。

今天看到ESXi Arm Edition这里在10/22更新了新版本,有了一些Bug修复和新功能。

Changelog中首先声明的就是不能升级安装。但是可以选择Preserve VMFS的方式安装。安装好以后原有的虚拟机的Datastore里的虚拟机文件夹都还在,可以通过注册虚拟机的方式重新添加就可以用了。

下载镜像VMware-VMvisor-Installer-7.0.0-17068872.aarch64.iso,写入一个新的U盘(非之前已安装ESXi的U盘)。macOS下我用balenaEtcher写入。

原有ESXi关闭所有虚拟机,进入维护模式(其实没太大意义,因为我们不是升级),关机。

插入新写好的U盘,接上键盘。开机。(比如说我原有ESXi在三星U盘上,新写好的是金士顿)。

在白色树莓界面,按ESC,进入UEFI启动菜单,选择从新写好的金士顿U盘启动。启动界面还是跟之前一样记得按Shift+O去修改autoPartitionOSDataSize=xxxx。

加载完毕,选择安装在三星U盘后,会弹出如下提示:

在当前安装介质发现了已有VMFS

选择preserve。然后后面安装步骤都一样了。

安装好以后,拔掉安装的金士顿U盘,重启。

启动完毕后,应该默认是DHCP,如果分配到的IP和之前不一样,可以进去修改一下静态地址,设置dns之类的。(ESXi系统本身是全新的,只是虚拟机文件的的VMFS datastore还在。所以其它NTP之类的设置也要重新去设置。)

一切设置完毕后。浏览器访问该VMFS datastore。选择注册虚拟机。

注册虚拟机

选择虚拟机文件夹,选择可选的vmx文件,点击注册。

注册

注册成功。

注册成功

在虚拟机菜单下可以看到该虚拟机。可以选择操作编辑设置去确认是否有丢失的配置。

虚拟机菜单

重复以上步骤注册其它虚拟机,不需要的虚拟机可以按文件夹去删除。

全部注册完毕

检查完设置没问题以后,虚拟机开机检查。

除了我暂时不用的Pi-hole,都开机了。

开机

最后简单过一下更新说明:

Fix for https://flings.vmware.com/esxi-arm-edition/bugs/1098 (PSOD adding to VDS) 修复加入分布式交换机时紫屏的bug,我之前版本也加入VDS了,没遇到bug。

Support for Arm N1 SDP platform 新设备支持。

Support for VMs on Neoverse N1 CPU 没太懂,之前使用这个CPU不支持创建VM吗?和上面一行是相关的吧。

Support for UEFI-less VMs 支持非UEFI的VM,是指DeviceTree么?

Pass-thru stability improvements to LS1046A and LX2160A platforms 对两个平台的直通稳定性的提升。

Fix for vCenter/DRS incorrect CPU usage 对vCenter/DRS中错误显示CPU使用率的修复。

Fix for VM crash when VM storage fills up 修复VM在VM存储占满后崩溃的问题。

Stability fix for non-coherent DMA device support 不太懂,提升该种设备的稳定性。

Installer: tolerate RAM size within 4% of 4GB instead of 3.125 (for the otherwise unsupported RK3399 boards) 对4GB内存的限制的允许误差修改为在-4%以内,之前为-3.125%。相当于放宽了一点点内存限制,应该是因为RK3399达不到-3.125%之内。

Serial port handling improvements (for unsupported/unknown boards, to be a bit more resilient of firmware configuration errors) 对串口处理的一些改进。

ESXi on ARM中安装Raspios-buster-arm64

看到标题是不是就觉得这是瞎折腾?

没错。如果树莓派4b中安装了ESXi on ARM,在ESXi中再安装Raspios,性能肯定不如直接使用树莓派4b裸装Raspios。

但是如果你使用一台8G版本树莓派4b,单独用一个Raspios又有点浪费了。可以试着在ESXi中多装几个Arm Linux系统,比如CentOS,Raspios,Ubuntu。然后可以在ESXi中随意切换虚拟机开关机。甚至可以同时运行几个Arm Linux系统,榨干它的性能。ESXi是可以超配的。如下图(各个虚拟的Linux空载时)。另外,还可以用到虚拟机的快照,克隆等功能,方便在上面开发测试软件,比如Pi-hole之类的。

同时开启5个Arm Linux虚拟机

Ubuntu,PhotonOS,Debian,CentOS在https://flings.vmware.com/esxi-arm-edition中附带的Pdf文档都说明了是支持并验证过的,方法也就是挂载ISO文件,去安装虚拟机。我就不做演示了。下面演示下装Raspios的过程。

因为官方下载到的2020-05-27-raspios-buster-arm64.img 并不默认支持EFI启动,而ESXi on Arm又只支持EFI启动,所以无法直接使用该镜像,我们要借助Debian的rescue mode来解决这个问题。

1. 下载raspios的img。使用StarWind V2V Converter转成vmdk(2个文件,上传至ESXi的datastore后显示成1个)。

2. 下载debian-10.6.0-arm64-netinst.iso,上传至datastore。

3. 创建虚拟机,类型Linux-Debian 10 x64。删掉原有虚拟的硬盘,添加上面转过的vmdk作为硬盘。光驱里加载Debian的iso文件,记得勾选上已连接,并去虚拟机选项里把引导选项的强行执行EFI设置的下次引导钩上。然后保存。cpu可以分2个核,内存1G或者2G都可以。网卡确保是能连外网的。

记得勾选这个

4. 启动虚拟机,去EFI设置的boot选项里,选择光驱启动 EFI DVD/CDROM。

5. 加载Debian,选择Advanced options,然后Rescue mode。

Advanced options
Rescue mode

6. 语言,国家,键盘都默认即可。

7. 随意设置一个Hostname, Domain name, time zone.

8. Device to use as root file system 选择 /dev/sda2,一定不要选错。然后Mount separate /boot选Yes。在/dev/sda2中运行shell。

/dev/sda2
Yes
/dev/sda2

9. Continue。

Continue

10. 接下来在下方依次输入下面几行命令,注意因为需要联网下载,所以每一步都需要很长时间(根据网络情况而定)。如果某一步没有成功,一定要再执行一遍确保成功了再下一行。如果提示空间不足之类的,那就apt autoremove; apt autoclean之类的试试。

apt update
apt install linux-image-arm64
apt install grub-efi-arm64
grub-install --efi-directory=/boot/
update-grub
exit

整个过程其实就是通过debian的rescue去给raspios加了grub-efi启动选项支持。

11. 关闭虚拟机。 把Debian的ISO虚拟光驱断开连接并且去掉打开电源时连接。

12. 开机,等待第一个启动选项自动加载。完成后就看到熟悉的树莓派系统了。

13. 初始化设置。先不要更新,因为应该会遇到空间不足的问题。

14. 关机。加大硬盘的容量,比如扩大到20G。

扩大硬盘

15. 保存,开机。进入系统后去sudo raspi-config。选择第7项 Advanced Options。

第七项

16. 选择A1 Expand Filesystem。

A1

17. 然后重启检查下硬盘是不是扩大了。

已扩容

18. 可以apt update或upgrade啦。

19. 如果想安装open-vm-tools,可以按照ESXi-Arm-Fling-Doc.pdf文档中的第12步操作编译,该文档是Ubuntu中的步骤,Debian同样适用。

VMware Tools

ESXi on Arm — 树莓派4b安装ESXi

昨天VMware官方博客发布了https://blogs.vmware.com/vsphere/2020/10/announcing-the-esxi-arm-fling.html。以fling(非正式产品,属于社区性质的早期阶段产品,旨在从用户处得到一定的反馈和测试)的形式发布了esxi-arm-edition 。

具体的一些安装要求可以参照requirements

对于个人用户,可以使用4G和8G版本的树莓派4b来安装此版本ESXi.

简单总结了几点要求:

更新EEPROM(支持U盘启动)到最新并刷UEFI引导固件(ESXi on Arm需要,使用存储卡),具体步骤可以参考fling中的pdf或者树莓派4 U盘启动+ UEFI引导 (4G版树莓派4b要去启动设置中将 Limit RAM to 3GB 禁用。)

注册My VMware并下载fling中的ESXi ISO文件,制作U盘启动盘(也可以在安装时把ESXi宿主系统安装在这个U盘或USB移动硬盘上,建议使用USB3.0,如果只用作ESXi系统,不用于虚拟机Datastore,有16G或者32G就足够了。USB移动硬盘可以是Sata,也可以是NVMe)

USB外接键盘和HDMI接口的显示器

带外接电源的USB3.0 hub,我用的是奥睿科的某款(非广告,理论上此类可独立供电hub都可以)

Youtube上找到一个视频教程,还是很不错的,安装部分在后面。

安装步骤如下(也可参照pdf):

1. 将Hub与树莓派4b的usb3.0连接并接入独立电源,键盘通过usb2.0连接,显示器通过HDMI连接,U盘启动盘插入Hub。

2. 通电开机,在白色树莓界面,按ESC进入启动设置,到启动顺序中将U盘调整至最前,保存设置使生效。

3. 启动出现ESXi安装进度条,如果需要调整ESXi系统空间大小,可以在此时按Shift+O,在最下方的启动命令后方空格加上autoPartitionOSDataSize=xxxx 比如8G空间就是8192,这样剩余的U盘空间还可以在系统安装成功之后通过https://koolshare.cn/thread-180336-1-1.html此文的方法创建Datastore。

4. 接下来的界面和步骤对于熟悉ESXi安装的朋友就不会陌生了。

显示版本为7.0.0
熟悉的加载过程
关于Fling版本的一些说明
EULA
选择安装介质
选择键盘layout,默认即可
设置Root密码
提示此安装介质将会被重新分区
安装进度条走的很快
安装完成
启动后自动获取IP

如果安装之前没有把U盘启动顺序调到前面,可以在安装好ESXi之后再去UEFI的启动顺序中设置。

安装之后,可以在上方启动成功后的界面按F2,输入Root密码去设置网络或者开启ESXi Shell等常规设置。然后就可以在局域网中通过vSphere client网页https://192.168.1.77 (上方DCUI界面显示的IP)去进一步设置了。

vSphere Web Client界面,包括专门设计的小图标

登陆之后,如果不是中文,建议去网页上方的下拉菜单的设置中切换语言。

点击下拉菜单切换语言
ESXi首页

几个推荐的设置或实践:

管理→系统→时间和日期,Edit NTP Settings, 设置使用网络时间协议,随主机启动和停止,NTP服务器可以使用你自己熟悉的时间服务器,比如ntp1.aliyun.com,保存。切换到服务菜单,启动ntpd服务。稍等一会,在切换到时间和日期页面,时间就会同步成功了。此处的时间还是以UTC时区显示,但其它近期任务等事件的时间戳都会是你所在的时区了,比如东八区。

如果没有在ESXi的黄色DCUI界面开启ESXi Shell和SSH服务,可以在网页客户端的服务中将TSM和TSM-SSH服务启动(请根据需求开启)。

个人使用可以用root账户来进行今后的管理操作,如果涉及多用户,建议在安全和用户菜单中,针对某一系统预设的角色添加用户,或者添加符合自己需求的特定角色后,再添加用户。

如果不方便使用USB存储来做Datastore,可以添加一个iSCSI存储来做Datastore,此操作可以通过ESXi shell来设置,也可以通过网页端操作。以ESXi shell为例:

    esxcli iscsi software set -e true 开启软件iSCSI

    esxcli iscsi adapter list 查看iSCSI适配器信息

查看iSCSI适配器

   把iSCSI适配器与vmk0绑定

绑定iSCSI适配器

    添加iSCSI target (我在局域网的群晖中划分了一部分硬盘做iSCSI)

添加已有的target

    重启ESXi后,此Datastore就会在数据存储菜单中看到了。

iSCSI Datastore

pdf文档中列出了目前支持的客户机系统

Ubuntu 20.04 LTShttps://ubuntu.com/download/server/arm

CentOS Linux 8http://isoredirect.centos.org/centos/8/isos/aarch64/

openSUSE Leap 15.2http://download.opensuse.org/ports/aarch64/distribution/leap/15.2/iso/

Photon OS 3.0https://github.com/vmware/photon/wiki/Downloading-Photon-OS

Debian 10.xhttps://cdimage.debian.org/debian-cd/current/arm64/iso-cd/

Fedora 32 Serverhttps://getfedora.org/en/server/download

以Ubuntu为例,下载ubuntu-20.04.1-live-server-arm64.iso,上传至Datastore,供创建虚拟机时做光盘引导。

选择ISO作为引导盘
安装过程

安装成功

Arm版Ubuntu安装成功

在ESXi首页的资源使用情况图中,可以看出来4G版Pi 4b在安装两个虚拟机之后内存是瓶颈了(我还装了一个VMware Photon虚拟机),所以更推荐使用8G版Pi 4b,一台树莓派上可以同时运行几个客户机,比如Ubuntu,Debian,CentOS等。

资源占用

Tips:

此版本ESXi on Arm中没有自带VMware Tools的安装文件,所以无法通过虚拟机操作菜单安装,不过ESXi-Arm-Fling-Doc.pdf文档中,提供了创建虚拟机之后在虚拟机中编译并安装Open VM Tools的步骤。

编译的Open VM Tools被识别

已知问题:

USB3.0性能达不到协议上限,使用USB3.0的外接网卡(比如一些螃蟹USB网卡)时最高只能达到200Mbps。

监控中的网络和磁盘数据不准确,是因为I/O驱动的问题,目前还在开发中。

不同SoC的ARM设备之间不能进行vMotion,比如eMAG和树莓派之间。

此试用license为180天,过期需要重新安装,理论上也可以用其它有效的x86版vSphere license来授权。

此次ESXi on Arm并非只为树莓派设计,更多的使用场景和以后的发展方向应该是一些Arm-based SmartNICs,或者其它ARM服务器。Nvidia收购ARM之后,最近的VMworld2020大会上,Nvidia和VMware也宣布了一些合作,其中包括Project Monterey。(和NVIDIA, Pensando, and Intel这三家SmartNIC顶级厂商都建立了合作伙伴关系)有兴趣的可以去链接中查看或者网上搜索下。

相关文章

我的ESXi on Arm硬件

树莓派4 U盘启动+ UEFI引导

vSphere Clustering Service (vCLS)

更新vCenter到7.0 Update1之后,发现虚拟机视图下,多了一个vCLS文件夹,并且下面有3个虚拟机。

vCLS

官方博客文章了解到这是vSphere7.0 Update1新引入的vSphere Clustering Service,简单来说,把一部分控制平面的功能,从vCenter中解耦,并且分布式的由最多3个轻量级虚拟机per Cluster(VMware PhotonOS)分担。当ESXi少于3个时,vCLS虚拟机个数等于ESXi个数。

从介绍来看,这三个虚拟机的生命周期不需要用户或者管理员去处理,而是通过vSphere ESX Agent Manager来管理的,如果我们强行对某一vCLS虚拟机关机,那么Manager检测到少了一个vCLS虚拟机时,会再把它开机。如果我们关闭vCLS虚拟机后快速把虚拟机删除掉,那么Manager就会再创建一个vCLS虚拟机。实际测试也是这样的。

可以想像到今后vSphere会尝试把更多的控制平面服务解耦并分布式部署,有点微服务的意思了。

PS: 因为这个轻量级虚拟机目前还只有X86版,所以如果vCenter7.0Update1的cluster加入了ESXi on Arm的host,那么是无法创建vCLS虚拟机的,就会发现日志里一直在尝试创建,然后又删除。。。解决办法目前只能是Arm的host不加到Cluster里,或者不升级Update1的vCenter。

10月21日更新:

思科警告它的HyperFlex用户不要升级vCenter7.0 Update1,其中提到EAM会尝试关闭其HyperFlex controller VMs(和vCLS相似功能)并删除。(从上面我们看EAM确实会对vCLS VMs进行生命周期的控制),看来是个兼容性的问题。😓

https://www.theregister.com/2020/10/20/cisco_hyperflex_vmware_warning/

尝试绕过ESXi最小4GB内存的安装检查

声明:此文使用的方法在很早的版本ESXi安装时就有人使用过,可以绕过检查,但并不推荐在小内存机器上安装ESXi。

更新说明:如果安装过程遇到图2的内存检查错误时再使用此方法,有些朋友反映在图1处显示为3.6G内存时,安装一会就会显示一个紫色背景的错误消息,根本进不到后续的操作步骤,这种情况就无法使用此方法了。

有些机器本身是4G内存,也许因为部分内存被核显使用,或者需要被BMC/BIOS/UEFI预留,或者其它ESXi的计算方法,会在启动是显示为3.xGB内存,这样因为差一点点内存不能使用ESXi还是有点可惜的,就可以想办法绕过内存检查脚本。

方法步骤如下:

1. U盘启动安装ESXi,在黄色背景界面看到内存为3.7GiB(我使用物理ESXi嵌套安装,分配的3.75GiB内存)。

识别到3.7 GiB内存

2. 同意协议,选择安装介质,设置密码等一系列操作后,遇到内存检查错误,提示需要4.00 GiB。

内存检查错误

3. 在上图界面键盘按下ALT+F1,进入下图界面,然后用户名root,密码为空(之前设置的密码还未生效)。

ALT+F1进入Shell

4. 执行如下命令切换到检查脚本所在目录。

cd /usr/lib/vmware/weasel/util

5. 备份原有脚本,设置权限, 然后vi修改。

mv upgrade_precheck.py upgrade_precheck.py.bak
cp upgrade_precheck.py.bak upgrade_precheck.py
chmod 666 upgrade_precheck.py
vi upgrade_precheck.py

6. vi编辑器中搜索 “MEM_MIN_SIZE”,在vi中输入/MEM_MIN_SIZE。

vi搜索MEM_MIN_SIZE

7. 第一次搜索命中结果应该定位到如下图光标位置。

第一次命中结果

8.我们要修改的就在下方,使用光标定位到下面或者在搜索时按下n键去找第二次命中应该就是了。

需要修改的部分

9. 定位光标到第一个4后面,按i进入编辑模式,退格删除4,修改为2。

修改最小内存为2GiB

10. 按ESC进入命令模式,输入:wq,回车保存退出。

11. 执行下面的命令(杀掉当前的python进程)。

kill -9 $(ps -c | grep weasel | grep -v grep | awk ‘{print $1}’)

12. 然后就又回到熟悉的安装界面了。

回到安装界面

13. 一系列操作后,原来的内存检查错误界面不会出现了,出现了擦除安装介质的对话框,F11继续。

没有再次出现内存检查错误

14. 然后就是等进度条啦。

开始等进度条

15. 安装结束,提示拔下ESXi安装盘,比如U盘,然后回车重启。

安装完成

16. ESXi重启加载完毕后。

重启完毕

17. 访问ESXi网页控制台,3.75 GB内存正常使用。

3.75GiB正确识别并启动成功

ESXi直通核显

常见的ESXi直通显卡都是直通独立显卡给Linux,macOS或者Windows,这样接上显示器,直通USB键鼠以后使用体验和物理机相差就很小了。也不需要通过VMware Remote Console或者VNC,RDP等形式远程访问了。

我们买的工控机或者NUC,Mac Mini等用来玩ESXi的设备往往都是有核显的,在ESXi中核显除了在开机自检过程中被ESXi获取一次控制权或者用户需要连上显示器查看ESXi的DCUI界面(熟悉的ESXi黄色背景后台)之外,显卡并不会作为硬件设备被ESXi虚拟化后提供给虚拟机使用。(ESXi目前被官方支持的显卡虚拟化只支持Nvidia Grid,也就是说跟消费者级别显卡无缘)。

为了让仅有的核显发挥余热,我们就可以尝试把它直通给虚拟机,做硬解使用。(目前测试发现ESXi下直通的核显无法外接显示器使用。

尝试的步骤如下:

1. 在Hardware->PCI Devices中,选中核显,点击Toggle passthrough,如果提示重启请重启ESXi。如图,我的是UHD 630.

直通核显

2. 在将设备添加到虚拟机之前,设置好虚拟机的远程访问,如Windows的RDP,macOS的Screen Sharing或者Linux的VNC,防止直通核显后VMware Remote Console访问有问题。

我以虚拟的macOS举例,所以打开macOS中的Screen Sharing,配置好可以访问的用户,记住地址。

3. 编辑虚拟机,添加PCI设备,或动态PCI设备。选择该核显,然后预留所有内存,保存设置。

添加PCI device

4. SSH访问ESXi,运行esxcli system settings kernel set -s vga -v FALSE(当不需要直通核显时记得改回来,把FALSE改成TRUE执行一下),让ESXi启动时不去获取显卡控制权,然后重启ESXi。

5. 重启ESXi之后,启动macOS虚拟机。然后通过Screen Sharing去远程访问它。登陆进去以后,查看System Report中的Graphics,应该如图一样可以同时看到虚拟显卡和直通的核显。

系统中可以看到直通的核显

Tips: 如上设置后,DCUI界面不能直接访问了,可以通过如下操作借用SSH访问:

1)SSH连接ESXi

2)输入TERM=xterm。(mac的终端需要,windows下的Putty等不需要)

3)输入dcui

这时就看到熟悉的DCUI界面了,如果想退出可以在shell中Ctrl+C结束dcui。

ESXi直通USB键鼠

使用ESXi时,我们有时会直通网卡或者显卡给虚拟机使用,让虚拟机独占该物理设备,减少虚拟化造成的性能损耗,相关教程网上也比较多。今天我们来尝试下直通USB键鼠,这样虚拟的桌面系统(Windows,Linux,macOS等)就可以配合直通显卡接显示器以后直接当一台物理机使用了。

1. 首先要查询USB键鼠的VID和PID,在windows,macOS系统上插上设备查询或者插在ESXi主机上利用lsusb查询都可以。

查询设备pid和vid

图中是vid在前,pid在后。Cypress这个是我的Filco键盘,Dell这个就是个鼠标。

2. 通过ESXi网页终端来编辑虚拟机的高级设置或者ssh到ESXi修改虚拟机的vmx文件,加入允许USB HID设备开关和具体直通的USB设备id。

编辑设置->虚拟机选项->高级->编辑配置。

编辑配置

添加如下参数,vid在前,pid在后。确定,保存。

添加参数

3. ssh访问ESXi,并使用vi修改/etc/vmware/config,  加入上面添加的要直通的设备ID。

添加直通USB设备ID

4. 如上设置后下次ESXi重启时VMkernel还会获取设备的控制权,我们需要到ESXi启动引导中禁用掉VMkernel对上述设备获取控制权。

ssh到ESXi里,使用vi修改/bootbank/boot.cfg, 在启动参数后面加上CONFIG./USB/quirks=0x04b4:0x120d::0xffff:UQ_KBD_IGNORE:0x413c:0x301a::0xffff:UQ_KBD_IGNORE

(顺序为vid:pid::0xfff)

修改ESXi启动引导参数

保存后重启ESXi,然后我们就可以编辑虚拟机设置来添加USB键鼠设备了。

5. 添加其它设备,USB设备,自动会同时创建一个USB控制器,键鼠用USB2.0即可。

添加USB设备

6. 保存后启动该虚拟机系统,如果直通了显卡并外接显示器,那么就可以直接看着显示器里该系统启动,并且可以使用USB键鼠来操作了。

在虚拟机中lsusb查看直通的USB键鼠

以上操作步骤参考了troubleshooting-device-passthrough-with-vmware-workstation-and-vmware-fusion, how-to-passthrough-usb-keyboard-mouse-hid-and-ccid-devices-to-vm-in-esxi 和 passthrough-usb-devices-from-esxi-to-vm

另外,此方法并非官方推荐的做法,根据 https://kb.vmware.com/s/article/1021345,官方更加建议使用一个PCI插槽的USB controller (上面有USB 接口), 把整个controller设备直通给VM ,然后让虚拟机系统来识别连接在上面的USB设备。适用于常见的USB设备如键鼠,耳麦,智能卡读卡器,U盾等。除了主机板载的USB controller之外,类似的PCI USB controller如下面的型号都可以使用:

NEC chipset PCI-E usb3 controller(Chipset: NEC d720200, model:MC210)

Ti chipset PCI-E usb3 controller

远程访问ESXi网页控制台

安装完ESXi之后,最常用的管理方式就是访问ESXi的网页控制台,在局域网里访问很简单,直接访问ip就行了,比如https://192.168.1.99。如果不在局域网里该如何远程访问呢?

首先,宽带最好有公网IP,(动态的要配好DDNS),如果没有公网IP,要使用frp之类的做内网穿透。我这里拿最简单的有公网IP并配好DDNS来举例,假设我宽带公网IP使用DDNS绑定的域名是home.abc.com。

其次,要在宽带光猫或者桥接以后拨号的路由器上做端口转发。这里拿桥接以后用来拨号的路由器来举例。先弄明白需要转发的目标地址和端口号,目标地址就是ESXi所用的192.168.1.99,根据https://ports.vmware.com/home/vSphere,vSphere Web Client使用TCP 443和902来做Client connections。所以我们转发这两个端口就可以了。

需要转发的目标端口

国内运营商在大部分地区都封禁了个人宽带的443,80等端口。我们就要用其它端口来转发443。我在我的路由器里做出如下端口转发规则:

端口转发规则

有些路由器会对端口转发规则自动设置入站的防火墙规则,这种情况下设置了如上端口转发规则以后就可以通过https://home.abc.com:9443在外网访问ESXi网页控制台了。

有些路由器(比如我使用的UBNT ER-X路由器),端口转发进来的流量还要加防火墙入站规则,于是我加了如下防火墙规则:

防火墙规则

假如想限制特定的外网IP段来访问此ESXi,那么可以在防火墙规则中设置Source IP,我这里留空(允许所有外网IP访问)。

现在通过一台外网的机器(连接手机运营商4G网络)来访问https://home.abc.com:9443。

没有为该域名申请证书

因为我没有为该域名申请证书,所以访问时提示不安全,我们点“继续前往”。

访问ESXi网页

使用管理员账号密码登录并切换到虚拟机管理。

虚拟机管理页面

点击黑色预览窗口,使用浏览器控制台访问该虚拟机。

使用浏览器控制台访问虚拟机

一切使用正常。如遇到其它功能使用有问题,建议查阅上面提到的端口列表网页,检查是否有其他端口需要做转发。

最后,从安全实践来考量,把ESXi控制台直接暴露在公网访问并不是一个推荐的做法,建议在路由器上启用L2TP等VPN服务,在外网时,机器先通过L2TP VPN连入内网,然后通过https://192.168.1.99的局域网地址访问ESXi。

如何不让ESXi7.0的虚拟闪存占掉你的小硬盘

在ESXi7中,根据https://docs.vmware.com/cn/VMware-vSphere/7.0/com.vmware.esxi.install.doc/GUID-DEB8086A-306B-4239-BF76-E354679202FC.html的如下说明:

ESXi7.0 安装或升级的存储要求

要安装 ESXi 7.0,USB 或 SD 设备的引导设备至少需要为 8 GB,其他设备类型的引导设备至少需要为 32 GB。要升级到 ESXi 7.0,引导设备至少需要为 4 GB。从本地磁盘、SAN 或 iSCSI LUN 引导时,要求具有 32 GB 磁盘以便能够创建系统存储卷,其中包括引导分区、引导槽和基于 VMFS-L 的 ESX-OSData 卷。ESX-OSData 卷负责旧版 /scratch 分区、VM-tools 和核心转储目标的工作。
建议的 ESXi 7.0 安装选项如下所示:
    8 GB USB 或 SD 以及额外的 32 GB 本地磁盘。ESXi 引导分区位于 USB 或 SD 上,ESX-OSData 卷位于本地磁盘上。
    至少具有 32 GB 的本地磁盘。该磁盘包含引导分区和 ESX-OSData 卷。
    本地磁盘为 142 GB 或更大。该磁盘包含引导分区、ESX-OSData 卷和 VMFS 数据存储。
ESXi 7.0 系统存储卷最多可占用 138 GB 的磁盘空间。仅当本地磁盘设备至少有 4 GB 的额外可用空间时,才会创建 VMFS 数据存储。要与本地 VMFS 数据存储共享引导设备,您需要使用 142 GB 或更大的本地磁盘。
如果找不到本地磁盘,则 ESXi 7.0 会在降级模式下运行,即某些功能处于禁用状态,且 /scratch 分区位于 RAM 磁盘上并链接到 /tmp。您可以重新配置 /scratch 以使用单独的磁盘或 LUN。为实现最佳性能和内存优化,请勿在降级模式下运行 ESXi。
升级到 ESXi 7.0 的过程会对引导设备重新进行分区,将原始核心转储、locker 和暂存分区整合到 ESX-OSData 卷中。如果未配置自定义核心转储目标,则默认核心转储位置为 ESX-OSData 卷中的一个文件。

按照官方文档,如果我们想用的硬盘既做系统分区,又想把剩余空间做Datastore,那么至少需要分配142GB空间。小于142GB时则不能创建Datastore。实测使用140G HDD硬盘时稍有出入,但可见Datastore空间VMFS只有12G左右,OSDATA Volume大概占用120G.

HDD硬盘设备分区显示
ESXi命令行下filesystem 显示

如果所用硬盘是SSD(我分配了128G),OSDATA Volume默认还是大概占用120G,文件系统是VFFS,在ESXi web控制台中查看被用作了虚拟闪存。

ESXi引入虚拟闪存已经好多年了,虚拟闪存用作ESXi主机交换缓存,从而提升在该主机上运行的虚拟机的性能,为虚拟机提供读缓存,提升虚拟机的存储性能。

SSD硬盘设备分区显示
ESXi命令行下filesystem 显示
虚拟闪存占用120G

在企业所用的服务器环境中,这点硬盘占用不算什么,但是对于一些使用比较小的硬盘来做ESXi的系统硬盘的home lab玩家,假如被占用如此多的空间来做系统分区或者虚拟闪存,那Datastore空间就会吃紧了。

解决办法:

官方没有提供给用户如何去不使用虚拟闪存的文档,但其实ESXi提供了autoPartitionOSDataSize这个启动参数用来调整ESXi的系统分区大小。调整的是OSDATA这个Volume的大小。我们来试试这个参数能否节省我们的硬盘空间。

先来试试HDD,我同样使用140G HDD,在如下启动界面,按下Shift+O,加上autoPartitionOSDataSize=8192,然后回车。

启动界面
加上OSDataSize参数

安装完成之后检查硬盘占用,VMFS Datastore大概有124G,OSDATA Volume仅占用8G左右(我们设置的8192)

HDD硬盘设备分区显示
ESXi命令行下filesystem 显示

再来试试SSD,我还是来分配128G,也加上autoPartitionOSDataSize=8192,安装完成后检查硬盘占用VMFS Datastore大概有112G, OSData Volume仅占用8G左右(我们设置的8192).

SSD硬盘设备分区显示
ESXi命令行下filesystem 显示

查看虚拟闪存仅占用8G左右

虚拟闪存占用8G

问题解决。

综合上面的测试,最根本的原因是ESXi7的系统分区OSData默认会占用120G左右硬盘空间,不管是HDD还是SSD,而当硬盘是SSD时,还会将此空间作为虚拟闪存,所以我们的解决方案就是调整系统的OSData分区大小。

此文参考了https://www.virtuallyghetto.com/2020/05/changing-the-default-size-of-the-esx-osdata-volume-in-esxi-7-0.html的相关内容和官方发行说明。

在安装有ESXi的NUC10i7FNH上升级BIOS历险记

今年上半年疫情在家办公期间,购入了一台NUC10i7FNH用来装ESXi做home lab,一直运行良好,前几天发现该机器的BIOS有更新了(FN0044.cap),于是选择把虚拟机都关闭,ESXi进入维护模式,关机。

把cap文件复制到U盘里,插在NUC上,开机按F7进入BIOS升级模式,升级一切顺利,完成后自动重启机器,加载ESXi系统,进度条马上要结束时,显示错误消息:

Shutting down firmware services…

Using ‘simple offset’ UEFI RTS mapping policy

马上上网搜索,发现这个问题以前在NUC8i7HNK更新BIOS之后出现过,当时的解决方案是Intel后来出了新版本BIOS。。。

可我这已经是最新版本了,难道要等Intel修复?另外还搜索到有人建议把UEFI mode禁用进入legacy mode,可是NUC10 BIOS设置里,这两个是灰色不可设置的(UEFI mode启用, legacy mode禁用)。😓

等了几分钟,错误消息还在NUC外接屏幕上显示着,我尝试从其它机器ping了下ESXi,通了,又尝试ssh,也成功连上了,于是

TERM=xterm

dcui

在shell中显示ESXi后台的界面,发现ESXi貌似没啥问题,如下图

Intel NUC10i7FNH 运行ESXi7.0

访问ESXi网页,退出维护模式,开启虚拟机,一切运行正常。

PS: NUC10安装ESXi可以参考https://www.virten.net/2020/03/esxi-on-10th-gen-intel-nuc-comet-lake-frost-canyon/ 和 https://www.virten.net/2020/03/intel-nuc-recommended-bios-settings-for-vmware-esxi/