在Azure Service Fabric群集上并排运行多个应用程序实例和配置

时间:2017-04-07 22:11:54

标签: .net azure azure-devops azure-service-fabric azure-deployment

我有一个Service Fabric应用程序,可以在Azure上为“Dev”,“Test”,“Stage”和“Production”配置多个服务。

我的目标是为我的“测试”提供1个群集。 “舞台”环境和另一个“生产”环境。显而易见的原因是为了节省成本!

我正在使用Visual Studio Online Build / Release。这是我遇到问题的地方:

我可以更新“Stage”的配置设置并部署到我的群集 - 但是由于应用程序名称将与现有的“Test”应用程序相同,因此它会使用新的配置更新覆盖该群集上的该应用程序“阶段”。

显然,我可以从Service Fabric Explorer中“创建应用程序实例” - 但是我没有办法以这种方式注入新配置 - 只为该实例设置一个新名称,这将运行另一个配置相同的实例基地。

所以我想 - 好吧,我只会上传具有不同配置的新版本并从资源管理器部署实例 - 但这不仅会让人感到麻烦,还会尝试升级我运行的现有应用程序。

我还需要使用每个应用程序实例重新配置每个服务的端口,以便它们都可以位于同一个集群中并位于同一负载均衡器后面,但似乎没有办法覆盖ServiceManifest中的节点。 ...

所以我的问题是:使用单独的配置和服务端口管理和隔离多个应用程序实例的最佳做法是什么,以便您可以为“测试”配置一个,为“舞台”配置另一个“并且两者都生活在同一个集群中?

3 个答案:

答案 0 :(得分:7)

你走在正确的轨道上。我总是建议一个集群用于dev / test / staging,另一个集群用于生产。

实际上,技巧是为每个部署创建新的应用程序实例,并通过应用程序参数提供新的配置值。 Service Fabric Explorer尚未公开此功能,但您可以使用SF管理API执行此操作:

为每个环境创建新的应用程序类型或版本是混乱的,而不是真正的预期用例。

答案 1 :(得分:1)

我已经设法使用ApplicationParameter xml文件执行此操作,并在VSTS中部署期间选择正确的文件。 例如,这是我用于部署到测试环境的Cloud.xml。技巧是第二行的Name参数。我已使用此文档指定了端口:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-how-to-specify-port-number-using-parameters

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/DotNetCoreTest" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" Value="2" />
    <Parameter Name="ServiceEndpoint_PortNumber" Value="8909" />
  </Parameters>
</Application>

这是Staging:Staging.xml

的xml文件
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/DotNetCoreStaging" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" Value="2" />
    <Parameter Name="ServiceEndpoint_PortNumber" Value="8910" />
  </Parameters>
</Application>

答案 2 :(得分:0)

目前我已经通过拥有2份解决方案来实现这一目标,其中我将更改以下参数

  1. ApplicationTypeSn文档中的ApplicationManifest.xml中的ApplicationTypeName
  2. ApplicationParameters文件夹中的Cloud.xml文件中的名称。
  3. WebAPI项目的PackageRoot文件夹中的ServiceManifest.xml文件中的端口。
  4. 让我知道是否有更好的方法,因为我必须将.NET应用程序部署到Linux Service Fabric Cluster中。我不能使用Visual Studio。