Service Fabric 托管群集节点类型

Service Fabric 托管群集中的每个节点类型都受虚拟机规模集的支持。 使用托管群集,可通过 Service Fabric 托管群集资源提供程序进行任何所需的更改。 托管群集提供程序会代你创建和抽象化群集的所有基础资源。 使用资源提供程序来管理资源有助于简化群集节点类型的部署和管理,防止删除种子节点等操作错误,并简化对最佳做法(例如验证 VM SKU 是否可安全使用)的应用。

本文档的其余部分将介绍如何调整各种设置,包括创建节点类型、调整节点类型实例数量、启用自动 OS 映像升级、更改 OS 映像以及配置放置属性。 本文档还将重点介绍如何使用 Azure 门户或 Azure 资源管理器模板进行更改。

重要

目前,Service Fabric 托管群集不支持自定义 OS 映像。

注意

正在进行更改时,你将无法修改节点类型。 建议在执行其他更改之前,先完成任何请求的更改。

添加节点类型

可以通过门户、Azure 资源管理器模板或 PowerShell 将节点类型添加到 Service Fabric 托管群集。

使用门户添加

备注

只能使用门户添加次要节点类型

  1. 登录到 Azure 门户

  2. 导航到群集资源概述页面。 Sample Overview page

  3. Settings 部分下选择 Node typesNode Types view

  4. 单击顶部的 Add,填写所需信息,然后单击底部的“添加”,这样就可以了!

  5. 等待新节点类型添加完成

使用 ARM 模板添加

添加另一个具有所需值的资源类型 Microsoft.ServiceFabric/managedclusters/nodetypes,并执行群集部署以使设置生效。

  • Service Fabric 托管群集资源 apiVersion 应为 2021-05-01 或更高版本。
  • 如果打算替换现有的主节点类型,请确保将 isPrimary 设置为 true
{
    "apiVersion": "[variables('sfApiVersion')]",
    "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
    "name": "[concat(parameters('clusterName'), '/', parameters('nodeType2Name'))]",
    "location": "[resourcegroup().location]",
    "dependsOn": [
        "[concat('Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'))]"
    ],
    "properties": {
        "isPrimary": false,
        "vmImagePublisher": "[parameters('vmImagePublisher')]",
        "vmImageOffer": "[parameters('vmImageOffer')]",
        "vmImageSku": "[parameters('vmImageSku')]",
        "vmImageVersion": "[parameters('vmImageVersion')]",
        "vmSize": "[parameters('nodeType2VmSize')]",
        "vmInstanceCount": "[parameters('nodeType2VmInstanceCount')]",
        "dataDiskSizeGB": "[parameters('nodeType2DataDiskSizeGB')]",
        "dataDiskType": "[parameters('nodeType2managedDataDiskType')]"
    }
}

有关双节点类型配置的示例,请参阅示例双节点类型 ARM 模板

使用 PowerShell 添加

若要创建新的节点类型,需要定义以下属性:

  • 资源组:群集所在的资源组
  • 群集名称:托管群集的名称
  • 节点类型名称:在群集的任何现有节点类型中独一无二的名称。
  • 实例计数:新节点类型的初始节点数。
  • VM 大小:节点的 VM SKU。 如果未指定,则使用默认值“Standard_D2”。

备注

如果要添加主节点类型,必须使用 -Primary 属性。

$resourceGroup = "myResourceGroup"
$clusterName = "mysfcluster"
$nodeTypeName = "nt2"
$vmSize = "Standard_D2_v2"

New-AzServiceFabricManagedNodeType -ResourceGroupName $resourceGroup -ClusterName $clusterName -Name $nodeTypeName -InstanceCount 3 -vmSize $vmSize

删除节点类型

可以使用门户或 PowerShell 删除 Service Fabric 托管群集节点类型。

备注

若要从 Service Fabric 托管群集中删除主节点类型,必须使用 PowerShell,并且必须有多个可用的主节点类型。

使用门户删除

  1. 登录到 Azure 门户

  2. 导航到群集资源概述页面。 Sample Overview page

  3. Settings 部分下选择 Node typesNode Types view

  4. 选择要删除的 Node Type 并单击顶部的 Delete

使用 PowerShell 删除

注意

如果为升级 SKU 等方案删除主节点类型,需要花费数小时才能完成删除,可以使用 SFX 来监视进度。 每个升级域 (UD) 中的种子节点将按照每次一个的进度迁移。

若要删除节点类型,需要定义以下属性:

  • 资源组:群集所在的资源组
  • 群集名称:托管群集的名称
  • 节点类型名称:在群集的任何现有节点类型中独一无二的名称。
$resourceGroup = "myResourceGroup"
$clusterName = "myCluster"
$nodeTypeName = "nt2"

Remove-AzServiceFabricManagedNodeType -ResourceGroupName $resourceGroup -ClusterName $clusterName  -Name $nodeTypeName

缩放节点类型

可以使用门户、ARM 模板或 PowerShell 来缩放 Service Fabric 托管群集节点类型。 如果需要全自动化的解决方案,还可以为辅助节点类型配置自动缩放

备注

  • 主节点类型不能设置为自动缩放,只能将它设置为手动缩放。
  • 对于主节点类型,基本 SKU 群集的节点数不能少于 3 个,标准 SKU 群集的节点数不能少于 5 个。

使用门户缩放

在本演练中,学习如何使用门户修改节点类型的节点计数。

  1. 登录到 Azure 门户

  2. 导航到群集资源概述页面。 Sample Overview page

  3. Settings 部分下选择 Node Types

  4. 选择要修改的 Node type name

  5. 查看并更新节点类型属性(如有需要)。

Sample showing a node count increase

  1. 选择 Manage node type scaling 以配置缩放设置,并在自定义自动缩放和手动缩放选项之间进行选择。 自动缩放是一项内置功能,可帮助应用程序在需求改变时达到最佳性能。 可以选择手动将资源缩放到特定实例计数,或者通过自定义自动缩放策略来根据指标阈值进行缩放,或计划在指定时间窗口内缩放的实例计数。 详细了解 Azure 自动缩放观看操作说明视频

    • 自定义自动缩放:选择合适的 scale mode 以定义自定义自动缩放策略 - Scale to a specific instance countScale based on a metric。 后者基于指标触发器规则,例如,当 CPU 百分比高于 70% 时,实例计数增加 1。 定义策略后,选择顶部的 Save

      Sample showing auto scaling setting

    • 手动缩放:将 Node count 调整为所需的新值,然后选择顶部的 Save。 在此屏幕截图中,值原本为 3,将其调整成了 5

      Sample showing manual scaling setting

    选择底部的 Apply 以在节点类型上配置这些已保存的设置。

  2. Provisioning state 现将显示 Updating 状态,直到完成。 完成后,它将再次显示 SucceededSample showing a node type updating

使用模板缩放节点类型

若要使用 ARM 模板调整节点类型的节点计数,请使用新值调整 vmInstanceCount 属性,并执行群集部署以使设置生效。 群集会自动开始升级,完成后你将看到其他节点。

  • Service Fabric 托管群集资源 apiVersion 应为 2021-05-01 或更高版本。

注意

如果缩放请求违反要求的最小值,托管群集提供程序将阻止缩放调整并返回一个错误。

{
  "apiVersion": "[variables('sfApiVersion')]",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]",
  "location": "[resourcegroup().location]",
  "properties": {
    ...
    "vmInstanceCount": "[parameters('nodeTypeVmInstanceCount')]",
    ...
  }
}

使用 PowerShell 缩放节点类型

更改实例计数,以增加或减少要缩放的节点类型上的节点数。 可以在群集部署的 Azure 资源管理器模板(ARM 模板)或 Service Fabric 资源管理器中找到节点类型名称。

$resourceGroup = "myResourceGroup"
$clusterName = "mysfcluster"
$nodeTypeName = "FE"
$instanceCount = "7"

Set-AzServiceFabricManagedNodeType -ResourceGroupName $resourceGroup -ClusterName $clusterName -name $nodeTypeName -InstanceCount $instanceCount -Verbose

群集会自动开始升级,完成后你将看到其他节点。

启用自动 OS 映像升级

你可以选择对运行托管群集节点的虚拟机启用自动 OS 映像升级。 尽管虚拟机规模集资源是由 Service Fabric 托管群集代表你进行管理的,但你可以选择为群集节点启用自动 OS 映像升级。 与经典 Service Fabric 群集一样,默认情况下不会升级托管群集节点,以防止群集意外中断。

启动自动 OS 升级:

  • 使用 apiVersion 2021-05-01 或更高版本的“Microsoft.ServiceFabric/managedclusters”和“Microsoft.ServiceFabric/managedclusters/nodetypes”资源
  • 将群集的属性 enableAutoOSUpgrade 设置为“true”
  • 将群集 nodeType 的资源属性 vmImageVersion 设置为“latest”

例如:

    {
      "apiVersion": "[variables('sfApiVersion')]",
      "type": "Microsoft.ServiceFabric/managedclusters",
      ...
      "properties": {
        ...
        "enableAutoOSUpgrade": true
      },
    },
    {
      "apiVersion": "[variables('sfApiVersion')]",
      "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
       ...
      "properties": {
        ...
        "vmImageVersion": "latest",
        ...
      }
    }
}

启用后,Service Fabric 将开始查询和跟踪托管群集中的 OS 映像版本。 如果有新的 OS 版本可用,将升级群集节点类型(虚拟机规模集),一次升级一个。 仅在确认没有群集节点 OS 映像升级正在进行后,才执行 Service Fabric 运行时升级。

如果升级失败,Service Fabric 将在 24 小时后重试,最多重试三次。 类似于经典(非托管)Service Fabric 升级,运行不正常的应用或节点可能会阻止 OS 映像升级。

有关映像升级的详细信息,请参阅 Azure 虚拟机规模集的自动 OS 映像升级

修改节点类型的 OS SKU

Service Fabric 托管群集使你能够就地修改节点类型的 OS SKU。 这适用于从 Windows 2019 迁移到 Windows 2022 等场景,或者适用于要切换到服务器(核心)SKU 与具有桌面体验的服务器 SKU 的情况。

使用门户修改 OS SKU

在本演练中,学习如何使用门户修改节点类型的 OS 映像。

  1. 登录到 Azure 门户

  2. 导航到群集资源概述页面。 Sample Overview page

  3. Settings 部分下选择 Node Types

  4. 选择要修改的 Node type name

  5. OS Image 调整为所需的新值,然后选择底部的 Apply。 ![显示正在更改 OS 映像的示例][change-os-image]

  6. Provisioning state 现将显示 Updating 状态,并将一次执行一个升级域。 完成后,它将再次显示 SucceededSample showing a node type updating

使用模板修改 OS SKU

若要使用 ARM 模板修改用于节点类型的 OS 映像,请使用新值调整 vmImageSku 属性,并执行群集部署以使设置生效。 托管群集提供程序将按升级域对每个实例进行重置映像。

  • Service Fabric 托管群集资源 apiVersion 应为 2021-05-01 或更高版本。
{
  "apiVersion": "[variables('sfApiVersion')]",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]",
  "location": "[resourcegroup().location]",
  "properties": {
    ...
    "vmImagePublisher": "[parameters('vmImagePublisher')]",
    "vmImageOffer": "[parameters('vmImageOffer')]",
    "vmImageSku": "[parameters('vmImageSku')]",
    "vmImageVersion": "[parameters('vmImageVersion')]",
    ...
  }
}

配置节点类型的放置属性

放置属性用于确保某些工作负载仅在群集中的某些节点类型上运行。 Service Fabric 托管群集支持通过门户、ARM 模板或 PowerShell 配置这些属性。

使用门户配置放置属性

在本演练中,学习如何使用门户修改节点类型的放置属性。

  1. 登录到 Azure 门户

  2. 导航到群集资源概述页面。 Sample Overview page

  3. Settings 部分下选择 Node Types

  4. 选择要修改的 Node type name

  5. Placement properties 部分添加所需的名称和值,并选择底部的 Apply。 在此屏幕截图中,NameSSD_PremiumtrueValue 一起使用。 Sample showing adding a placement property

  6. Provisioning state 现将显示 Updating 状态,直到完成。 完成后,它将再次显示 SucceededSample showing a node type updating

使用模板配置放置属性

若要使用 ARM 模板调整节点类型的放置属性,请使用新值调整 placementProperties 属性,并执行群集部署以使设置生效。 下面的示例显示了要为节点类型设置的三个值。

  • Service Fabric 托管群集资源 apiVersion 应为 2021-05-01 或更高版本。
{
  "apiVersion": "[variables('sfApiVersion')]",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]",
  "location": "[resourcegroup().location]",
  "properties": {
    "placementProperties": {
      "PremiumSSD": "true",
      "NodeColor": "green",
      "SomeProperty": "5"
    }
  }
}

使用 PowerShell 配置放置属性

以下示例将更新并覆盖给定节点类型的任何现有放置属性。

$rgName = "testRG"
$clusterName = "testCluster"
$NodeTypeName = "nt1"
Set-AzServiceFabricManagedNodeType -ResourceGroupName $rgName -ClusterName $clusterName -name $NodeTypeName -PlacementProperty @{NodeColor="Red";SomeProperty="6";} -Verbose

修改节点类型的 VM SKU

若要使用 ARM 模板修改用于节点类型的 VM SKU 大小,请使用新值调整 vmSize 属性,并执行群集部署以使设置生效。 托管群集提供程序将按升级域对每个实例进行重置映像。 有关 SKU 选项的列表,请参阅 VM 大小 - Azure 虚拟机 | Azure Learn

{
  "apiVersion": "[variables('sfApiVersion')]",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]",
  "location": "[resourcegroup().location]",
  "properties": {
    ...
    "vmSize": "[parameters('vmImageVersion')]",
    ...
  }
}

配置多个托管磁盘

Service Fabric 托管群集默认配置一个托管磁盘。 通过配置以下可选属性和值,可将更多托管磁盘添加到群集中的节点类型。 可指定驱动器号、磁盘类型和每个磁盘的大小。

通过在资源管理器模板中声明 additionalDataDisks 属性和必需参数配置更多托管磁盘,如下所示:

功能要求

  • Lun 必须对每个磁盘都是唯一的,并且不能使用保留的 lun 0
  • 磁盘号不能使用保留字母 C 或 D,而且一旦创建就无法修改。 如果未指定,则将 S 用作默认设置。
  • 必须指定支持的磁盘类型
  • Service Fabric 托管群集资源 apiVersion 应为 2022-01-01 或更高版本。
{
  "apiVersion": "[variables('sfApiVersion')]",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]",
  "location": "[resourcegroup().location]",
  "properties": {
    "additionalDataDisks": {
      "lun": "1",
      "diskSizeGB": "50",
      "diskType": "Standard_LRS",
      "diskLetter": "S" 
    }
  }
}

请参阅可用参数的完整列表

配置 Service Fabric 数据磁盘驱动器号

Service Fabric 托管群集默认配置 Service Fabric 数据磁盘,并在节点类型的所有节点上自动配置驱动器号。 通过配置此可选属性和值,如果对驱动器号映射有特定要求,可指定和保留 Service Fabric 数据磁盘号。

功能要求

  • 磁盘号不能使用保留字母 C 或 D,而且一旦创建就无法修改。 如果未指定,则将 S 用作默认设置。
  • Service Fabric 托管群集资源 apiVersion 应为 2022-01-01 或更高版本。
{
  {
    "apiVersion": "[variables('sfApiVersion')]",
    "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
    "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]",
    "location": "[resourcegroup().location]",
    "properties": {
      "dataDiskLetter": "S"
    }
  }
}

后续步骤