基础结构即代码

在生产方案中,使用资源管理器模板创建 Azure Service Fabric 群集。 资源管理器模板可以更好地控制资源属性,并确保你具有一致的资源模型。

GitHub 上的 Azure 示例中提供了适用于 Windows 和 Linux 的示例资源管理器模板。 这些模板可用作群集模板的起点。 下载 azuredeploy.jsonazuredeploy.parameters.json 并编辑它们以满足你的自定义要求。

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

若要部署你在上面下载的 azuredeploy.jsonazuredeploy.parameters.json 模板,请使用以下 Azure CLI 命令:

ResourceGroupName="sfclustergroup"
Location="chinanorth"

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="chinanorth"
$Template="azuredeploy.json"
$Parameters="azuredeploy.parameters.json"

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

Service Fabric 资源

可以通过 Azure 资源管理器,将应用程序和服务部署到 Service Fabric 群集。 有关详细信息,请参阅将应用程序和服务作为 Azure 资源管理器资源进行管理。 下面是要在资源管理器模板资源中包括的最佳做法 Service Fabric 应用程序特定资源。

{
    "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 资源管理器部署应用程序,必须首先创建一个 sfpkg Service Fabric 应用程序包。 下面的 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()

虚拟机 OS 自动升级配置

升级虚拟机是用户启动的操作,建议为 Service Fabric 群集节点补丁的管理启用虚拟机规模集自动映像升级。 补丁业务流程应用程序 (POA) 是一种替代解决方案,适用于非 Azure 托管群集。 尽管可以在 Azure 中使用 POA,但托管它需要更多的管理,而不仅仅是简单地启用规模集自动 OS 映像升级。 下面是用于启用自动 OS 升级的虚拟机规模集资源管理器模板属性:

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

使用带 Service Fabric 的 OS 自动升级时,将推出新的 OS 映像(每次一个更新域),以维持 Service Fabric 中运行的服务的高可用性。 若要利用 Service Fabric 中的自动 OS 升级,必须将群集配置为使用银级持久性层或更高层级。

确保将以下注册表项设置为 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">

后续步骤