Azure service fabric 为什么不是';升级中不可能更改放置约束吗?

Azure service fabric 为什么不是';升级中不可能更改放置约束吗?,azure-service-fabric,Azure Service Fabric,我有一个无状态ASP.NET核心(RC1)服务运行在我的Azure服务结构集群中。其清单如下: <ServiceManifest Name="MyServicePkg" Version="1.0.2" ...> <ServiceTypes> <StatelessServiceType ServiceTypeName="MyServiceType" /> </ServiceTypes> ... </ServiceM

我有一个无状态ASP.NET核心(RC1)服务运行在我的Azure服务结构集群中。其清单如下:

<ServiceManifest Name="MyServicePkg" Version="1.0.2" ...>
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="MyServiceType" />
   </ServiceTypes>
   ...
</ServiceManifest>
<ServiceManifest Name="MyServicePkg" Version="1.0.3" ...>
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="MyServiceType">
          <PlacementConstraints>(nodeType==Backend)</PlacementConstraints>
      </StatelessServiceType>
   </ServiceTypes>
   ...
</ServiceManifest>

...
我的群集配置了放置属性。我有5台“nodeType=后端”服务器和3台“nodeType=前端”服务器

我想升级我的服务,并指定它只能放在“后端”节点上。这是我的更新清单:

<ServiceManifest Name="MyServicePkg" Version="1.0.2" ...>
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="MyServiceType" />
   </ServiceTypes>
   ...
</ServiceManifest>
<ServiceManifest Name="MyServicePkg" Version="1.0.3" ...>
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="MyServiceType">
          <PlacementConstraints>(nodeType==Backend)</PlacementConstraints>
      </StatelessServiceType>
   </ServiceTypes>
   ...
</ServiceManifest>

(节点类型==后端)
...
但是,如果现在执行升级,则会出现以下错误:

启动ServiceFabricApplicationUpgrade:默认服务描述 不得作为升级的一部分进行修改。修改的默认服务: 结构:/MyApp/MyService

为什么不能通过升级来更改约束


我是否必须删除并重新创建服务?这对我来说似乎是一个极大的问题,因为它会导致有状态服务的停机和数据丢失。

因此这里的问题实际上是ApplicationManifest的DefaultService部分。当服务作为DefaultService的一部分创建时,以后您无法对其进行更改。您可能可以通过ServiceFabric explorer进行更改,但我不确定

一个建议是在ApplicationManifest中保持DefaultServices为空,而是手动创建服务。对于手动,我指的是通过powershell、代码或ServiceFabric Explorer。 这使您在以后更改部分服务时具有更大的灵活性。当这样做的时候,你我知道你有可能在服务运行后改变诸如放置约束之类的事情

要使用PowerShell创建服务,可以使用
newservicefactricservice
命令。
要从代码创建它,您可以使用
FabricClient
来创建它。可以在这里找到一个示例:

实际上有一种相当简单的方法可以做到这一点,而无需编写大量代码来手动定义fabric集群上的应用程序

虽然可以在服务清单中声明放置约束,但也可以在应用程序清单中声明它们。应用程序清单中声明的任何内容都将覆盖服务清单中的内容。然后,通过应用程序清单中的设置,您可以使用参数根据要用于特定部署的参数文件更改值


我刚写完。我希望你觉得它有用

谢谢你的回答。这似乎是一个巨大的缺点,因为这是VisualStudio中的默认设置,每个人都会这样使用它。你有关于如何手动创建服务的链接/更多信息吗?这太棒了,让我非常高兴!谢谢分享!!!这一定要记录在官方文件中。