be SAN based or use Clustered Storage Spaces.
2 . One node at a time is moved to Windows Server 2016. The first step is to drain the
node of all resources while it migrates the resources to other nodes in the cluster.
3 . Once the node is drained of resources, it is evicted from the cluster.
4 . The node is wiped, and a fresh install of Windows Server 2016 is performed on the
box.
5 . A cluster validation exercise is performed for the cluster and the newly installed
node. Once validation passes, the node is added back to the cluster and acts as if it
is running Windows Server 2012 R2, enabling the cluster to run in a Windows
Server 2012 R2 functional level but one that is now mixed in terms of the
operating systems running in the cluster. The Windows Server 2016 node can
access all cluster resources, such as Cluster Shared Volumes. Roles can be moved
back to the node.
6 . Step 2 and step 3 are repeated on the next node, evicting it from the cluster.
7 . Step 4 and step 5 are repeated, with the node being rebuilt with Windows Server
2016, a cluster validation performed, and the node added back to the cluster with
resources moved back to it.
8 . All nodes have gone through the process of being rebuilt with Windows Server
2016 and added to the cluster. All nodes are now running Windows Server 2016,
but the cluster is still running in Windows Server 2012 R2 functional level.
9 . The final step is to switch the cluster to Windows Server 2016 functional level,
which will light up new Windows Server 2016 functionality. This is done by
running the Update-ClusterFunctionalLevel cmdlet. The cluster functional level
update can be seen by running (Get-Cluster).ClusterFunctionalLevel, which
should show a value of 9. If using Clustered Storage Spaces, the storage pools
should be updated by running the Update-StoragePool cmdlet with the friendly
name of the Storage Pool as the parameter.
Additionally, after the cluster is running with all Windows Server 2016 nodes and in
the Windows Server 2016 cluster functional level, the VMs can be upgraded to the
Windows Server 2016 native configuration level of 8 by running the Update-VMVersion
cmdlet. If you wanted to update every VM in the cluster, as you are sure you never
need to run them on a 2012 R2 host, then you could use the following code. Note this
will convert only VMs that are not running.
$vmgroups = Get-ClusterResource |
Where-Object{$_.ResourceType -like "Virtual Machine"}
foreach ($vmgroup in $vmgroups)
{
$VM = $vmgroup | Get-VM
#If VM is off and not already version 8.0
if($VM.State -eq "Off" -and $VM.Version -ne "8.0")