耗尽 Amazon ECS 容器实例
有时可能需要从集群中移除容器实例;例如,要执行系统更新,或缩减集群容量。Amazon ECS 能够将容器实例转换为 DRAINING 状态。这称为容器实例耗尽。当某个容器实例设置为 DRAINING 时,Amazon ECS 将阻止安排放置在该容器实例上的新任务。
服务的耗尽行为
作为服务一部分的任何处于 PENDING 状态的任务都将立即停止。如果集群中存在可用容器实例容量,则服务计划程序将启动替换任务。如果容器实例容量不足,将发送一条指出问题的服务事件消息。
作为容器实例上处于状态 RUNNING 的服务的一部分的任务将转换为状态 STOPPED。服务计划程序尝试根据服务的部署类型和部署配置参数、minimumHealthyPercent 和 maximumPercent 替换任务。有关更多信息,请参阅Amazon ECS 服务和Amazon ECS 服务定义参数。
-
如果
minimumHealthyPercent低于 100%,计划程序在替换任务时可以临时忽略desiredCount。例如,desiredCount为四项任务,如果最小值为 50%,则允许计划程序在开始两项新任务之前终止两项现有任务。如果最小值为 100%,那么在替换任务正常运行之前,服务计划程序无法删除现有任务。如果针对未使用负载均衡器的服务的任务处于RUNNING状态,则认为这些任务正常运行。服务任务的状态如果为RUNNING且使用负载均衡器,同时该负载均衡器报告托管该服务任务的容器实例运行正常,则该服务任务运行正常。重要
如果您使用的竞价型实例和
minimumHealthyPercent大于或等于 100%,则服务将没有足够的时间在竞价型实例终止之前替换任务。 -
maximumPercent参数表示进行任务替换时正在运行的任务数量上限,允许您定义替换批处理大小。例如,如果desiredCount为四项任务,那么上限 200% 会在停止将要耗尽的四项任务前启动四项新任务 (假设需要进行此操作的集群中有可用资源)。如果上限为 100%,只有在耗尽任务停止后才能启动替换任务。重要
如果
minimumHealthyPercent和maximumPercent都是 100%,那么服务无法删除现有任务,也无法启动替换任务。这可以防止成功耗尽容器实例并防止进行新的部署。
独立任务的耗尽行为
处于 PENDING 或 RUNNING 状态的任何独立任务不受影响;您必须等待它们自行停止或手动停止。容器实例将保留在 DRAINING 状态。
Amazon ECS 托管实例的耗尽行为
Amazon ECS 托管实例终止流程可确保工作负载正常过渡,同时优化成本并保持系统正常运行。终止系统为实例终止提供了三种不同的决策路径,每种路径都有不同的时间特征和客户影响概况。
- 客户发起的终止
-
当您需要立即从服务中移除容器实例时,可直接控制实例移除。运行
deregister-container-instance时,可将force请求参数设置为 true,这意味着无论是否有正在运行的工作负载,都必须立即终止。 - 系统发起的空闲终止
-
通过智能空闲检测实现成本优化,该功能可识别不再服务于工作负载的实例。弹性工作负载服务 (EWS) 实现了复杂的空闲检测算法,可以监控实例利用率,并对在可配置的时间段内保持空闲状态的实例发起终止。
- 基础设施刷新终止
-
通过节点管理器的自然衰减策略实现主动基础设施管理,其中,实例会定期刷新,以确保它们在最新的平台版本上运行并保持安全状态。节点管理器实施生存时间 (TTL) 策略,对已达到最大运行生命周期的实例发起正常终止。
终止系统实施一种两阶段方法,在工作负载连续性和基础设施管理要求之间取得平衡。
第 1 阶段:正常完成时间段
在此阶段,系统实施正常耗尽策略,优先考虑工作负载连续性。服务任务会通过正常的 Amazon ECS 计划流程正常耗尽。独立任务会持续运行,因为它们可能会自然完成。系统会监控所有任务,确保它们通过自然完成过程达到停止状态。
第 2 阶段:强制执行硬性截止日期
当正常完成无法在可接受的时间范围内实现终止目标时,系统将强制执行硬性截止日期。硬性截止日期通常设定为启动时间加上七天,这样既能为正常完成留出充足的时间,又能满足运营要求。强制执行包括自动强制注销过程,以及无论完成状态如何都立即终止所有剩余任务。
当实例上运行的所有任务都转换为 STOPPED 状态时,容器实例已完成排空。在再次激活或删除容器实例之前,容器实例将保持为状态 DRAINING。您可以使用带有 containerInstance 参数的 ListTasks 操作来验证容器实例上的任务状态,以获取实例上的任务列表,然后使用带有每个任务的 Amazon Resource Name (ARN) 或 ID 的 DescribeTasks 操作来验证任务状态。
当您准备好容器实例再次开始托管任务时,您可以将容器实例的状态从 DRAINING 改为 ACTIVE。然后,Amazon ECS 服务调度程序将再次考虑容器实例放置任务。
过程
可以通过以下步骤使用新的 Amazon Web Services 管理控制台 将容器实例设置为耗尽。
您还可以使用 UpdateContainerInstancesState API 操作或 update-container-instances-state 命令将容器实例的状态更改为 DRAINING。
Amazon Web Services 管理控制台
-
在导航窗格中,选择集群。
-
在 Clusters(集群)页面中,选择托管实例的集群。
-
在 Cluster :
name(集群:名称)页面上,选择 Infrastructure(基础设施)选项卡。然后,在 Container instances(容器实例)下,选择要耗尽的每个容器实例的复选框。 -
依次选择操作、耗尽。