通过替换任务来部署 Amazon ECS 服务
当创建一项使用滚动更新(ECS
)部署类型的服务时,Amazon ECS 服务调度器会将当前正在运行的任务替换为新任务。在滚动更新期间 Amazon ECS 在服务中添加或删除的任务数量由服务部署配置控制。
Amazon ECS 使用以下参数确定任务数:
-
minimumHealthyPercent
表示在部署期间或容器实例耗尽时应为服务运行的任务数的下限,服务所需任务数的百分比表示。此值四舍五入。例如,如果最小运行状况百分比为50
,并且所需的任务计数为 4,则调度器可以在启动两个新任务之前停止两个现有任务。同样,如果最小运行状况百分比为 75%,所需任务计数为 2,则由于结果值也为 2,调度器无法停止任何任务。如果任务运行不正常,Amazon ECS 服务计划程序将首先启动替换任务并维持
minimumHealthyPercent
任务,直到替换任务运行正常为止。替换任务启动并运行正常后,运行不正常的任务将逐渐停止。 -
maximumPercent
表示部署期间或容器实例耗尽时应为服务运行的任务数的上限,服务所需任务数的百分比表示。此值四舍五入。例如,如果最大百分比为200
且目标任务为计数四,则调度器可以在停止四个现有任务之前启动四个新任务。同样,如果最大百分比为125
,且目标任务计数为三,则调度器无法启动任何任务,因为结果值也是三。
重要
设置最小运行状况百分比或最大百分比时,应确保调度器在启动部署时可以停止或启动至少一个任务。如果您的服务由于部署配置无效而停滞的部署,将发送服务事件消息。有关更多信息,请参阅 因为服务部署配置,服务 (service-name) 无法在部署期间停止或启动任务。更新 minimumHealthyPercent 或 maximumPercent 值,然后重试。。
滚动部署有 2 种方法可以让您快速识别服务部署失败的时间:
可以单独使用这些方法,也可以一起使用。当同时使用这两种方法时,只要满足任一故障方法的故障标准,部署就会设置为失败。
使用以下准则来帮助确定要使用哪种方法:
-
断路器 — 若要在任务无法启动时停止部署,请使用此方法。
-
CloudWatch 警报 — 若要根据应用程序指标停止部署,请使用此方法。
两种方法都支持回滚到之前的服务修订版本。
容器映像解析
默认情况下,Amazon ECS 会将任务定义中指定的容器映像标签解析为容器映像摘要。如果您创建的服务要运行和维护单个任务,则该任务将用于为任务中的容器建立映像摘要。如果您创建的服务要运行和维护多个任务,则服务调度器在部署期间启动的第一个任务将用于为任务中的容器建立映像摘要。
如果尝试建立容器映像摘要时失败三次或以上,则部署将继续,但不再进行映像摘要解析。如果启用了部署断路器,则部署还会失败并回滚。
建立容器映像摘要后,Amazon ECS 将使用摘要来启动任何其他所需的任务,以及用于任何未来的服务更新。这会导致服务中的所有任务始终运行相同的容器镜像,从而确保软件的版本一致性。
您可以使用容器定义中的 versionConsistency
参数为任务中的每个容器配置此行为。有关更多信息,请参阅 versionConsistency。
注意
-
低于
1.31.0
版本的 Amazon ECS 代理不支持映像摘要解析。代理版本1.31.0
-1.69.0
仅支持对推送到 Amazon ECR 存储库的映像进行映像摘要解析。代理版本1.70.0
或更高版本支持所有映像的映像摘要解析。 -
映像摘要解析的最低 Fargate Linux 平台版本为
1.3.0
。映像摘要解析的最低 Fargate Windows 平台版本为1.0.0
。 -
Amazon ECS 不会捕获由 Amazon ECS 管理的附加容器摘要,例如 Amazon GuardDuty 安全代理或 Service Connect 代理。
-
要减少具有多个任务的服务中的与容器映像解析相关的可能延迟,请在 EC2 容器实例上运行 Amazon ECS 代理版本
1.83.0
或更高版本。要避免可能的延迟,请在任务定义中指定容器映像摘要。 -
如果您创建的服务所需任务数为零,则 Amazon ECS 将无法建立容器摘要,直到您触发另一个所需任务数大于零的服务部署。
-
若要建立更新的映像摘要,可以强制进行新的部署。此更新后的摘要将用于启动新任务,不会影响已在运行的任务。有关强制新部署的更多信息,请参阅 Amazon ECS API 参考中的 forceNewDeployment。