0x01 前言

我用于安装的esxi镜像是esxi 6.5发行的第一个版本:ESXi-6.5.0-20170104001-standard。

距离现在已经有好几个月了,我通过vcenter查询到系统的一些组件已经升级过好多遍。这些补丁不但修复许多的BUG,还提升性能与增加新特性。对于我这种喜欢尝鲜的人来说,升级是必须的。

0x02 准备

在长达一周的时间里,我都尝试通过vcenter的补丁转储功能将补丁存储到esxi服务器中,但都以失败告终。

首先,很难成功地通过vcenter下载补丁,我想应该是我家里网络的问题;其次,即时能成功转储,通过vcenter升级esxi需要将esxi主机中的虚拟机全关闭或挂起,随后将esxi主机设为维护模式。但我的环境不允许这样做,因为我的vcenter和软路由pfsense都安装在这台esxi主机中。

通过GUI升级计划失败,但我还有CLI。绕过vcenter,直接使用SSH登入esxi主机,通过CLI的方式升级。

首先登入esxi主机的管理界面启用SSH服务:

然后使用SSH登入esxi主机:

[c:\~]$ ssh [email protected]

Connecting to 10.1.1.11:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

The time and date of this login have been sent to the system logs.

VMware offers supported, powerful system administration tools.  Please
see www.vmware.com/go/sysadmintools for details.

The ESXi Shell can be disabled by an administrative user. See the
vSphere Security documentation for more information.
[root@server:~]

然后使用以下命令确认esxi版本和build号:

[root@server:~] uname -a
VMkernel server 6.5.0 #1 SMP Release build-5310538 Apr  6 2017 21:58:28 x86_64 x86_64 x86_64 ESXi

我的esxi版本为6.5,build号为:5310538,目前最新的build也是5310538。

0x03 升级

我找到一个网站,站内记录着esxi所有build所对应的vib与相关的信息、链接。以下是esxi 6.5.0的链接:

首先确认esxi版本,然后找到最新的build:

再点击版本号,会弹出一个窗口,该窗口中包含了所需要的命令:

在build 5310538中所需要的升级命令如下:

esxcli network firewall ruleset set -e true -r httpClient
esxcli software profile update -p ESXi-6.5.0-20170404001-standard \
-d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml
esxcli network firewall ruleset set -e false -r httpClient

第一行的意思为启用名为httpClient的防火墙规则集,httpClient规则集主要是放行80和443端口:

[root@server:~] esxcli network firewall ruleset list | grep http
httpClient                   true
[root@server:~] esxcli network firewall ruleset rule list | grep http
httpClient                Outbound   TCP       Dst                80        80
httpClient                Outbound   TCP       Dst               443       443

第二和第三行则是主要的升级命令。其中的两个参数解释如下:

  • -p: 指定新版本的镜像名,build号为5310538的镜像名为:ESXi-6.5.0-20170404001-standard
  • -d: 指定配置文件index.xml或离线升级包*.zip的绝对路径或URL

回车后,esxi会从指定的位置下载文件并检查依赖与兼容性,如果一切正常,升级将在5到10分钟内结束。升级的时长根据网络速度的不同而不同,因为需要从vmware升级服务器中下载升级文件。

完成升级后,esxi主机会要求重启。在重启之前运行第三行命令,关闭打开的端口,然后检查相关情况:

[root@server:~] esxcli network firewall ruleset list | grep http
httpClient                  false

最后,寻找窗口期,关闭所有虚拟机,重启esxi主机即可完成更新。

0x04 善后

更新完成后请登入到控制界面,确认SSH服务已经关闭:

然后到软件包管理界面检查系统包的情况:

0x05 结语

通过CLI这种方式升级比较繁琐,如果管理者一个集群的服务器,这种方法显然很费时费力。

但集群的情况下,一般存在主备机器,应该不存在我这种不允许关闭esxi主机的情况。