定义 Amazon ECS 将哪些容器实例用于任务 - Amazon Elastic Container Service

定义 Amazon ECS 将哪些容器实例用于任务

任务放置约束是关于容器实例的规则,Amazon ECS 使用该规则来确定是否允许在实例上运行任务。必须至少有一个容器实例匹配约束条件。如果没有与约束条件匹配的实例,则任务将保持 PENDING 状态。创建新服务或更新现有服务时,您可以为服务的任务指定任务放置限制。

您可以使用 placementConstraint 参数在服务定义、任务定义或任务中指定任务放置约束。

"placementConstraints": [ { "expression": "The expression that defines the task placement constraints", "type": "The placement constraint type to use" } ]

下表介绍如何使用这些参数。

Constraint type 可以在何时指定
distinctInstance

将每个活动任务放入不同的容器实例。

Amazon ECS 会检查所需的任务状态以放置任务。例如,假设现有任务所需的状态为 STOPPED(但最近的状态不是该状态),则可以将新传入的任务放入同一个实例,尽管存在 distinctInstance 放置约束。因此,您可能会看到同一个实例上有 2 个任务最近的状态都为 RUNNING

重要

建议为其任务寻求强隔离的客户使用 Fargate。Fargate 在硬件虚拟化环境中运行每个任务。这将确保这些容器化工作负载不会与其他任务共享网络接口、Fargate 临时存储、CPU 或内存。有关更多信息,请参阅 AWS Fargate 的安全概述

memberOf

将任务放置在满足表达式的容器实例中。

使用 memberOf 约束类型时,您可以使用集群查询语言创建表达式,该语言定义了 Amazon ECS 在其中放置任务的容器实例。表达式是供您按属性对容器实例进行分组的一种方式。表达式位于 placementConstraintexpression 参数中。

Amazon ECS 容器实例属性

您可以将自定义元数据添加到容器实例中,称为属性。每个属性都有一个名称和一个可选字符串值。您可以使用 Amazon ECS 提供的内置属性,或自定义属性。

以下部分包含示例内置、可选属性和自定义属性。

内置属性

Amazon ECS 会自动将以下属性应用于您的容器实例。

ecs.ami-id

用于启动实例的 AMI 的 ID。本属性的示例值为 ami-1234abcd

ecs.availability-zone

实例所在的可用区。本属性的示例值为 us-east-1a

ecs.instance-type

实例的实例类型。本属性的示例值为 g2.2xlarge

ecs.os-type

实例的操作系统。此属性的可能值为 linuxwindows

ecs.os-family

实例的操作系统版本。

对于 Linux 实例,有效值为 LINUX。对于 Windows 实例,ECS 以 WINDOWS_SERVER_<OS_Release>_<FULL or CORE> 格式设置值。有效值为 WINDOWS_SERVER_2022_FULLWINDOWS_SERVER_2022_COREWINDOWS_SERVER_20H2_COREWINDOWS_SERVER_2019_FULLWINDOWS_SERVER_2019_COREWINDOWS_SERVER_2016_FULL

这对于 Windows 容器和 Windows containers on AWS Fargate 很重要,因为每个 Windows 容器的操作系统版本都必须与主机的操作系统版本相匹配。如果容器映像的 Windows 版本与主机不同,则容器无法启动。有关更多信息,请参阅 Microsoft 文档网站上的 Windows 容器版本兼容性

如果您的集群运行多个 Windows 版本,则可以使用置放约束来确保将任务放在运行相同版本的 EC2 实例上:memberOf(attribute:ecs.os-family == WINDOWS_SERVER_<OS_Release>_<FULL or CORE>)。有关更多信息,请参阅 检索经 Amazon ECS 优化的 Windows AMI 元数据

ecs.cpu-architecture

实例的 CPU 架构。本属性的示例值为 x86_64ARM64

ecs.vpc-id

启动实例的 VPC。本属性的示例值为 vpc-1234abcd

ecs.subnet-id

实例正在使用的子网。本属性的示例值为 subnet-1234abcd

可选属性

Amazon ECS 可能会将以下属性添加到您的容器实例。

ecs.awsvpc-trunk-id

如果此属性存在,则实例具有中继网络接口。有关更多信息,请参阅 增加 Amazon ECS Linux 容器实例网络接口

ecs.outpost-arn

如果此属性存在,则包含 Outpost 的 Amazon Resource Name (ARN)。有关更多信息,请参阅 AWS Outposts 上的 Amazon Elastic Container Service

ecs.capability.external

如果此属性存在,则实例将标识为外部实例。有关更多信息,请参阅 外部启动类型的 Amazon ECS 集群

自定义属性

您可以将自定义属性应用于您的容器实例。例如,您可以定义名为 "stack"、值为 "prod" 的属性。

指定自定义属性时,必须考虑以下内容。

  • name 必须包含 1 到 128 个字符,名称可以包含字母(大写和小写形式)、数字、连字符、下划线、正斜杠、反斜杠或句点。

  • value 必须包含 1 到 128 个字符,可以包含字母(大写和小写形式)、数字、连字符、下划线、句点、符号 (@)、正斜杠、反斜杠、冒号或空格。该值不能包含任何前导空格或尾随空格。