Deploy SDNv2 with SCVMM 2016

Understand how to deploy SDNv2 with SCVMM 2016.

John Savill

February 20, 2017

8 Min Read
Deploy SDNv2 with SCVMM 2016

Q. Tips for using VMM SDN Express to deploy SDNv2.
Dept - SCVMM

A. VMM SDN Express provides a script based deployment of the entire SDNv2 set through a combination of service templates and scripted setup. A huge benefit is the only configuration is a single fabric configuration file and then the entire deployment is automatic and deployed in a consistent fashion. If something goes wrong you can fix the problem and simple rerun.

I created a video walking through many of these concepts at https://youtu.be/0tt04JUtxUQ.

 

 Below are some key tips:

  1. Make sure you download the latest SDN complete set from Github at https://github.com/Microsoft/SDN and restore the complete ZIP file to your local drive. You need the complete structure in its original folder structure on your local hard drive

  2. Ensure VMM 2016 is running the latest Update Rollup

  3. Ensure in VMM if you have a pre-existing management network it is configured correctly including VLAN configuration and that the physical network ports are all configured as trunk/tagged for all VLANs that will be utilized

  4. If using an existing port profile for the management network ensure it is ONLY used by the logical switch that will be used by SDN (this logical switch will be changed to NC managed). If the port profile is also used by another non-NC managed logical switch changes to the management network later on will fail

  5. If using an existing management network ensure it was deployed as "one connected network" with no-isolation on the corresponding VM Network. If this is not the case the conversion of the logical switch and network will fail

  6. Disable all extensions on the logical switch

  7. Make sure the Windows Server 2016 image you use has the latest patches and is Server Core or Server with Desktop Experience (not Nano Server)

  8. Ensure the administrator account you will be using is a member of the NC Management AD group you will pre-create

  9. Ensure the Client Security Group includes at least your administrator and VMM service account

  10. In the fabricconfig.psd1 ensure you have the UNC path of the VMM library share and that your admin account has write access to it. To find the correct URL navigate to Library workspace and then under Library Services expand the VMM service and right click on MSSCVMMLibrary (or whichever you are using) and select Explore. In Explorer right click the address and select Copy address as text, e.g. \savdalvmm16.savilltech.netMSSCVMMLibrary

  11. If using HighlyAvailableVMs in the fabricconfig.psd1 file it means it will write the VMs storage to clustered storage, e.g. a CSV

  12. Fill out all values in the fabricconfig.psd1 file and make sure the RestName is fully qualified. The fabricconfig.psd1 file I used in my environment is below. Remember that the management, PA, transit and public VIP need to be valid, routable networks. The public VIP does NOT use a VLAN as it uses BGP to advertise the routes so VLAN is 0.

  13. Sometimes execution fails. View the job status in Jobs workspace for ideas why it failed.

    You can also look in the SDN-masterVMMscriptsVMMExpresslogfile.log file for information. Additionally if the NC fails you can login to the NC VM and in the C:NCInstall folder are a number of txt files that give great information especially the InstallNetworkController-AllNodes.txt file. It tries to install many times so you will have plenty of time to look at the file.

  14. If execution fails (don't panic, it happens) and you want to rerun you MUST do the following before rerunning:

    • In the Library workspace select Service Deployment Configurations and ensure the NC is deleted

    • Still in Library workspace under Service Templates ensure the NC deployment service template is deleted

    • In the Library workspace under Library Servers - - delete the 3 certificate files

    • In the Settings workspace delete the NC_LocalAdminRAA and NC_MgmtAdminRAA run as accounts

    • On the domain controller in AD Users and Computers under Computers container delete the 3 computer accounts (if present) for the NC deployments (they will be prefixed with whatever you configured in the fabricconfig.psd1 file, e.g. SDN)

    • On the domain controller in DNS Manager for your domain zone delete the A records for the 3 NC services AND the REST name DNS entry (if it got that far)

  15. To start the install navigate to the SDN-masterVMMVMM SDN Express folder in an ELEVATED PowerShell session and execute with:
    .VMMExpress.ps1 -ConfigurationDataFile .Fabricconfig.psd1

  16. Once install has finished you will have multiple logical networks and services in your environment. The logical switch will also show as NC managed


My example fabricconfig.psd1 file used in my deployment:

# This is the configuration file for VMM Express. All the paremeters should be# filled in correctly for smooth deployment of VMM Express.@{AllNodes =     @(    @{              ###########################        #  VM Creation variables  #        ###########################              # Name of the VHD or VHDX to use for VM creation. Must Exist in the        # VMM Library              VHDName="GA2016.vhdx"              # VMM Library share to be used for keeping the resources.        VMMLibrary="\savdalvmm16.savilltech.netMSSCVMMLibrary"              # Product key Can be blank if using a volume license VHD or VHDX, or you are        #deploying in eval mode.  (Don't forget to press "skip" while VM creation).        ProductKey="CB7KF-BWN84-R7R2Y-793K2-8XDDG"      #Generation of VM to be used for deployment, Values are:        # 1. Gen1 - for Generation 1 VM        # 2. Gen2 - for Generation 2 VM        Generation="Gen2"    #Type of Deployment. The values are :        #Standalone : For single Node         #Production : For 3-node        DeploymentType="Production"     #Higly Available VM. Do you want the infrastructural VMs to be deployed on         #Clustered Host and being higly Available ? If yes pass $true else $false         HighlyAvailableVMs = $true              #leave it if you want default IPvAddressType to be taken which is static        # else change it to "Dynamic"        IPv4AddressType=""                #Host Group to be Managed by Network Controller. All the Host to be         #Managed by Network controller should be part of this Host Group        NCHostGroupName="NCManaged"              ######################################################################        #  Section to be filled if the Logical switch and Logical Network    #        #  is already deployed for NC. You should do this if SET support is  #        #  required. If you want VMM express to deploy the           #        #  Logical switch and Management Network, leave it as it is.     #        ######################################################################              #Do you have an existing logical switch and the switch is deployed on all        #the host you wish to Manage by NC. Values are $true or $false        IsLogicalSwitchDeployed = $true              #if above is true give the name of logical switch     LogicalSwitch  = "SDN Switch"    # Do you have existing Management Network that you would like to use.        # Values are : $true or $false        IsManagementVMNetworkExisting = $true    #if above is true give the name of ManagementVMNetwork        ManagementVMNetwork = "MGMT"      #Uplink Port Profile to be used        UplinkPortProfile = "SDN Trunk Port"                    #====================================================================================        #The below set of Parameters are required for creation of Management Logical Network        #====================================================================================         LogicalNetworks = @( @{            Name = "HNVPA"            Subnets = @(            @{                VLANID = 166                        #Example: 11                AddressPrefix = "10.7.166.0/24"              #Example: "10.0.10.0/24"                DNS = @("10.7.173.10", "10.7.173.11") #Example: @("10.0.0.7", "10.0.0.8", "10.0.0.9")                Gateways = "10.7.166.1"                  #Example: "10.0.10.1"                PoolStart = "10.7.166.100"                #Example: "10.0.10.50"                PoolEnd = "10.7.166.199"                  #Example: "10.0.10.150"           }            )        },@{            Name = "Transit"            Subnets = @(            @{                VLANID = 167                        #Example: 11                AddressPrefix = "10.7.167.0/24"              #Example: "10.0.10.0/24"                DNS = @("10.7.173.10", "10.7.173.11") #Example: @("10.0.0.7", "10.0.0.8", "10.0.0.9")                Gateways = "10.7.167.1"                  #Example: "10.0.10.1"                PoolStart = "10.7.167.100"                #Example: "10.0.10.50"                PoolEnd = "10.7.167.199"                  #Example: "10.0.10.150"            }          )        },         @{            #The first IP address (PoolStart) for this logical network is             #automatically assigned to the SLB Manager.Other addresses such            #as the GatewayPublicIPAddress will start after that.            Name = "PublicVIP"            Subnets = @(            @{                VLANID = 0                AddressPrefix = "10.7.165.0/24"            #Example: "10.0.20.0/24"                DNS = @("10.7.173.10", "10.7.173.11")                  #Example: @("10.0.0.7", "10.0.0.8", "10.0.0.9")                Gateways = "10.7.165.1"                   #Example: "10.0.20.1"                PoolStart = "10.7.165.10"                  #Example: "10.0.20.5"                PoolEnd = "10.7.165.99"                #Example: "10.0.20.100"                IsPublic = $true            }          )        },        @{            #The first IP address (PoolStart) for this logical network is             #automatically assigned to the SLB Manager.Other addresses such            #as the GatewayPublicIPAddress will start after that.            Name = "PrivateVIP"            Subnets = @(            @{                VLANID = 0                AddressPrefix = "192.168.2.0/24"            #Example: "10.0.20.0/24"                DNS = @("10.7.173.10", "10.7.173.11")                  #Example: @("10.0.0.7", "10.0.0.8", "10.0.0.9")                Gateways = "192.168.2.1"                   #Example: "10.0.20.1"                PoolStart = "192.168.2.10"                  #Example: "10.0.20.5"                PoolEnd = "192.168.2.99"                #Example: "10.0.20.100"                IsPublic = $false            }          )        },        @{            #This is used for onboarding Gateway            Name = "GREVIP"                # Don't change this. There should be no LN with this name in VMM            Subnets = @(            @{                VLANID = 0                AddressPrefix = "192.168.3.0/24"            #Example: "10.0.20.0/24"                DNS = @("10.7.173.10", "10.7.173.11")                  #Example: @("10.0.0.7", "10.0.0.8", "10.0.0.9")                Gateways = "192.168.3.1"                   #Example: "10.0.20.1"                PoolStart = "192.168.3.10"                  #Example: "10.0.20.5"                PoolEnd = "192.168.3.99"                #Example: "10.0.20.100"                IsPublic = $false            }          )        }    )    #=========================================================================================        # The following set of paremeters are required for importing VMM service Template,        # configuring the Service Template and Deploying the service Template. The list may change        # during the develpoment phase        #==========================================================================================    # Make this true if self signed certificate is to be used        # Example : $True , $False        IsCertSelfSigned = $true        #The password for server certificate. This sertificate will be installed on the Host        ServerCertificatePassword="!!Password"               # The following are service settings required for configuring and        # deploying the service template imported client security Group Name        ClientSecurityGroupName= "savilltechDomain Users"    # Local Admin credentials        # The local admin user name will be .Administrator        LocalAdminPassword= "password"            # Management Domain Account Which will be used for NC Deployment        ManagementDomainUser="savilltechadministrator"        ManagementDomainUserPassword="password"     # This is the domain which NC VMs will join        ManagementDomainFDQN="savilltech.net"      #Managemet Security Group Name        ManagementSecurityGroupName="savilltechNC Management"                  # Prefix to be added to infrastructural VMs created. Put the prefix such        # that it makes VM name unique as this is the machine name of VM and should be unique.        # Keep it as 2 - 3 characters              ComputerNamePrefix = "SDN"          # This will be registered as NC End point        RestName = "SAVSDNNC.savilltech.net"              ##################################        #  Deoloyment Control Switches   #        ##################################                          # Do you want to deploy NC        DeployNC = $true              #Do you want to Deploy SLB        DeploySLB = $true    #Do you want to deploy GW.         DeployGW = $true         };          );}

 

About the Author(s)

Sign up for the ITPro Today newsletter
Stay on top of the IT universe with commentary, news analysis, how-to's, and tips delivered to your inbox daily.

You May Also Like