When implementing Horizon View Pools with a number of desktops that exceeds the limit of a single 24 bit subnet, it is very wise to think about properly designing and configure your network infrastructure for your VDI environment. Several best practice are available to do this and I will explain the one I am using in this post.

But why? The answer is fairly simple. Imagine a Horizon View Environment with 2000 desktops. The easiest way of arranging network connectivity would be to create a massive subnet in which all of those desktops can be added. But when thinking of broadcast domains in a subnet of that size for instance, your network engineers won’t be happy. So creating smaller subnets with 500 desktops at max is definitely a lot better.

In this case, when using 500 desktops per subnet, how would you configure Horizon View to be able to have more than 500 desktops per pool? Again, it’s fairly easy. You need to define multiple network labels per pool.

Every Portgroup on the vSphere networking level gets a Network Label. And by using PowerCLI you are able to add those Network Labels to a pool. But more about that later.

What’s very important from a management perspective, is that you are using vSphere Distributed Switches (vDS) if you would like to use network labels. If the vDS is properly configured, you will have to add the port groups just once on the vDS and they will be distributed to all of the hosts in the View Block.

Before creating a pool for 2000 desktops, you will need port groups. Create 4 of them and call them VLAN101 – VLAN104. They will all be attached to a network with a 23 bit subnet (255.255.254.0). So prepare them on your routers/switches as well.

So what’s next? Create the pool in which you want to add the Network Labels. Let’s say it is called Pool1.

It will basically look like this:

To add all the Network Labels to your pool, you will need PowerCLI on a connection server.

Logon to the console of the connection server and start the View PowerCLI. Type in the following command:

Get-Pool -Pool_id Pool1

In the output, a couple of things are important when configuring the Network Labels, so dump the output to a textfile (add > textfile.txt after the command). The output should look a bit like this:

vc_id : 8a74e5b8-2284-42ab-ba18-18f0252fb32f parentVMPath : /vhojan.dc/vm/WTMP parentVMSnapshotPath : /01 networkLabelSpecs : disabled

There is a lot more in the dump, but these above are the most important ones.

The next thing is to create a networklabelspecs file. With the following command, you can create the file:

Export-NetworkLabelSpecForLinkedClone -vc_id 8a74e5b8-2284-42ab-ba18-18f0252fb32f -ClusterPath /vhojan.dc/host/vHojan.DC -parentVMPath /vhojan.dc/vm/WTMP -ParentSnapshotPath /01 -maxVMsPerNetworkLabel 500 -networkLabelConfigFile "c:\labels.txt"

Please note that the everything here is case-sensitive. The output of the file looks like this:

#Network Label Configuration Spec (UTF-8) #WARNING! Setting enabled flag to false will #turn off the automatic network label assignment #for newly provisioned desktops. enabled=true #Parameter Definition for NIC nic1=Network adapter 1 #Parameter Definition for Network network01=VLAN101 network02=VLAN102 network03=VLAN103 network04=VLAN104 network05=VM Network #Network Label Attribute Definition #Expected format: #<nic_param>.<network_param>.maxvm=<max vm for network label> ####nic1.network01.maxvm=500 ####nic1.network02.maxvm=500 ####nic1.network03.maxvm=500 ####nic1.network04.maxvm=500 ####nic1.network05.maxvm=500

You can see here that the Network Labels are there, but they are not active. Remove the #### in front of the networks that need be enabled for the pool. Save the file and run the following command:

Update-AutomaticLinkedClonePool -Pool_id pool1 -NetworkLabelConfigFile "c:\labels.txt"

If you are using full clones, run Update-AutomaticPool instead.

The pool should be updated. Run the following command to check the pool again for the network labels:

Get-Pool -Pool_id Pool1

If it all went well, you should see the following output at the networkLabelSpecs parameter:

networkLabelSpecs : [nl=VLAN101;nic=Network adapter 1;enabled=1;max=500;usage=0];[nl=VLAN102;nic=Network adapter 1;enabled=1;max=500;usage=0];[nl=VLAN103;nic=Network adapter 1;enabled=1;max=500;usage=0];[nl=VLAN104;nic=Network adapter 1;enabled=1;max=500;usage=0]

Ok, so your pool is now ready to provision 2000 desktops. What’s next?

Refreshing your desktops at logoff is also a best practice. Especially when using User Environment Management to sync your windows- and application settings. During a refresh, a desktop is syspreped to a new state. So possibly will get a new name and DNS registration. And also a new DHCP address. This could be a challenge if the lease of your scopes are too long. So set the leases to 8 hours max. And make sure that before logoff, the address of the desktop is released by creating a logoff script that runs:

ipconfig /release

Your network should now be configured properly and behave like an enterprise level network suitable for thousands of desktops (from a functional perspective). Of course, you need a proper physical infrastructure that is suitable for a big number of desktops as well.