VMM SDN Express представляет собой основанный на сценариях процесс развертывания всех возможностей SDNv2 через комбинацию служебных шаблонов и установку на базе сценария. Важное его преимущество состоит в том, что единственным этапом настройки является работа с одним файлом настроек инфраструктуры. Затем все развертывание выполняется автоматически и в заданной последовательности. Если что-то идет не так, вы можете решить проблему и просто перезапустить процесс.

Далее приводится некоторая базовая информация обо всем процессе.

1. Проверьте, загрузили ли вы самый последний полный набор SDN из Github, который доступен по адресу: https://github.com/Microsoft/SDN, и раскройте весь файл ZIP на свой локальный диск. Вам понадобится вся его специальная структура папок на вашем локальном жестком диске.

2. Убедитесь, что менеджер VMM 2016 работает с самой последней версией накопительного пакета обновлений Update Rollup.

3. Если у вас есть уже созданная административная сеть, проверьте в VMM, правильно ли она настроена, включая настройки сетей VLAN, а также все ли физические сетевые порты настроены на режим trunk/tagged для всех VLAN, которые будут использоваться.

4. Если вы задействуете существующий профиль порта для административной сети, убедитесь, что только он используется логическим коммутатором, который будет применяться SDN (этот логический коммутатор будет изменен на управляемый контроллером сети Network Controller, NC). Если профиль порта также используется другим управляемым не NC логическим коммутатором, никакие изменения, применимые к административной сети, в дальнейшем производиться не будут.

5. Если вы используете существующую административную сеть, убедитесь, что она была развернута как one connected network («единственная подсоединенная сеть»), в которой нет изоляции соответствующей сети виртуальных машин. Если это не так, взаимодействие логического коммутатора и сети нарушится.

6. Блокируйте все расширения на логическом коммутаторе.

7. Убедитесь, что образ Windows Server 2016, который вы используете, содержит самые последние исправления и что его тип Server Core или Server with Desktop Experience (но не Nano Server).

8. Убедитесь, что учетная запись администратора, которую вы будете использовать, является членом предварительно созданной вами группы NC Management в AD.

9. Убедитесь, что группа безопасности Client Security Group включает в себя как минимум учетную запись администратора и учетную запись службы VMM.

10. Убедитесь, что в файле fabricconfig.psd1 у вас есть путь UNC к общему ресурсу библиотеки VMM и что ваша учетная запись администратора имеет доступ к ней на запись. Чтобы найти правильный URL, перейдите к рабочему пространству Library, затем на вкладке Library Services разверните узел службы VMM и щелкните правой кнопкой мыши по MSSCVMMLibrary (или используемой вами); откроется контекстное меню, в нем выберите пункт Explore. В окне Explorer щелкните правой кнопкой мыши по адресу и выберите в контекстном меню пункт Copy address as text, например \\savdalvmm16.savilltech.net\MSSCVMMLibrary.

11. Если вы используете HighlyAvailableVMs в файле fabricconfig.psd1, то это означает, что файл запишет хранилище данных виртуальных машин в хранилище данных кластера, например CSV.

12. Заполните все значения в файле fabricconfig.psd1 и убедитесь, что RestName — полностью определенное имя. Файл fabricconfig.psd1, который я использовал в своей среде, представлен в листинге. Помните, что виртуальные адреса VIP системы управления, РА, переходный и общедоступный адреса должны быть из реальных маршрутизируемых сетей. Общедоступный VIP не использует VLAN, поскольку он задействует BGP для публичного оповещения маршрутов, так что номер VLAN равняется 0.

13. Иногда выполнение процесса обрывается. Просмотрите статус задания в рабочем пространстве Jobs, чтобы понять, почему процесс не выполняется (экран 1).

 

Проверка статуса задания
Экран 1. Проверка статуса задания

Также вы можете просмотреть файл SDN-master\VMM\scripts\VMMExpresslogfile.log и получить кое-какую информацию. Кроме того, если NC дает сбой, вы можете зарегистрироваться на виртуальной машине NC и в папке C:\NCInstall увидеть ряд файлов txt, которые дают большой объем информации, особенно файл InstallNetworkController-AllNodes.txt (экран 2). Контроллер сети NC несколько раз предпринимает попытку установки, так что у вас будет много времени на просмотр этого файла.

 

Набор файлов с информацией о выполнении развертывания
Экран 2. Набор файлов с информацией о выполнении развертывания

14. Если процесс выполнения все еще дает сбой (такое случается) и вы хотите перезапустить его, необходимо перед перезапуском выполнить следующие действия:

  • в рабочем пространстве Library выберите пункт Service Deployment Configurations и убедитесь, что контроллер NC удален;
  • также в рабочем пространстве Library в разделе Service Templates проверьте, удален ли служебный шаблон развертывания NC;
  • в рабочем пространстве Library в меню Library Servers, VMM Server, Library Shared удалите три файла сертификата;
  • в рабочем пространстве Settings удалите учетные записи для исполнения NC_LocalAdminRAA и NC_MgmtAdminRAA;
  • на контроллере домена в оснастке AD Users and Computers («Пользователи и компьютеры») в узле Computers удалите три учетные записи компьютера (если они есть) для развертываний NC- (они будут иметь префикс, состоящий из тех имен, что вы указали в файле fabricconfig.psd1, например SDN);
  • на контроллере домена в DNS Manager («Менеджере DNS») для вашей доменной зоны удалите записи А для трех служб NC И запись DNS для имени REST (если процесс продвинулся так далеко).

15. Для запуска установки перейдите в папку SDN-master\VMM\VMM SDN Express в сессии PowerShell с повышенными привилегиями и выполните команду:

.\VMMExpress.ps1-
   ConfigurationDataFile.\Fabricconfig.psd1

16. После завершения установки у вас появится несколько логических сетей (экран 3) и служб (экран 4). Логический коммутатор также будет показан как управляемый NC (экран 5).

 

Созданные логические сети
Экран 3. Созданные логические сети

 

Созданные службы
Экран 4. Созданные службы

 

Логический коммутатор управляется NC
Экран 5. Логический коммутатор управляется NC
Листинг. Пример файла fabricconfig.psd1, который использовался в развертывании
# 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.net\MSSCVMMLibrary
           
            # 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= "savilltech\Domain 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="savilltech\administrator"
            ManagementDomainUserPassword="password"
             # This is the domain which NC VMs will join
            ManagementDomainFDQN="savilltech.net"              
            #Managemet Security Group Name
            ManagementSecurityGroupName="savilltech\NC 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                   
        };
     );
}