滚动更新 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

滚动更新

滚动更新(ECS) 部署类型用于您的服务,当启动新服务部署时,Amazon ECS 服务计划程序会将当前正在运行的任务替换为新任务。在滚动更新期间 Amazon ECS 在服务中添加或删除的任务数量由部署配置控制。部署配置由 minimumHealthyPercentmaximumPercent 值组成,这些值是在创建服务时定义的,但也可以在现有服务上更新。

minimumHealthyPercent 表示在部署期间或容器实例耗尽时应为服务运行的任务数的下限,服务所需任务数的百分比表示。此值四舍五入。例如,如果最小运行状况百分比为 50,并且所需的任务计数为 4,则调度器可以在启动两个新任务之前停止两个现有任务。同样,如果最小运行状况百分比为 75%,所需任务计数为 2,则由于结果值也为 2,调度器无法停止任何任务。

maximumPercent 表示部署期间或容器实例耗尽时应为服务运行的任务数的上限,服务所需任务数的百分比表示。此值四舍五入。例如,如果最大百分比为 200 且目标任务为计数四,则调度器可以在停止四个现有任务之前启动四个新任务。同样,如果最大百分比为 125,且目标任务计数为三,则调度器无法启动任何任务,因为结果值也是三。

重要

设置最小运行状况百分比或最大百分比时,应确保调度器在触发部署时可以停止或启动至少一个任务。如果您的服务由于部署配置无效而停滞的部署,将发送服务事件消息。有关更多信息,请参阅 因为服务部署配置,服务 (service-name) 无法在部署期间停止或启动任务。更新 minimumHealthyPercent 或 maximumPercent 值,然后重试。

启动新服务部署或部署完成时,Amazon ECS 会向 EventBridge 发送服务部署状态更改事件。这提供了一种用于监控服务部署状态的编程方式。有关更多信息,请参阅服务部署状态更改事件

要创建使用滚动更新部署类型的新 Amazon ECS 服务,请参阅 在经典控制台中创建 Amazon ECS 服务

使用部署断路器

预设情况下,当使用滚动更新部署类型的服务启动新部署时,服务调度器将启动新任务,直到达到所需计数。您可以选择在服务上使用部署断路器逻辑,这将导致部署在无法达到稳定状态时转换为故障状态。部署断路器逻辑还可以在部署失败时让 Amazon ECS 回滚到上次完成的部署。

以下 create-service Amazon CLI 示例显示如何在部署断路器使用回滚选项时创建 Linux 服务。

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 2 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-os LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"

在服务上启用部署断路器逻辑时,应注意以下事项。

  • 如果服务部署至少有一个成功运行的任务,则无论部署中有任何先前或将来的失败任务,都不会触发断路器逻辑。

  • DescribeServices 响应提供了对部署状态、rolloutStaterolloutStateReason 的深入了解。启动新部署时,部署状态将在 IN_PROGRESS 状态开始。当服务达到稳定状态时,部署状态将转换为COMPLETED。如果服务未能达到稳定状态并启用断路器,则部署将转变为 FAILED 状态。FAILED 状态中的部署不会启动任何新任务。

  • 除了 Amazon ECS 为已启动和已完成的部署发送的服务部署状态更改事件外,Amazon ECS 还将在启用断路器的部署失败时发送事件。这些事件提供了有关部署失败的原因或部署是否由于回滚而启动的详细信息。有关更多信息,请参阅服务部署状态更改事件

  • 如果以前的部署失败且发生了回滚,从而启动了新部署,则服务部署状态变更事件的 reason 字段将指示部署是由于回滚而启动的。

  • 部署断路器仅支持使用滚动更新的 Amazon ECS 服务 (ECS) 部署控制器,并且不使用经典负载均衡器。

Failure threshold

部署断路器计算阈值,然后使用该值来确定何时将部署移动到 FAILED 状态。

部署断路器的最低阈值为 10,最大阈值为 200,并使用以下公式中的值来确定部署失败。

Minimum threshold <= 0.5 * desired task count => maximum threshold

当计算结果小于最低值 10 时,故障阈值设置为 10。当计算结果大于最大值 200 时,故障阈值设置为 200。

注意

您不能更改任何一个阈值。

部署状态检查分两个阶段。

  1. 部署断路器监控部署中的任务并检查处于 RUNNING 状态的任务。调度器在当前部署中的任务位于 RUNNING 状态并进入下一阶段时忽略失败条件。当任务无法到达 RUNNING 状态时,部署断路器将失败计数增加 1。当故障计数等于阈值时,部署将标记为 FAILED

  2. 当有一个或多个任务处于 RUNNING 状态时,进入此阶段。部署断路器对当前部署中的任务的以下资源执行运行状况检查:

    • Elastic Load Balancing 负载均衡器

    • Amazon Cloud Map 服务

    • Amazon ECS 容器运行状况检查

    当任务的运行状况检查失败时,部署断路器会将失败计数增加 1。当故障计数等于阈值时,部署将标记为 FAILED

下表提供了一些示例。

预期任务计数 计算 Threshold

1

10 <= 0.5 * 1 => 200
10(计算值低于最低值)

25

10 <= 0.5 * 25 => 200
13(此值将向上舍入)

400

10 <= 0.5 * 400 => 200
200

800

10 <= 0.5 * 800 => 200
200(计算值大于最高值)

有关使用回滚选项的其他示例,请参阅宣布 Amazon ECS 部署断路器