【问题标题】:How to use spot instance with amazon elastic beanstalk?如何将现场实例与亚马逊弹性豆茎一起使用?
【发布时间】:2018-12-22 12:02:20
【问题描述】:

我有一个使用 amazon elastic beanstalk 来部署我的应用程序的基础设施。 我需要扩展我的应用程序,添加一些 EB 不支持的现场实例。

因此,我使用 Spot 实例从启动配置创建了第二个自动缩放。 自动缩放使用由 beanstalk 创建的相同负载均衡器。

为了使用我的应用程序的最新版本启动实例,我将用户数据从原始启动配置(使用 beanstalk 创建)复制到带有 Spot 实例(由我创建)的启动配置。

这很好,但是:

  1. 当beantalk用新版本的应用程序更新由他管理的实例时,如何更新从第二次自动缩放中产生的现场实例?

  2. 还有其他方法可以像使用现场实例一样简单且优雅,并享受 beanstalk 的好处吗?

更新

自 2019 年以来,Elastic Beanstalk 增加了对 Spot 实例的支持...请参阅: https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2019-11-25-spot.html

【问题讨论】:

  • 想知道现在 AWS 现货队列是否有任何变化?
  • @webofmars.... elasticbeanstalk 已经支持现场实例
  • 是的,距离我最初发表评论仅 2 个月 ;-)

标签: amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

我自己也在问这个问题,并在弹性豆茎中找到了一个内置解决方案。 here 描述如下:

  • 在 .ebextensions 文件夹下添加一个文件,对于我们的设置,我们将该文件命名为 spot_instance.config(.config 扩展名为 重要),将下面可用的内容粘贴到文件中 https://gist.github.com/rahulmamgain/93f2ad23c9934a5da5bc878f49c91d64
  • EC2_SPOT_PRICE 的值,可以通过弹性 beanstalk 环境配置进行设置。禁用点的使用 实例,只需从环境设置中删除变量即可。
  • 如果环境已存在且以上设置更新,则旧的 Auto Scaling 组将被销毁并新建一个 已创建。
  • 然后,环境会提交对 Spot 实例的请求,该请求可在 EC2 仪表板的 Spot Instances 选项卡下查看。
  • 一旦请求得到满足,实例将被添加到新的集群和 Auto Scaling 组中。
  • 您可以使用 Spot Advisor 工具来确定正在使用的实例的最佳价格。
  • 原价 30% 的价格点似乎是一个不错的水平。

我个人只会使用给定实例类型的按需价格,因为这个价格是您愿意支付的上限。这降低了定价过高以及实例终止的可能性。

这可能不是生产系统的最佳方法,因为不可能在多个按需实例和额外数量的 Spot 实例之间进行拆分,并且可能没有 Spot 实例可用的可能性很小其他人正在以高价购买整个市场。

对于生产用例,我会研究 https://github.com/AutoSpotting/AutoSpotting,它会主动管理您的所有自动扩展组,并尝试在最低价格和可配置数量或百分比的按需实例之间取得平衡。

【讨论】:

  • 感谢您的回答@jan-prieser。我已经看到了第一个解决方案,但是,正如您所说,它不是一个好的生产解决方案。关于提到的“自动定位”,我看不到部署如何适用于新版本的应用程序(例如滚动更新)。但我会更多地研究它。
  • @GeanRibeiro 使用自动定位时,部署和滚动更新仍由 elastic-beanstalk 处理。它将使用更新的应用程序创建新的按需实例,并从目标组中删除旧的现场实例。然后,autospotting 将在目标组中找到新的按需实例,并再次用运行新版本的点实例替换它们。
  • 自动定位非常好。易于配置,可以使用任何自动缩放组进行标记。 @GeanRibeiro 您可以保留所需的按需实例集,以确保它们不会被点替换。
  • AutoSpotting 的作者在这里,@jan-prieser 感谢使用它的推荐,我总是喜欢从我的用户那里看到这样的反馈。关于 Beanstalk 设置,它应该可以在不对堆栈进行重大更改的情况下工作,您所需要的只是标记 AutoScaling 组。如果您遇到任何问题,请告诉我。如果您对有关 Beanstalk 设置的文档改进有任何建议,我将非常感谢 Github 上的 PR。
  • 很遗憾,此解决方案不适用于 Windows Beanstalks,希望能为其他人节省一些时间。
【解决方案2】:

截至 2019 年 11 月 25 日,AWS natively supports using Spot Instances with Beanstalk

可以在控制台中启用 Spot 实例,方法是转到所需的 Elastic Beanstalk 环境,然后选择配置 > 容量并更改队列组成 到“已启用 Spot 实例”。

您还可以在此处设置按需与 Spot 百分比以及要使用的实例类型等选项。

更多信息可以在Beanstalk Auto Scaling Group support page找到

【讨论】:

  • 酷,现在我可以使用 ELB 在我的 docker 容器上使用 Spot 实例
【解决方案3】:

在 Spotinst,我们正在为我们的客户处理这个难题。

由于 Elastic Beanstalk 创建了一整套捆绑在一起的服务(负载均衡器、ASG、Route 53 接入点等),因此在其中管理 Spot 并不是一项简单的任务。

经过大量研究,我们认为移除 ASG 总是容易出错,因为保持配置不变变得复杂。相反,我们只是简单地复制 ASG,让 Elastigroup 和 ASG 并存,所有扩展策略仅影响 Elastigroup,并且 ASG 配置更新也在那里提供。

通过在 Elastigroup 中运行的实例,您可以获得具有完整 SLA 的托管 Spot 实例。

在 Elastigroup 中运行 Spot 实例的一些好处包括:

1) 每当新实例启动时,我们的算法都会根据价格和可用性为最佳 Spot 市场做出实时选择。

2) 发生中断时,我们会提前约 15 分钟进行预测,并采取所有必要措施来确保(并确保)您的团队的容量。

3) 在所有市场都没有 Spot 可用性的极端情况下,我们只是退回到按需实例。

【讨论】:

    【解决方案4】:

    由于 AWS 明确声明 Beanstalk 不支持开箱即用的现场实例,因此您需要对它进行一些修改。我的客户想要混合环境(按需 + 点)和完整点。我为客户创建的内容如下(我只能访问 GUI):

    1. 对于混合环境:

      • 使用常规实例启动 env;
      • 复制相应的启动配置并在此过程中选择现场实例;
      • 编辑 Auto Scaling 组并选择您刚刚编辑的 lc + 确保将终止策略更改为 NewestInstance。 这样的设置将允许您拥有基本的按需车队(不可终止)+ 一些额外的点(如果需要),例如高于平常的流量。请记住,如果您终止环境并重新创建它,那么您的所有编辑都将被删除。
    2. 对于完整的现场环境:

      • 与之前类似的步骤,但有一个区别 - 终止正在运行的实例并等待 ASG 启动一个新实例。如果您希望它在不停机的情况下运行,只需为所需数量提供一个额外的实例,等待它启动,然后按需终止。

    【讨论】:

    • 我们编写了一个自定义资源提供程序,可以在 CFN 模板中为我们自动执行此操作,此处为 bash 模拟:github.com/ab77/…
    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2023-04-10
    • 2018-03-03
    • 2014-05-16
    • 2020-01-04
    • 2015-12-28
    • 2018-03-30
    • 2017-07-03
    相关资源
    最近更新 更多