定义 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 会检查所需的任务状态以放置任务。例如,假设现有任务所需的状态为 重要 建议为其任务寻求强隔离的客户使用 Fargate。Fargate 在硬件虚拟化环境中运行每个任务。这将确保这些容器化工作负载不会与其他任务共享网络接口、Fargate 临时存储、CPU 或内存。有关更多信息,请参阅 AWS Fargate 的安全概述 |
|
memberOf 将任务放置在满足表达式的容器实例中。 |
|
使用 memberOf
约束类型时,您可以使用集群查询语言创建表达式,该语言定义了 Amazon ECS 在其中放置任务的容器实例。表达式是供您按属性对容器实例进行分组的一种方式。表达式位于 placementConstraint
的 expression
参数中。
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
-
实例的操作系统。此属性的可能值为
linux
和windows
。 ecs.os-family
-
实例的操作系统版本。
对于 Linux 实例,有效值为
LINUX
。对于 Windows 实例,ECS 以WINDOWS_SERVER_<
格式设置值。有效值为OS_Release
>_<FULL or CORE
>WINDOWS_SERVER_2022_FULL
、WINDOWS_SERVER_2022_CORE
、WINDOWS_SERVER_20H2_CORE
、WINDOWS_SERVER_2019_FULL
、WINDOWS_SERVER_2019_CORE
和WINDOWS_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_64
和ARM64
。 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 个字符,可以包含字母(大写和小写形式)、数字、连字符、下划线、句点、符号 (@)、正斜杠、反斜杠、冒号或空格。该值不能包含任何前导空格或尾随空格。