【问题标题】:How to change instance type in AWS ECS cluster?如何更改 AWS ECS 集群中的实例类型?
【发布时间】:2017-11-22 01:30:55
【问题描述】:

我在 AWS EC2 容器服务中有一个集群。当我设置它时,我使用了 t2.micro 实例,因为它们对于开发来说已经足够了。现在我想使用更强大的实例,例如 m4.large。

我想知道是否可以只更改实例类型,所以我不需要重新创建整个集群。我找不到如何做到这一点。

【问题讨论】:

    标签: amazon-web-services amazon-ecs


    【解决方案1】:

    是的,您可以在 CloudFormation 中实现这一点。

    • 点击您的 ECS-Cluster 对应的 Stack。
    • 点击Update Stack
    • 使用电台current template, Next
    • 更改 EcsInstanceType
    • Next, Next, Update
    • 将您的集群升级到2*n 实例
    • 等待 n 创建新类型的新实例
    • 将集群缩小到n
    • 或者您可以逐个排空并终止实例

    【讨论】:

    • 对我来说,一个一个地排空实例是一种更好的方法,因为缩小 2n->n 会用正在运行的容器清除我的 n 个实例,从而有效地导致我的服务停机。奇怪的是,AWS 并没有逐渐缩小规模,即终止一个正在运行的容器实例,在可用实例上生成新容器等,终止另一个容器等等......
    • 接受的答案要求为您的集群启用 Auto Scaling。此解决方案无需 Auto Scaling 即可工作。因此,任何人都可以使用它。
    • 使用 CloudFormation 是最简单的方法,只需对单个字段进行少量更改,即可使实例成为更高或更低成本/性能的解决方案
    【解决方案2】:

    是的,这是可能的。

    集群中的实例类型由启动配置中的“实例类型”设置确定。无需重新创建集群即可更新实例类型:

    1. 复制集群启动配置并更新“实例类型”。
    2. 调整集群Auto Scaling Group以指向您的新启动配置
    3. 等待新实例在集群中注册并启动服务。

    您还可以通过创建链接到不同启动配置的多个 Auto Scaling 组,将 多个 实例类型添加到 单个 集群。但请注意,您无法在控制台中轻松复制 Auto Scaling 组。

    【讨论】:

    • 你是对的。我能够使用您的方法更改实例类型。我将接受的答案更改为您的答案,请相应地进行编辑。非常感谢!
    • @Rothschild 是的,如果不更改名称(它是不可变的), 就无法复制启动配置。这允许您在不影响启动配置关联的 Auto Scaling 组的情况下更改配置。
    • 不幸的是,这对我不起作用,并且会在 ECS-UI 中造成不一致,其中将创建实例但未在集群下方列出,请参阅下面的答案以获取替代方案。
    • Luke 是对的,但请记住,ECS cloudformation 模板希望找到与其创建时设置的名称相同的名称。要修复它,在执行步骤 1-2 后,您需要删除原始启动配置。之后,您将需要再次执行步骤 1-2,但将启动配置重命名为其原始名称。
    • 这对我有用。回顾一下,如上所述,步骤是: 1)使用新的“-COPY”名称复制启动配置,新的实例类型; 2) 调整集群 Auto Scaling Group 指向新的 '-COPY' Launch Config; 3) 删除旧的 Launch Config; 4)复制新的'-COPY'启动配置,给它旧名称;调整集群 Auto Scaling Group 以指向新的 Launch Config(旧名称); 5)删除'-COPY'启动配置; 6) 手动停止集群中运行的实例,等待 Auto Scaling Group 使用新的 Launch Config 重新启动。这似乎对我有用。
    【解决方案3】:

    这是如何在不停机的情况下做到这一点:

    1. 创建 Auto Scaling 使用的启动配置的副本 组,包括您想要进行的任何更改。
    2. 编辑 Auto Scaling 组以:
      • 使用新的启动配置
      • 所需容量 = 所需容量 * 2
      • Min = 所需容量
    3. 在 ECS 集群的 ECS Instances 选项卡中等待所有新实例变为“ACTIVE”
    4. 选择旧实例并单击操作 -> 排空实例
    5. 等到所有旧实例都在运行 0 个任务
    6. 编辑 Auto Scaling 组并将 Min 和 Desired 改回其原始值

    【讨论】:

      【解决方案4】:

      以下是我在集群上更新实例类型所采取的具体步骤:

      • 进入集群服务,更新任务数为0

      • 转到 EC2 -> 启动配置 -> 操作下拉菜单 -> 复制启动配置 并设置新的实例类型

      • 转到 EC2 -> Auto Scaling 组 -> 编辑 -> 将 启动配置 设置为新创建的启动配置

      • 转到 EC2 -> Auto Scaling 组 -> 实例 -> 分离 实例

      • 转到 EC2 -> 启动配置 -> 删除旧的启动配置

      • 转到集群服务,将任务数更新为您想要的计数。

      现在,当任务开始时,它将在更新后的 EC2 实例类型上运行。

      【讨论】:

        【解决方案5】:

        这可以通过修改 ECS 实例的 CloudFormation 堆栈中的 EcsInstanceType 来实现。手动对自动伸缩组所做的任何更改都将被下一个“Scale ECS Instances”操作覆盖。

        【讨论】:

          【解决方案6】:

          是的,您可以更改 ECS 集群中的实例类型。我相信您已经从 AWS GUI 手动创建了 ECS 集群。在后台,它会根据您从 AWS 控制台(ECS)的输入(如 VPC、实例类型和大小等)创建 aws 云形成模板。请按照以下步骤操作。

          1. 找到名为“EC2ContainerService-{your-ecs-cluster-name}”的云形成模板。
          2. 检查“参数”选项卡中的现有设置(您可以在此处检查您的实例类型)。
          3. 现在您需要更新云的形成。点击->更新->使用当前模板->下一个->更新EcsInstanceType变量->下一个->下一个->更新堆栈。
          4. 现在您的云层更新。现在您可以在 EC2 控制台中检查是否有一个具有新实例类型的新 Spot 队列。

          【讨论】:

            【解决方案7】:

            当然,按照有关使用启动配置的建议,有多种方法可以更改实例类型。

            但请注意,使用多个启动配置附加到具有容器实例扩展策略的 ECS 集群是一个挑战。

            例如,如果使用启动配置运行具有 t2.medium 类型实例的集群,并且将 Auto Scaling 策略附加到 ECS 集群,则它只能向 Auto Scaling 组发出信号,并且不超过 1 个。

            【讨论】:

              【解决方案8】:

              AWS 文档有一个完整的分步指南,涵盖了手动启动的 CloudFormationStack 和 ECS 集群。

              How do I change my container instance type in Amazon ECS?

              来自指南:

              要更改您的容器实例类型,请完成以下步骤之一 以下部分:

              1. 通过 AWS CloudFormation 堆栈更新在 ECS 集群中启动的容器实例
              2. 更新在 ECS 集群中手动启动的容器实例

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2021-12-02
                • 2016-09-01
                • 1970-01-01
                • 2020-01-28
                • 1970-01-01
                • 2016-12-29
                • 2021-06-10
                相关资源
                最近更新 更多