Инфраструктура как код

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

Примеры шаблонов Resource Manager для Windows и Linux доступны в образцах Azure на сайте GitHub. Их можно использовать в качестве отправной точки для создания шаблона кластера. Скачайте файлы azuredeploy.json и azuredeploy.parameters.json и измените их в соответствии со своими требованиями.

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Чтобы развернуть шаблоны azuredeploy.json и azuredeploy.parameters.json, скачанные ранее, используйте следующие команды Azure CLI:

ResourceGroupName="sfclustergroup"
Location="westus"

az group create --name $ResourceGroupName --location $Location 
az deployment group create --name $ResourceGroupName  --template-file azuredeploy.json --parameters @azuredeploy.parameters.json

Создание ресурса с помощью PowerShell

$ResourceGroupName="sfclustergroup"
$Location="westus"
$Template="azuredeploy.json"
$Parameters="azuredeploy.parameters.json"

New-AzResourceGroup -Name $ResourceGroupName -Location $Location
New-AzResourceGroupDeployment -Name $ResourceGroupName -TemplateFile $Template -TemplateParameterFile $Parameters

Ресурсы Service Fabric

Вы можете развертывать приложения и службы в кластере Service Fabric с помощью Azure Resource Manager. Дополнительные сведения см. в статье Управление приложениями и службами как ресурсами Azure Resource Manager. Ниже приведены рекомендуемые ресурсы приложения Service Fabric, которые следует добавить в список ресурсов шаблона Resource Manager.

{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applicationTypes",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applicationTypes/versions",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'), '/', parameters('applicationTypeVersion'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applications",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applications/services",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'), '/', parameters('serviceName'))]",
    "location": "[variables('clusterLocation')]"
}

Чтобы развернуть приложение с помощью Azure Resource Manager, сначала необходимо создать пакет приложения Service Fabric sfpkg. Следующий скрипт Python демонстрирует пример создания sfpkg:

# Create SFPKG that needs to be uploaded to Azure Storage Blob Container
microservices_sfpkg = zipfile.ZipFile(
    self.microservices_app_package_name, 'w', zipfile.ZIP_DEFLATED)
package_length = len(self.microservices_app_package_path)

for root, dirs, files in os.walk(self.microservices_app_package_path):
    root_folder = root[package_length:]
    for file in files:
        microservices_sfpkg.write(os.path.join(
            root, file), os.path.join(root_folder, file))

microservices_sfpkg.close()

Конфигурация автоматического обновления ОС виртуальной машины

Обновление виртуальных машин — это операция, инициируемая пользователем; рекомендуется включить автоматическое обновление образов в масштабируемом наборе виртуальных машин для управления исправлениями узла кластера Service Fabric. Приложение для управления исправлениями (POA) — это альтернативное решение, предназначенное для кластеров, не размещенных в Azure. Хотя POA можно использовать в Azure, его размещение требует больше управления, чем просто включение автоматического обновления образа ОС в масштабируемом наборе. Ниже приведены свойства шаблона масштабируемого набора виртуальных машин в Resource Manager для включения автоматических обновлений ОС.

"upgradePolicy": {
   "mode": "Automatic",
   "automaticOSUpgradePolicy": {
        "enableAutomaticOSUpgrade": true,
        "disableAutomaticRollback": false
    }
},

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

Убедитесь, что для следующего раздела реестра установлено значение false, чтобы предотвратить несогласованный запуск обновлений на хост-компьютере Windows: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU.

Задайте следующие свойства шаблона масштабируемого набора виртуальных машин, чтобы отключить Центр обновления Windows.

"osProfile": {
        "computerNamePrefix": "{vmss-name}",
        "adminUsername": "{your-username}",
        "secrets": [],
        "windowsConfiguration": {
          "provisionVMAgent": true,
          "enableAutomaticUpdates": false
        }
      },

Конфигурация обновления кластера Service Fabric

Ниже приведено свойство шаблона кластера Service Fabric для включения автоматического обновления.

"upgradeMode": "Automatic",

Чтобы обновить кластер вручную, скачайте файл CAB или DEB дистрибутива на виртуальную машину кластера, а затем запустите следующую команду PowerShell:

Copy-ServiceFabricClusterPackage -Code -CodePackagePath <"local_VM_path_to_msi"> -CodePackagePathInImageStore ServiceFabric.msi -ImageStoreConnectionString "fabric:ImageStore"
Register-ServiceFabricClusterPackage -Code -CodePackagePath "ServiceFabric.msi"
Start-ServiceFabricClusterUpgrade -Code -CodePackageVersion <"msi_code_version">

Дальнейшие действия