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

Amazon ECS 服务

利用 Amazon ECS 访问,您可在 Amazon ECS 集群中同时运行和维护指定数量的任务定义实例。如果您的任何任务应该出于任何原因失败或停止,Amazon ECS 服务计划程序将启动另一个任务定义实例来替换它以便在服务中维护所需数量的任务。

除了在服务中维护所需数量的任务之外,您还可选择借助负载均衡器运行您的服务。负载均衡器将在与服务关联的各个任务间分配流量。

服务计划程序概念

服务计划程序非常适用于长时间运行的无状态服务和应用程序。服务计划程序可确保您指定的计划策略得以遵循并在任务失败时(例如,在底层基础设施因某个原因失败的情况下)重新计划任务。任务放置策略和约束可以用来自定义调度器如何放置和终止任务。如果服务中的某个任务停止,调度器将启动一个新的任务来替代它。此过程将继续,直到您的服务根据服务使用的调度策略(也称为服务类型)达到所需的运行任务数。

服务计划程序包括用来限制任务反复启动失败时重启任务的频率的逻辑。如果一个任务尚未进入 RUNNING 状态便停止 (取决于具有 startedAt 时间戳的任务),则服务计划程序开始以增量方式减缓启动尝试,并会发出一条服务事件消息。此行为可防止不必要的资源用于失败的任务上,从而让您有机会解决问题。服务更新后,服务计划程序恢复正常行为。有关更多信息,请参阅 服务限制逻辑服务事件消息

有两种服务计划程序策略可用:

  • REPLICA - 副本计划策略在集群中放置和维护所需数量的任务。默认情况下,服务计划程序可在多个可用区之间分布任务,但您可以使用任务放置策略和约束自定义任务放置决策。有关更多信息,请参阅 Replica

  • DAEMON - 守护程序计划策略只在每个活动容器实例上部署一个任务,以满足您在集群中指定的所有任务放置约束。服务计划程序会评估运行任务的任务放置约束,并会停止不符合放置约束的任务。当使用此策略时,无需指定所需的任务数、任务放置策略,也无需使用服务 Auto Scaling 策略。有关更多信息,请参阅 。

    注意

    Fargate 任务不支持 DAEMON 计划策略。

Daemon

守护程序 计划策略只在每个活动容器实例上部署一个任务,以满足集群中指定的所有任务放置约束。服务计划程序还评估运行任务的任务放置约束,并停止不满足放置约束的任务。当使用此策略时,无需指定所需的任务数、任务放置策略,也无需使用服务 Auto Scaling 策略。

Amazon ECS 为守护程序任务保留容器实例计算资源,包括 CPU、内存和网络接口。当您在具有其他副本服务的集群上启动守护程序服务时,Amazon ECS 会将守护程序任务的优先级设置为在实例上启动的第一个任务和停止的最后一个任务。此策略可确保资源不被挂起的副本任务使用,并可用于守护进程任务。

守护程序服务计划程序不会将任何任务放置在具有 DRAINING 状态的实例上。如果容器实例转换为 DRAINING,则会停止其上的守护程序任务。此服务计划程序还监视何时将新容器实例添加到您的集群,并将守护程序任务添加到其中。

如果指定了部署配置,则最大百分比参数必须为 100maximumPercent 的守护程序服务的默认值为 100%。minimumHealthyPercent 的守护程序服务的原定设置值为 0%。

更改后台程序服务的放置约束需要重启服务才能使更改生效。Amazon ECS 动态更新保留在符合条件实例上守护程序任务的资源。对于现有实例,调度器尝试将任务放在实例上。

在任务定义中更改任务大小或容器资源预留将启动服务的部署。Amazon ECS 为守护程序选取更新后的 CPU 和内存预留,然后阻止该守护程序任务的容量。

如果没有足够的资源用于上述任一情况,则会发生以下情况:

  • 任务放置失败。

  • 将生成一个 CloudWatch 事件。

  • Amazon ECS 通过等待资源变为可用,继续尝试并计划实例上的任务。

  • Amazon ECS 释放不再符合放置约束条件的所有预留实例,并停止相应的守护进程任务。

守护进程调度策略可用于以下情况:

  • 运行应用程序容器

  • 运行用于记录、监视和跟踪任务的支持容器

使用 Fargate 启动类型或 CODE_DEPLOYEXTERNAL 部署控制器类型的任务不支持守护程序调度策略。

注意

守护程序服务计划程序不支持使用 Classic Load Balancers。

当服务计划程序停止运行任务时,它将尝试在您的群集的可用区之间保持平衡。该计划程序使用以下逻辑:

  • 如果已定义放置策略,请使用该策略来选择要终止的任务。例如,如果某服务已定义了可用区分布策略,则选择一项任务终止,以让剩下的任务保持最佳分布。

  • 如果尚未定义放置策略,请使用以下逻辑来为集群中的各个可用区保持均衡:

    • 对有效容器实例进行排序,从而优先考虑在各自的可用区中具有此服务的运行任务数量最多的实例。例如,如果 A 区有 1 个正在运行的服务任务,B 区和 C 区各有 2 个正在运行的服务任务,则认为 B 区或 C 区中的容器实例最适合终止任务。

    • 在最佳可用区中的容器实例上停止任务(基于之前的步骤),并优先使用具有此服务的最大数量的运行任务的容器实例。

Replica

副本 计划策略在集群上放置并维护所需数量的任务。

如果创建在 Fargate 上运行任务的服务时,则当服务计划程序启动新任务或停止正在运行的任务时,它会尝试在可用区之间保持平衡。无需指定任务放置策略或限制。

在创建在 EC2 实例上运行任务的服务时,您还可以选择指定任务放置策略和约束来自定义任务放置决策。如果未指定任务放置策略或约束,则默认情况下,服务计划程序将在可用区之间分布任务。该调度器使用以下逻辑:

  • 确定您的集群中可支持您的服务的任务定义的容器实例(例如,它们有必需的 CPU、内存、端口和容器实例属性)。

  • 确定哪些容器实例满足为该服务定义的任何放置约束。

  • 如果已定义放置策略,请使用该策略来从剩余候选项中选择一个实例。

  • 如果尚未定义放置策略,请使用以下逻辑对集群中各个可用区的任务进行均衡:

    • 对有效容器实例进行排序,从而优先考虑在各自的可用区中具有此服务的运行任务数量最少的实例。例如,如果 A 区有一个正在运行的服务任务,B 区和 C 区都没有正在运行的服务任务,则认为在 B 区或 C 区中的有效容器实例中最适合放置任务。

    • 将新的服务任务放在最佳可用区中的有效容器实例上(基于之前的步骤),并优先使用具有此服务的最小数量的运行任务的容器实例。

附加服务概念

  • 您可选择借助负载均衡器运行您的服务。有关更多信息,请参阅 服务负载均衡

  • 您可选择为您的服务指定部署配置。通过更新服务的任务定义或所需计数来触发部署。在部署期间,服务计划程序将使用最小正常百分比最大百分比 参数来确定部署策略。有关更多信息,请参阅 服务定义参数

  • 您可以选择配置您的服务以使用 Amazon ECS 服务发现。服务发现使用 Amazon Route 53 自动命名 API 来管理服务任务的 DNS 条目,使其可在 VPC 中供搜索。有关更多信息,请参阅 服务发现

  • 在删除服务后,如果仍有需要清除的运行任务,服务状态将从 ACTIVE 变为 DRAINING,并且服务将不再在控制台或 ListServices API 操作中可见。所有任务都变为 STOPPINGSTOPPED 状态后,服务状态将从 DRAINING 变为 INACTIVE。处于 DRAININGINACTIVE 状态的服务仍可使用 DescribeServices API 操作查看。但在未来,INACTIVE 服务可能从 Amazon ECS 记录中被清除,于是这些服务上的 DescribeServices 调用将返回 ServiceNotFoundException 错误。