如何更改 AWS ECS 集群中的实例类型?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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】:

是的,这是可能的。

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

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

您还可以通过创建链接到不同启动配置的多个 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】:

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

    创建 Auto Scaling 使用的启动配置的副本 组,包括您想要进行的任何更改。 编辑 Auto Scaling 组以: 使用新的启动配置 所需容量 = 所需容量 * 2 Min = 所需容量 在 ECS 集群的 ECS Instances 选项卡中等待所有新实例变为“ACTIVE” 选择旧实例并单击操作 -> 排空实例 等到所有旧实例都在运行 0 个任务 编辑 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 云形成模板。请按照以下步骤操作。

    找到名为“EC2ContainerService-your-ecs-cluster-name”的云形成模板。 检查“参数”选项卡中的现有设置(您可以在此处检查您的实例类型)。 现在您需要更新云的形成。点击->更新->使用当前模板->下一个->更新EcsInstanceType变量->下一个->下一个->更新堆栈。 现在您的云层更新。现在您可以在 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?

来自指南:

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

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

【讨论】:

以上是关于如何更改 AWS ECS 集群中的实例类型?的主要内容,如果未能解决你的问题,请参考以下文章

显示docker容器登录aws ECS集群

AWS IAM 策略拒绝对自动扩展组或 ECS 集群内的任何 EC2 实例的权限

AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?

将 aws 资源限制为特定的 ecs 集群

AWS EC2 实例未加入 ECS 集群

AWS ECS 开发工具包。使用开发工具包为 ECS 集群注册新容器实例 (EC2)