Введение в выделенные узлы на управляемых кластерах Service Fabric (предварительная версия)

Выделенный узел Azure — это служба, предоставляющая выделенные для одной подписки Azure физические серверы, способные вместить одну или несколько виртуальных машин. Такой сервер предназначен только для вашей организации и ваших рабочих нагрузок, то есть его ресурсы больше никто не может использовать. Выделенные узлы — это физические серверы, которые используются в наших центрах обработки данных и предоставляются в качестве ресурса. Вы можете подготавливать выделенные узлы в пределах региона, зоны доступности и домена сбоя. Затем вы можете разместить виртуальные машины в подготовленных узлах в конфигурации, которая больше всего соответствует вашим потребностям.

Применение Выделенных узлов Azure для узлов управляемом кластере Service Fabric обеспечивает следующие преимущества.

  • Высокоуровневая аппаратная изоляция физического сервера. Другие виртуальные машины не будут размещаться на ваших узлах. Выделенные узлы развертываются в одних и тех же центрах обработки данных и используют ту же сеть и базовую инфраструктуру хранения, что и другие, не изолированные узлы.
  • Управление событиями обслуживания, инициируемыми платформой Azure. Хотя большинство событий обслуживания почти не оказывает влияния на виртуальные машины, существует ряд чувствительных рабочих нагрузок, на работу которых может повлиять каждая секунда приостановки. С помощью выделенных узлов можно давать согласие на участие в периоде обслуживания, чтобы снизить влияние на службу.

Ценовую категорию для виртуальных машин выделенных узлов можно выбирать в соответствии с требованиями рабочей нагрузки. Подробнее см. статью Виртуальные машины для выделенного узла.

В следующем руководстве представлены пошаговые инструкции по добавлению выделенного узла Azure в управляемый кластер Service Fabric с помощью шаблона Azure Resource Manager.

Необходимые компоненты

Это руководство основано на управляемом кластере, который описан в руководстве по быстрому началу работы: Развертывание управляемого кластера Service Fabric с помощью шаблона Azure Resource Manager.

Подготовка к работе:

Изучение шаблона

Шаблон, используемый в этом кратком руководстве, взят из раздела Примеры Azure — Шаблоны кластера Service Fabric.

Создание клиентского сертификата

В управляемых кластерах Service Fabric в качестве ключа для контроля доступа используется сертификат клиента. Если у вас уже есть сертификат клиента, который вы хотите использовать для управления доступом к кластеру, этот шаг можно пропустить.

Если необходимо создать новый сертификат клиента, выполните действия, описанные в разделе Настройка и получение сертификата из Azure Key Vault. Запишите отпечаток сертификата, так как он потребуется для развертывания шаблона на следующем шаге.

Развертывание ресурсов выделенного узла и настройка доступа к поставщику ресурсов Service Fabric

Создайте выделенную группу узлов и добавьте назначение ролей в группу узлов, где размещается приложение поставщика ресурсов Service Fabric, выполнив указанные ниже действия. Это назначение ролей позволяет поставщику ресурсов Service Fabric развертывать виртуальные машины на выделенных узлах в группе узлов в масштабируемом наборе виртуальных машин для управляемого кластера. Это назначение выполняется один раз.

  1. Получите идентификатор поставщика SFRS и субъект-службу для приложения поставщика ресурсов Service Fabric.

    Login-AzAccount  
    Select-AzSubscription -SubscriptionId <SubId>  
    Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider"
    

    Примечание.

    Убедитесь, что используется правильная подписка, идентификатор субъекта изменится, если подписка принадлежит другому клиенту.

  2. Создайте выделенную группу узлов, закрепленную в одной зоне доступности, и пять доменов сбоя, используя предоставленный пример шаблона развертывания ARM для выделенной группы узлов. Этот пример гарантирует хотя бы один выделенный узел на каждый домен сбоя.

    New-AzResourceGroup -Name $ResourceGroupName -Location $location
    New-AzResourceGroupDeployment -Name "hostgroup-deployment" -ResourceGroupName $ResourceGroupName -TemplateFile ".\HostGroup-And-RoleAssignment.json" -TemplateParameterFile ".\HostGroup-And-RoleAssignment.parameters.json" -Debug -Verbose
    

    Примечание.

    • Убедитесь, что выбрано правильное семейство ценовых категорий для выделенного узла, которое совпадает с семейством ценовых категорий для виртуальной машины базового типа узла. Подробнее см. статью Виртуальные машины для выделенного узла.
    • В каждом домене сбоя должен быть размещен выделенный узел, а для управляемых кластеров Service Fabric требуются пять доменов сбоя. Поэтому в каждой группе выделенных узлов должны присутствовать по меньшей мере пять выделенных узлов.
  3. Пример шаблона развертывания ARM для выделенной группы узлов из предыдущего шага также добавляет назначение роли в группу узлов с правами доступа участника. Дополнительные сведения о ролях Azure см. в статье Встроенные роли Azure — Azure RBAC Это назначение роли определяется в разделе шаблона для ресурсов, с определенным на первом шаге идентификатором субъекта и идентификатором определения роли.

       "variables": {  
            "authorizationApiVersion": "2018-01-01-preview",
            "contributorRoleId": "b24988ac-6180-42a0-ab88-20f7382dd24c",
            "SFRPAadServicePrincipalId": " <Service Fabric Resource Provider ID> -"
          },
       "resources": [
       {  
                "apiVersion": "[variables('authorizationApiVersion')]",  
                "type": "Microsoft.Compute/Hostgroups/providers/roleAssignments",  
                "name": "[concat(concat(parameters('dhgNamePrefix'), '0'), '/Microsoft.Authorization/', parameters('hostGroupRoleAssignmentId'))]",  
                "dependsOn": [  
                    "[resourceId('Microsoft.Compute/hostGroups', concat(parameters('dhgNamePrefix'), '0'))]"  
                ],  
                "properties": {  
                    "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', variables('contributorRoleId'))]",  
                    "principalId": "[variables('SFRPAadServicePrincipalId')]"  
                }  
              }
              ]
    

    Вы также можете добавить назначение ролей с помощью PowerShell, указав определенный на первом шаге идентификатор субъекта и имя определения роли "Участник", если применимо.

    New-AzRoleAssignment -PrincipalId "<Service Fabric Resource Provider ID>" -RoleDefinitionName "Contributor" -Scope "<Host Group Id>"  
    

Развертывание управляемого кластера Service Fabric

Создайте управляемый кластер Azure Service Fabric с настроенными типами узлов для ссылки на ИД ресурса выделенной группы узлов. Этот тип узла необходимо закрепить в той же зоне доступности, где находится группа узлов.

  1. Выберите шаблон из примера шаблона кластера Service Fabric для выделенного узла, который включает спецификацию для поддержки выделенного узла.

  2. Укажите собственные значения для следующих параметров шаблона:

    • Подписка: выберите ту же подписку Azure, которая используется для группы узлов.
    • Группа ресурсов: выберите Создать. Введите уникальное имя для группы ресурсов, например myResourceGroup, а затем нажмите кнопку ОК.
    • Расположение: выберите то же расположение, которое используется для группы узлов.
    • Имя кластера: Введите уникальное имя кластера, например mysfcluster.
    • Имя пользователя администратора: введите имя администратора, который будет использоваться для RDP на базовых виртуальных машинах в кластере.
    • Пароль администратора: введите пароль администратора, который будет использоваться для RDP на базовых виртуальных машинах в кластере.
    • Отпечаток сертификата клиента: укажите отпечаток сертификата клиента, который хотите использовать для доступа к кластеру. Если у вас нет сертификата, выполните действия по настройке и получению сертификата, чтобы создать самозаверяющий сертификат.
    • Имя типа узла: введите уникальное имя для типа узла, например nt1.
  3. Разверните шаблон ARM с помощью одного из следующих методов.

    • Интерфейс для пользовательского шаблона на портале ARM: Настраиваемое развертывание — Microsoft Azure. Щелкните следующее изображение, чтобы войти в Azure, затем укажите нужные значения для параметров шаблона и разверните этот шаблон.

      Button to deploy the Resource Manager template to Azure.

    • Командлеты ARM PowerShell: New-AzResourceGroupDeployment (Az.Resources). Сохраните пути к шаблону ARM и файлам параметров в переменных, а затем разверните шаблон.

      $templateFilePath = "<full path to azuredeploy.json>" 
      $parameterFilePath = "<full path to azuredeploy.parameters.json>"
      $pass = (ConvertTo-SecureString -AsPlainText -Force "<adminPassword>")
      
      New-AzResourceGroupDeployment ` 
         -Name $DeploymentName ` 
         -ResourceGroupName $resourceGroupName ` 
         -TemplateFile $templateFilePath ` 
         -TemplateParameterFile $parameterFilePath `
         -adminPassword $pass `
         -Debug -Verbose
      

    Дождитесь успешного завершения развертывания.

Устранение неполадок

  1. Следующая ошибка возникает, если SFRP не имеет доступа к группе узлов. Просмотрите описанные выше шаги назначения ролей и убедитесь, что назначение выполнено правильно.
         {  
                "code": "LinkedAuthorizationFailed",  
                "message": "The client '[<clientId>]' with object id '[<objectId>]' has permission to perform action 'Microsoft.Compute/virtualMachineScaleSets/write' on scope '/subscriptions/[<Subs-Id>]/resourcegroups/[<ResGrp-Id>]/providers/Microsoft.Compute/virtualMachineScaleSets/pnt'; however, it does not have permission to perform action 'write' on the linked scope(s) '/subscriptions/[<Subs-Id>]/resourceGroups/[<ResGrp-Id>]/providers/Microsoft.Compute/hostGroups/HostGroupscu0' or the linked scope(s) are invalid."
             }
    
  2. Если группа узлов находится в подписке, отличной от подписки для кластеров, отображается следующая ошибка. Сделайте так, чтобы они находились в одной подписке.
          {  
                "code": "BadRequest",  
                "message": "Entity subscriptionId in resource reference id /subscriptions/[<Subs-Id>]/resourceGroups/[<ResGrp-Id>]/providers/Microsoft.Compute/hostGroups/[<HostGroup>] is invalid."  
              }
    
  3. Если квота для группы узлов недостаточно, возникает следующая ошибка:
          {  
                "code": "QuotaExceeded",  
                "message": "Operation could not be completed as it results in exceeding approved standardDSv3Family Cores quota.  
          Additional Required: 320, (Minimum) New Limit Required: 320. Submit a request for Quota increase [here](https://aka.ms/ProdportalCRP/#blade/Microsoft_Azure_Capacity/UsageAndQuota.ReactView/Parameters/). Please read more about quota limits [here](/azure/azure-supportability/per-vm-quota-requests)” 
              }
    

Следующие шаги