【问题标题】:ECS is there a way to avoid downtime when I change instance type on Cloudformation?当我在 Cloudformation 上更改实例类型时,ECS 有没有办法避免停机?
【发布时间】:2019-12-20 01:28:24
【问题描述】:

我创建了一个集群来在 Aws ECS 上运行我们的测试环境,一切似乎都运行良好,包括零停机时间部署,但我意识到,当我在 Cloudformation 上更改此集群的实例类型时,它会关闭所有实例并且我的 ELB 启动失败,因为没有运行实例来处理此请求。

集群正在使用 Spot 实例运行,所以我的问题是有没有一种方法可以在不关闭整个集群的情况下更新 Spot 实例的实例类型?

【问题讨论】:

    标签: amazon-web-services amazon-ecs


    【解决方案1】:

    您可能希望将此活动分成更小的块并逐个进行。您也可以编写小型 cloudformation 模板,因为默认情况下,如果您更新实例类型,那么您的实例将重新启动,为了避免零停机,您可能必须一次完成一个。

    但是,我可以在这里想到其他两种方法,但都需要花钱。

    1. ASG:创建一个新的自动扩缩组或使用现有的组并更改启动配置。
    2. 蓝/绿部署:创建准确的资源集,但这次使用更新的实例类型,并使用 Route53 的加权路由策略来控制流量。

    这完全取决于需求,如果您可以投入资金,则使用上述两种方法,否则坚持小型部署。

    【讨论】:

      【解决方案2】:

      您有 AutoScaling 组吗?这将允许您更改启动模板或配置以具有新的实例类型。然后,您可以将 ASG 所需计数和最小计数设置为更高的数字。让新的实例类型启动,在目标组中投入使用。然后只需删除旧实例并将您的 Auto Scaling 指标恢复正常即可。

      如果没有 ASG,您可以手动启动一个新实例,将该实例放入 ECS 目标组中。确认它已加入集群并正在运行您的服务和任务。然后删除旧实例。

      【讨论】:

      • 感谢您的回答,对于这个集群我不这样做,因为我使用的是现场实例,所以我想一切都基于现场车队请求,如果我错了,请更正,但我无法更改现场实例的最小计数是否正确,它必须始终为 0?
      • 不,您可以在伸缩组中使用 Spot 实例。您还可以使用点多样性来指定其他实例类型。通常在发出 Spot 请求时,如果没有足够的容量,启动实例可能会失败。使用 4 或 5 个不同的类似实例类型可以克服可用性不足的问题。例如,我使用了 m4.large、m5.large、c4.large、c5.large 和 t3.large 实例类型的点多样性。确保我总是得到一个替换实例
      • 抱歉,我花了一点时间才回复你,你说得对,当我创建这些集群时,我使用向导完成了,所以整个集群都依赖于 cloudformation。根据您的建议,我按照您的建议创建了空集群和 Auto Scaling 组,并提供了正确的用户数据,我可以拥有更大的灵活性并升级实例,而不会导致一切崩溃。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      相关资源
      最近更新 更多