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主机的情况。