如何升级Azure Service Fabric集群中Server Core虚拟机的.NET Framework
我之前也碰到过一模一样的问题——Azure上的Service Fabric集群用的是Server Core 2016 Datacenter镜像,默认装的.NET Framework 4.6.2,要升级到4.7.1的时候,KB4033393死活没法通过Windows Update获取,手动下载安装也踩了不少坑。下面是我亲测有效的解决步骤:
先确认当前.NET版本
别着急瞎装,先在PowerShell里跑个命令确认当前版本,避免做无用功:Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version, Release -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -match '^(?!S)\p{L}' } | Select-Object PSChildName, Version, Release4.6.2对应的Release值是394806,4.7.1的是461308,记下来后面好验证。
正确下载并安装KB4033393
你用wget下载的思路没问题,但有时候可能因为网络波动导致安装包损坏,我更推荐用Invoke-WebRequest(和wget是别名,但参数更稳定)。先做好准备工作:# 先建个临时文件夹存安装包 New-Item -Path C:\Temp -ItemType Directory -Force从微软官方更新渠道获取对应x64版本的KB4033393补丁包,保存到
C:\Temp\KB4033393.msu,然后用wusa.exe静默安装(Server Core没有图形界面,必须加静默参数避免交互):wusa.exe C:\Temp\KB4033393.msu /quiet /norestart安装过程可能要几分钟,别中途关掉PowerShell窗口。
安装失败?先补前置补丁
如果装KB4033393失败,90%是因为缺少必要的前置更新。Server Core 2016安装.NET Framework 4.7.1必须先安装这两个累积更新补丁:- KB4019990(2017年7月发布的Windows Server 2016累积更新)
- KB4025334(2017年8月发布的Windows Server 2016累积更新)
按顺序先安装KB4019990,完成后重启虚拟机;再安装KB4025334,再次重启;最后安装KB4033393,这样就能避免大部分安装失败的情况。
验证升级结果
所有补丁安装完成后,必须重启虚拟机(.NET Framework升级几乎都需要重启才能生效)。重启后再运行第一步的PowerShell命令,看到Release值变成461308,就说明.NET Framework已经成功升级到4.7.1了。Service Fabric集群的额外注意事项
要是你在Service Fabric集群里操作,千万别同时升级所有节点,这会导致集群不可用。建议逐个节点处理:先把目标节点设置为安全模式(或者暂停节点的服务),完成升级和重启后,再恢复节点的正常状态,依次对每个节点执行相同操作,确保集群始终保持可用。
内容的提问来源于stack exchange,提问作者user247702

