【问题标题】:Temporarily disabling default services in servicefabric using powershell使用powershell临时禁用servicefabric中的默认服务
【发布时间】:2020-07-23 01:52:52
【问题描述】:

具体问题

对于那些只想直接提问的人:

  • 有没有办法暂时禁用 ServiceFabric 应用程序类型的默认服务,以便在不自动安装任何默认服务的情况下安装新应用程序(使用 Powershell)?
  • 这里建议的解决方案是从清单中删除默认服务,然后再恢复它们。我可以编写一个 PowerShell 脚本来相应地调整应用程序清单,但是如何使用 Powershell 更新应用程序类型 - 假设我已经更改了清单?

任何解决上下文问题而不需要手动配置干预的解决方案都是可以接受的 - 我提出的解决方案可能不是唯一可能的解决方案。我们确实希望避免人工干预。

当允许干预时,我们已经能够在需要时注释掉默认服务。我们正在专门寻找一种不需要干预的解决方案,因为这样可以减少错误和调试问题。


上下文

我在本地开发期间遇到了使用应用程序清单的默认服务的问题。

我知道一般的“不要使用默认服务”建议,并且正在遵循。在 CI 构建期间,默认服务将被删除,并且不会依赖于我们在 Azure 中的任何集群。这里唯一的例外是本地开发者机器,它使用默认服务通过在启动调试会话时启用所有服务来保持开发者 F5 体验更好。

我们编写了专门的脚本,为新租户(SF 应用程序)提供他们自己的一组服务(SF 服务)。不是每个租户都应该获得每项服务,我们希望选择加入服务,这是脚本已经做的(基于我们在其他地方管理的映射,这不是当前问题的一部分,因为配置脚本存在并且有效)。

但是,当启用默认服务时,每个租户都已经获得了每项服务,并且实际的选择加入配置是无用的。这是我们正在尝试解决的问题。
这个相同的脚本在我们的生产集群中工作,因为那里没有配置默认服务。问题只关注当地的发展环境。

本质上,我们在本地开发过程中处理两种情况:

  • 调试时,我们希望启用默认服务,因为它允许我们通过按 F5 来运行所有服务(并且不需要任何进一步的操作)
  • 在测试我们的配置脚本时,我们不需要默认服务,因为它会妨碍我们的选择性配置行为

我知道从清单中注释掉默认服务可以解决问题,但这需要开发人员不断切换清单的内容并重新安装应用程序类型,而我们希望避免这种情况。
理想情况下,我们希望在清单中有默认服务(就像目前的情况一样),然后让配置脚本“禁用”它自己的运行时的默认服务(并在退出之前恢复默认服务),因为这让我们两种情况下都需要的行为。

什么解决方案需要最少的手动开发人员干预才能在这两种情况下获得所需的行为?

我目前正在尝试实现它,以便配置脚本:

  1. 将应用程序清单复制到备份位置
  2. 从真实清单中删除默认服务
  3. 使用新清单更新应用程序类型(即不使用默认服务)
  4. 运行供应逻辑
  5. 使用步骤 1 中的备份清单恢复真实清单
  6. 使用恢复的清单更新应用程序类型(即使用默认服务)

具体是第3步和第6步,我不知道如何实现。

【问题讨论】:

  • 您并不清楚为什么需要为应用程序类型提供默认服务。是什么阻止您简单地删除 CI 中的默认服务并保留它?
  • @JohnNilsson:在 azure 上,一切正常。但是当我们对配置脚本进行更改时,我们希望在部署之前在本地对其进行测试。在本地,默认服务阻止我们测试脚本是否正确提供 一些 服务,这是我要解决的问题。
  • @JohnNilsson:明确一点:我们希望在本地使用默认服务,因为在开发服务和调试服务时它既方便又好用。只有当我们在本地测试配置脚本时,我们才不想自动安装这些默认服务。我正在寻找一种方法来暂停该默认服务安装仅在配置脚本期间,而不是在正常调试会话期间;无需开发人员每次手动调整清单。我正在寻找一种方法来编写这些调整的脚本、提供服务,然后恢复清单。

标签: powershell azure-service-fabric


【解决方案1】:

考虑在解决方案中有两个 sfproj 项目。一种有默认服务,一种没有。

还要考虑使用 start-service.ps1 脚本而不是默认服务。这样两个项目就可以使用相同的应用程序清单。

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-debugging-your-application#running-a-script-as-part-of-debugging

【讨论】:

  • 如果我有两个依赖同一个清单的项目,它们之间的唯一区别不就是应用程序的部署方式吗?如果这就是区别,我不能只升级现有应用程序(添加/删除默认服务)而不是部署新应用程序吗?
  • 恐怕又失去了我。此设置的要点是,它们仅在部署方式上有所不同。一个 sfproj 将自动部署默认服务,用于开发。另一个不会,允许您测试其他部署方案。使用启动脚本当然可以使用其他条件来决定何时部署什么以及部署什么,而不是拥有多个 sfprojs。
  • 核心问题是我如何(或是否)可以调整现有应用程序类型的默认服务,而不是使用不同的默认服务集运行两种不同的应用程序类型。假设应用程序已经安装,我该如何更改它的默认服务(你可以假设我已经相应地更新了应用程序清单)
  • 我认为没有其他方法可以做到这一点,然后简单地为类型提供不同的清单。但是如果你只需要dev的默认服务,就没有理由来回翻转。只是在清单中没有任何默认服务并保留它。请改用启动脚本。
猜你喜欢
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
相关资源
最近更新 更多