如何阻止特定 Service Fabric 节点的服务升级?

How can I block service escalation for specific Service Fabric nodes?

问题出现在独立的 Service Fabric 集群中。

我需要将我的服务发布到专用机器上的指定节点。我还想阻止当前服务在新节点上进行分配。 我阅读了放置约束并理解了这个想法,但是当我将一个新节点添加到我的 Service Fabric 集群时,将 InstanceCount 参数设置为 -1 的当前服务分配到我的新节点上。我怎样才能避免这种情况?我必须创建一个新的节点类型吗?或者有什么限制吗?

Service Fabric 有NodeTypes 的概念,用来标识Nodes\Machines\VMs 个具有相同配置的池。如果您的工作负载有特定要求,需要特定 hardware\software,场景可以是 API 接收作业,后台作业 运行 GPU 计算应用程序,并且您想要隔离负载将这些节点连接到您的特定应用程序,您必须:

  • 创建一个 NodeType 来托管 API,让我们在这里调用 FrontEntNodeType,这将是您的 api 将部署到的资源池.在您的 APIs 服务中,您必须添加放置约束 NodeType == FrontEntNodeType

  • 创建一个 NodeType 来托管 Worker,让我们在这里调用 GPUWorkerNodeType,在您的 worker 服务中,您必须添加放置约束 NodeType == GPUWorkerNodeType

当您部署服务时,它们将以正确的机器为目标,并且只有具有 GPUWorkerNodeType 约束的服务才会转到 GPU 节点来处理工作。

The big catch of placement constraints is: if you don't specify a PlacementContraint on your service, it will go to any node available to receive load. So, it won't restrict older services that were deployed without placement constraints, you will have to update these to keep the cluster tidy.

您可以使用节点属性执行相同操作,默认情况下节点包含属性 NodeName 和 NodeType。您可以让具有不同框架版本的节点参与同一 NodeType,如果您想在某些节点上升级框架以在应用到所有节点之前验证负载和行为,您可以使用新的框架版本升级一些节点,添加节点的 NodeProperty,如 DotNetFrameworkVersion=4.7,并使用 DotNetFrameworkVersion==4.7 和其他 (DotNetFrameworkVersion!=4.7)

放置一些服务

您可以在以下 link 中找到这些信息: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-resource-manager-cluster-description#node-properties-and-placement-constraints