为 mesos-slave 正常关闭迁移 Marathon 应用程序

Migrate Marathon apps for mesos-slave graceful shutdown

我有一个小型 Mesos 集群,我正在使用 Marathon 管理一组长期 运行 服务,每个服务具有可变数量的实例。

我希望能够根据业务需要启动新节点或终止其中一些节点。然而,当终止一个节点时,我意识到有一个潜在的问题:当我关闭一个 Mesos slave 时,碰巧某些服务的实例数暂时低于定义的 minimumHealthCapacity。这可能会导致一些停机时间,例如,如果要停止的机器是 运行 只有一个实例的服务。

考虑以下简化场景:节点 1 是 运行 服务 A,节点 2 是 运行 服务 B,节点 3 是 运行 服务 C。minimumHealthCapacity for all services is 1. 我想终止节点 1 并只留下 2 和 3 运行。我不希望服务 A 出现任何停机时间。预期行为的一个示例是将服务 A 扩展到 2,然后安全地终止节点 1。

我该怎么做才能确保没有服务低于 minimumHealthCapacity

理想情况下,我会有一个受滚动更新启发的过程 - 替换在单独的机器上启动,然后终止机器中的服务以关闭。我希望至少有一个自动化流程来执行此操作,以便缩小规模是一个简单的脚本。我对执行此操作所需的时间没有要求,即只有在我确定 Marathon 迁移已完成并成功后,我才能关闭 Mesos 从站。

Mesos 开发团队目前正在 "Maintenance Primitives" 以便操作员可以指示特定机器计划在特定时间(或尽快)停机,向每个框架触发消息通知他们预期的不可用性 window。然后,像 Marathon 这样的框架可以决定将其任务从该节点迁移出去,以便它可以安全终止而不会造成任何服务停机。

有关更多信息,请参阅 https://issues.apache.org/jira/browse/MESOS-1474。details/patches。