我正在尝试将Service Fabric应用程序从Visual Studio 2017升级到我们的Azure Service Fabric群集。 9月中旬,我成功发布了具有相同PowerShell脚本的同一应用程序到SFC的升级,没有任何问题。我现在正尝试在下一个版本号上对其进行升级,并突然收到此错误。
在发布过程中出现与Powershell相关的以下错误。
2>Started executing script 'Deploy-FabricApplication.ps1'.
2>powershell -NonInteractive -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -Command ". 'C:\Users\pj\Source\Workspaces\VDevelopment\trunk\Services\Sources\src\For.Application.ServiceFabric.Sources\Scripts\Deploy-FabricApplication.ps1' -ApplicationPackagePath 'C:\Users\pj\Source\Workspaces\VDevelopment\trunk\Services\Sources\src\For.Application.ServiceFabric.Sources\pkg\Debug' -PublishProfileFile 'C:\Users\pj\Source\Workspaces\VDevelopment\trunk\Services\Sources\src\For.Application.ServiceFabric.Sources\PublishProfiles\Cloud.xml' -DeployOnly:$false -ApplicationParameter:@{} -UnregisterUnusedApplicationVersionsAfterUpgrade $false -OverrideUpgradeBehavior 'None' -OverwriteBehavior 'SameAppTypeAndVersion' -SkipPackageValidation:$false -ErrorAction Stop"
2>Copying application package to image store...
2>Upload to Image Store succeeded
2>Registering application type...
2>Register application type started. Use Get-ServiceFabricApplicationType to query for status.
2>Running Image Builder process ...
2>Application package is registered.
2>Start upgrading application...
2>aka.ms/upgrade-defaultservices
2>Start-ServiceFabricApplicationUpgrade : aka.ms/upgrade-defaultservices
2>At C:\Program Files\Microsoft SDKs\Service
2>Fabric\Tools\PSModule\ServiceFabricSDK\Publish-UpgradedServiceFabricApplication.ps1:317 char:13
2>+ Start-ServiceFabricApplicationUpgrade @UpgradeParameters
2>+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2> + CategoryInfo : InvalidOperation: (Microsoft.Servi...usterConnection:ClusterConnection) [Start-ServiceFa
2> bricApplicationUpgrade], FabricException
2> + FullyQualifiedErrorId : UpgradeApplicationErrorId,Microsoft.ServiceFabric.Powershell.StartApplicationUpgrade
2>
2>Finished executing script 'Deploy-FabricApplication.ps1'.
2>Time elapsed: 00:07:39.0407526
2>The PowerShell script failed to execute.
========== Build: 1 succeeded, 0 failed, 10 up-to-date, 0 skipped ==========
========== Publish: 0 succeeded, 1 failed, 0 skipped ==========
知道这里发生了什么吗?同样,当我上次在9月份使用相同的脚本发布此文档时,根本没有任何问题,除了升级Manifest版本以将其作为新的升级版本推出之外,我没有对解决方案进行任何更改。
我注意到了这个S / O线程:Getting error as part of trying to upgrade Service Fabric Application using Start-ServiceFabricApplicationUpgrade,并且看到用户的错误是相似的,但是答案不适用于我的问题,因为提供的答案中的所有三个步骤肯定都包含在我的Powershell部署脚本中。
如果有帮助,我可以添加部署脚本,但是会一直等到要求时,并且只在有人认为需要诊断时才将其发布在这里。
答案 0 :(得分:2)
收到此错误是因为您正在更改DefaultService中默认情况下不允许的某些参数。
错误日志中显示的链接aka.ms/upgrade-defaultservices对此进行了说明。
在应用清单中定义的一些默认服务参数 也可以作为应用程序升级的一部分进行升级。
仅支持通过以下方式更改的服务参数 可以将Update-ServiceFabricService更改为升级的一部分。的 在应用程序升级期间更改默认服务的行为如下 如下:
- 在新应用程序清单中创建群集中尚不存在的默认服务。
- 先前和新应用程序清单中同时存在的默认服务已更新。默认参数 新应用程序清单中的服务会覆盖 现有服务。应用程序升级将回滚 如果更新默认服务失败,将自动显示。
- 如果新服务不存在于群集中,则将删除新应用程序清单中不存在的默认服务。请注意,删除默认 服务将导致删除该服务的所有状态,并且不能 撤消。
此外,关于同一件事还有另一个SO问题:Default service descriptions can not be modified as part of upgrade set EnableDefaultServicesUpgrade to true
上面的第1项是一种常见的方法,其中新服务添加到解决方案中,然后在升级过程中没有错误地创建,第2项和第3项是受限制的方法,需要使用EnableDefaultServicesUpgrade
。
项目2就像您添加的答案中所述,您在手动更新期间将MinReplicaSize
和TargetReplicaSize
更改为1,当SF验证了服务的升级状态时,确定差异并阻止继续升级,如果将群集设置EnableDefaultServicesUpgrade
设置为true
,它将继续并覆盖默认值。
在删除服务并再次添加,更改或拼写错误名称时,会出现第3项,SF默认设置将阻止删除该服务。
关于您找到的解决方案(删除并重新创建),这并不理想, 在生产环境中运行有状态服务的情况下,应用存在风险,因为您必须备份状态,重新部署服务并还原备份,在某些情况下,取决于这些更改,您会无法还原备份,因为它们必须与原始服务定义(分区类型,编号和子目录)匹配。如果这些备份很大,您还将失去滚动更新的好处,并且服务可能会暂时中断。
答案 1 :(得分:0)
这个问题与我们试图用不匹配的节点实例推出应用程序有关。我们在此应用程序下运行着一个有状态服务,应该将MinReplicaSize和TargetReplicaSize设置为3。昨天,由于一个问题,我们删除了该服务,并在SF Explorer中重新创建了该服务。这样做之后,它将副本大小参数重置为1。因此,我们使用了Powershell脚本将其更改为3,但是该脚本并未包含所有必需的命令来使服务恢复到之前的确切状态。我们删除了它。因此,今天,当我们去升级应用程序时,由于解决方案参数与SFC中的参数不匹配,因此SFC中的应用程序将不接受VS部署的升级。为解决此问题,我们首先删除了这些服务,然后从VS进行了部署,没有更多错误。