Skip to content

Commit 1ac6938

Browse files
committed
Upgrade SDN infrastructure
1 parent 65484e6 commit 1ac6938

2 files changed

Lines changed: 336 additions & 0 deletions

File tree

azure-local/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,8 @@ items:
211211
items:
212212
- name: Update SDN infrastructure
213213
href: manage/update-sdn.md
214+
- name: Upgrade SDN infrastructure
215+
href: manage/upgrade-sdn.md
214216
- name: Manage tenant logical networks
215217
href: manage/tenant-logical-networks.md
216218
- name: Manage tenant virtual networks

azure-local/manage/upgrade-sdn.md

Lines changed: 334 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,334 @@
1+
---
2+
title: Upgrade Infrastructure for Software Defined Networking (SDN) managed by on-premises tools
3+
description: Learn how to upgrade infrastructure for SDN managed by on-premises tools.
4+
ms.topic: how-to
5+
ms.author: alkohli
6+
author: alkohli
7+
ms.date: 11/20/2025
8+
---
9+
10+
# Upgrade infrastructure for Software Defined Networking managed by on-premises tools
11+
12+
<!--add applies to-->
13+
14+
This article provides guidance on safely and securely upgrading infrastructure for Software Defined Networking (SDN) managed by on-premises tools. It also provides troubleshooting guidance to help remediate issues that might occur during the upgrade process.
15+
16+
## About upgrading SDN infrastructure
17+
18+
Your SDN deployment consists of several roles and machines, each providing essential services for your environment. To keep your environment secure and up to date, it's required to upgrade the SDN infrastructure, one node at a time.
19+
20+
We recommend upgrading roles in the following order:
21+
22+
- Hyper-V Hosts
23+
- Network Controller nodes
24+
- Load Balancer Multiplexer nodes (optional)
25+
- Gateway nodes (optional)
26+
27+
> [!IMPORTANT]
28+
> During the upgrade, workloads that use Load Balancer Multiplexers (Internal Load Balancers, Load Balancers, Public IPs) or Gateways (L3, GRE, S2S Connections) might experience disruption. Most disruption should be minimal while services fail over. Schedule the upgrade during a maintenance window and notify users about potential temporary disruption.
29+
30+
## Before you begin
31+
32+
- Download the ISO image for performing the in-place upgrade.
33+
34+
- For Azure Local, see [Download operating system for Azure Local deployment](../deploy/download-23h2-software.md).
35+
36+
- For Windows Server, see [Install Windows Server from installation media](/windows-server/get-started/install-windows-server).<!--verify the link-->
37+
38+
- Use [Unblock-File](/powershell/module/microsoft.powershell.utility/unblock-file) and copy the ISO to a file system that your Hyper-V hosts can access, or copy it manually to each Hyper-V host as needed.
39+
40+
- Install the `SdnDiagnostics` module on the machine where you'll perform the upgrade tasks:
41+
42+
```powershell
43+
# install or update SdnDiagnostics module
44+
# once we have installed or updated, we will remove any modules currently
45+
# from the runspace and import to ensure the latest module is imported
46+
if ($null -eq (get-module -ListAvailable -Name SdnDiagnostics)) {
47+
Install-Module -Name SdnDiagnostics
48+
} else {
49+
Update-Module -Name SdnDiagnostics
50+
}
51+
if (Get-Module -Name SdnDiagnostics){
52+
Remove-Module -Name SdnDiagnostics
53+
} else {
54+
Import-Module -Name SdnDiagnostics
55+
}
56+
```
57+
58+
- After installation, retrieve current SDN fabric environment details and copy the `SdnDiagnostics` module into the environment:
59+
60+
```powershell
61+
$environmentInfo = Get-SdnEnvironmentInfo -NetworkController "<NC_VM>"
62+
Install-SdnDiagnostics -ComputerName $environmentInfo.FabricNodes
63+
```
64+
65+
- Ensure sufficient space before proceeding. The in-place upgrade requires a minimum of 40 GB of available storage. For VMs, you can increase the VM's VHD size using Windows Admin Center. After resizing the VHD, adjust the partition within the VM using the [Resize-Partition](/powershell/module/storage/resize-partition) or [diskpart](/windows-server/administration/windows-commands/diskpart) commands.
66+
67+
## Perform in-place upgrade
68+
69+
Use the steps in this section to perform an in-place upgrade of the existing OS. These steps apply to all SDN nodes.
70+
71+
### Mount the media
72+
73+
#### Mount-DiskImage for Hyper-V hosts
74+
75+
If the ISO file is located on the local file system, you can mount it directly.
76+
77+
1. Locate the ISO file you downloaded earlier.
78+
79+
1. Run the following command to mount the ISO. Make sure to update the drive letter to one that is not already in use.
80+
81+
```powershell
82+
Mount-DiskImage -ImagePath "E:\<PATH_NAME>.ISO"
83+
```
84+
85+
#### Add-VMDvdDrive for VMs
86+
87+
For an in-place upgrade on a VM, use Hyper-V to attach the ISO as a DVD drive to the VM directly. This approach reduces overhead required on the file system of the OS.
88+
89+
1. On the Hyper-V host where the VM resides, locate the ISO file that you downloaded earlier.
90+
91+
1. Attach the ISO as a DVD drive:
92+
93+
```powershell
94+
Add-VMDvdDrive -VMName "<VM_NAME>" -Path "<DRIVE>:\<PATH>.ISO"
95+
```
96+
97+
### Start the upgrade
98+
99+
1. Check the OS version before the upgrade:
100+
101+
```powershell
102+
# Check the OS version BEFORE OS Upgrade:
103+
Get-ComputerInfo | Select-Object WindowsProductName, WindowsInstallationType, OSDisplayVersion, WindowsBuildLabEx | Format-Table -AutoSize
104+
```
105+
106+
1. Initiate the upgrade. The upgrade process will take a while, and the node may reboot several times. For more information regarding command line options, see [Windows Setup Command-Line Options](/windows-hardware/manufacture/desktop/windows-setup-command-line-options).
107+
108+
```powershell
109+
$DVDDrive = "D:\" # update to the drive path the .ISO was mounted to
110+
$logDir = "C:\Temp\Upgrade-Logs"
111+
112+
# Create a folder to store the upgrade logs:
113+
if(-not(Test-Path -Path $logDir -PathType Container)){
114+
$null = New-Item -Path $logDir -ItemType Directory
115+
}
116+
117+
# /auto upgrade parameter to perform an in-place upgrade.
118+
# /dynamicupdate enables the download of updates during the upgrade process.
119+
# added " /quiet" and " /EULA accept" to arguments for the setup.exe command, to suppress the GUI and accept the EULA.
120+
121+
Start-Process -FilePath "$DVDDrive\setup.exe" -ArgumentList "/auto upgrade /dynamicupdate enable /copylogs $logDir /quiet /eula accept"
122+
```
123+
124+
1. Check the OS after the upgrade:
125+
126+
```powershell
127+
# Check the OS version AFTER OS has been upgraded:
128+
Get-ComputerInfo | Select-Object WindowsProductName, WindowsInstallationType, OSDisplayVersion, WindowsBuildLabEx | Format-Table -AutoSize
129+
```
130+
131+
## Upgrade Hyper-V hosts
132+
133+
> [!IMPORTANT]
134+
> If you deployed SDN on Azure Local, upgrade your Hyper-V hosts by following instructions in [About Azure Local upgrades](../upgrade/about-upgrades-23h2.md). Do not use the steps in this article for upgrading Hyper-V hosts.
135+
136+
The upgrade process varies depending on the roles and services in your environment. If you have Storage Spaces Direct, clustering, or similar features, complete the necessary maintenance tasks to take a node offline for the upgrade process.
137+
138+
If virtual machines (VMs) aren't using clustering, evaluate live migrating VMs to another host within the environment depending on capacity.
139+
140+
After you put the Hyper-V host in the maintenance mode, follow the steps in [Perform in-place upgrade](#perform-in-place-upgrade). Repeat this process for all Hyper-V hosts within your cluster.
141+
142+
## Upgrade Network Controller VMs (Service Fabric)
143+
144+
Before you upgrade or restart a Network Controller VM, disable it in the Service Fabric cluster.
145+
146+
Follow these steps on a remote computer that has WinRM connectivity to the Network Controller VMs.
147+
148+
1. Retrieve the current state of the Network Controller nodes:
149+
150+
```powershell
151+
Get-SdnServiceFabricNode -NetworkController "<NC_VM>" | FT NodeName, IpAddressOrFQDN, NodeStatus, HealthState, IsStopped -AutoSize
152+
```
153+
154+
1. Disable the node from the Service Fabric quorum. This step ensures Service Fabric can migrate primary replicas to other nodes and keep partition databases in sync.
155+
156+
```powershell
157+
Disable-SdnServiceFabricNode -NetworkController "<NC_VM>" -NodeName "<Node_Name>"
158+
```
159+
160+
1. After the node is safely disabled, perform the in-place upgrade [Perform in-place upgrade](#perform-in-place-upgrade).
161+
162+
1. After the node has completed the in-place upgrade, re-enable the node. This operation enables the node and waits until Service Fabric returns to a healthy state.
163+
164+
```powershell
165+
Enable-SdnServiceFabricNode -NetworkController "<NC_VM>" -NodeName "<Node_Name>"
166+
```
167+
168+
If the operation times out, wait and manually check the state:
169+
170+
```powershell
171+
Get-SdnServiceFabricNode -NetworkController "<NC_VM>" | FT NodeName, IpAddressOrFQDN, NodeStatus, HealthState, IsStopped -AutoSize
172+
173+
Confirm-SdnServiceFabricHealthy -NetworkController "<NC_VM>"
174+
```
175+
176+
- If the commands return status healthy and node is up, repeat the process for other Network Controller nodes.
177+
178+
- If the issue persists after an hour, see [Troubleshooting](#troubleshooting).
179+
180+
1. Repeat the process for all Network Controller nodes in your deployment.
181+
182+
### Perform Network Controller application update
183+
184+
After upgrading all Network Controller VMs, run the following command on one of the Network Controller VMs directly:
185+
186+
```powershell
187+
Update-NetworkController
188+
```
189+
190+
This command initiates an application upgrade if it was not automatically initiated.
191+
192+
## Upgrade Load Balancer Multiplexer VMs
193+
194+
You can upgrade Load Balancer Multiplexers without any additional requirements. To upgrade, proceed directly with [Perform in-place upgrade](#perform-in-place-upgrade) on each Load Balancer Multiplexer, one at a time.
195+
196+
## Upgrade Gateway VMs
197+
198+
> [!IMPORTANT]
199+
> Ensure that Network Controller and Load Balancer Multiplexer VMs are already upgraded. If the VMs are not upgraded yet, do not proceed with upgrading Gateways.
200+
201+
1. Retrieve the current list of SDN Gateways:
202+
203+
```powershell
204+
$environmentInfo = Get-SdnEnvironmentInfo -NetworkController "<NC_VM>"
205+
Get-SdnGateway -NcUri $environmentInfo.NcUrl
206+
```
207+
208+
1. Identify the Gateway VM to patch first, and remove its resource from the Network Controller using `SdnDiagnostics`:
209+
210+
```powershell
211+
# Remove Gateway resource from Network Controller
212+
$resourceRef = "/Gateways/<RESOURCE_ID>"
213+
$gateway = Get-SdnGateway -NcUri $environmentInfo.NcUrl -ResourceRef $resourceRef
214+
215+
# create backup of the gateway
216+
$gateway | ConvertTo-Json -Depth 10 | Out-File -FilePath "$(Get-SdnWorkingDirectory)\$($gateway.resourceId).json"
217+
218+
# delete the gateway resource
219+
Set-SdnResource -NcUri $environmentInfo.NcUrl -ResourceRef $gateway.resourceRef -OperationType Delete
220+
```
221+
222+
1. [Perform the in-place upgrade](#perform-in-place-upgrade).
223+
224+
1. After the in-place upgrade completes and the version is updated <!--removed mention of 2509-->, refresh the RSAT tools:
225+
226+
```powershell
227+
# refresh RSAT tools
228+
Remove-WindowsFeature -Name RSAT-RemoteAccess
229+
Add-WindowsFeature -Name RSAT-RemoteAccess
230+
```
231+
232+
1. Add the Gateway VM resource back to Network Controller:
233+
234+
```powershell
235+
# Add GW resource back to Network Controller
236+
# update the filepath to the .json file that was generated in earlier step if variable not available
237+
$filePath = "$(Get-SdnWorkingDirectory)\$($gateway.resourceId).json"
238+
$dataObject = Get-Content -Path $filePath | ConvertFrom-Json
239+
240+
Set-SdnResource -NcUri $environmentInfo.NcUrl -ResourceRef $dataObject.resourceRef -Object $dataObject -OperationType Add
241+
```
242+
243+
1. Repeat these steps for all Gateways.
244+
245+
## Troubleshooting
246+
247+
This section lists common issues that you might encounter during the upgrade process and their recommended remediations.
248+
249+
### Service Fabric node is not healthy
250+
251+
**Issue**
252+
253+
In some cases, the NetAdapter might get renamed during the upgrade. This causes issues as Network Controller node configuration requires the `RestInterface` to match the NetAdapter name on the VM.
254+
255+
**Remediation**
256+
257+
1. Verify that the NetAdapter on the Network Controller VM matches the configuration in NetworkController. For `-NetworkController`, specify a working Network Controller VM. For `-Name`, specify the non-working SDN node.
258+
259+
```powershell
260+
Get-SdnNetworkControllerNode -NetworkController "<WORKING NC_VM>" -Name "<BROKEN NC_VM>"
261+
```
262+
263+
1. Note the `RestInterface` value from the output.
264+
265+
1. Connect to Network Controller VM and run `Get-NetAdapter` directly. Ensure the name matches the value returned in step 1.
266+
267+
- If the adapter name is changed, check if the previous adapter is orphaned or ghosted.
268+
269+
```powershell
270+
Get-PnpDevice -class net | ? Status -eq Unknown | Select FriendlyName,InstanceId
271+
```
272+
273+
- If an orphaned adapter exists, remove it.
274+
275+
```powershell
276+
pnputil /remove-device "INSTANCE_ID"
277+
```
278+
279+
- Rename the new adapter back to the original name using [Rename-NetAdapter](/powershell/module/netadapter/rename-netadapter).
280+
281+
### Unable to resolve FQDN of Network Controllers
282+
283+
**Issue**
284+
285+
In some cases, `unattend.xml` is applied for initial VM deployment with SdnExpress. If DNS servers have changed since the initial deployment, incorrect DNS servers can be programmed into the adapters, causing FQDN resolution failures.
286+
287+
**Remediation**
288+
289+
1. Verify that you can resolve the FQDN of other Network Controller nodes. Ensure that the FQDN resolution succeeds because Service Fabric relies on FQDN for communication.
290+
291+
```powershell
292+
Resolve-DnsName -Name "<NC NODE FQDN>" -Type A
293+
```
294+
295+
1. If resolution fails, check the current DNS servers configured and confirm they match the configuration on other Network Controller VMs.
296+
297+
```powershell
298+
Get-DnsClientServerAddress
299+
```
300+
301+
1. If DNS servers differ, update them using [Set-DnsClientServerAddress](/powershell/module/dnsclient/set-dnsclientserveraddress). If DNS servers are correct but resolution still fails, investigate your DNS infrastructure.
302+
303+
### Resources reporting configurationState failures
304+
305+
**Issue**
306+
307+
During the upgrade process, you might encounter any of the following failures:
308+
309+
- Load Balancer Multiplexer VMs reporting configurationState failure.
310+
311+
- Servers reporting configurationState failure.
312+
313+
- Virtual Networks reporting configurationState failure.
314+
315+
**Remediation**
316+
317+
These errors are typically transient and can be resolved by moving the Service Fabric replicas for the affected service. Perform this operation directly on a Network Controller VM that is enabled within the Service Fabric cluster.
318+
319+
```powershell
320+
Move-SdnServiceFabricReplica -ServiceTypeName VSwitchService
321+
Move-SdnServiceFabricReplica -ServiceTypeName GatewayManager
322+
Move-SdnServiceFabricReplica -ServiceTypeName SlbManagerService
323+
```
324+
325+
326+
### Traffic is unable to traverse the Gateway connection
327+
328+
**Issue**
329+
330+
Due to known issues in certain builds, performing an update or upgrade might result in stale route mappings for specific address prefixes on the Gateway connection.
331+
332+
**Remediation**
333+
334+
If you encounter data-path routing issues and resources don't report failures, we recommend rebooting the Gateway VM that hosts the Virtual Gateway or Network Connection.

0 commit comments

Comments
 (0)