Amazon ECS 托管实例的架构 - Amazon Elastic Container Service

Amazon ECS 托管实例的架构

Amazon ECS 托管实例是 Amazon ECS 的一个完全托管计算选项,它使您能够在各种 Amazon EC2 实例类型上运行容器化工作负载,同时将基础设施管理卸载到 AWS。借助 Amazon ECS 托管实例,您可以访问特定计算功能(例如,GPU 加速、特定 CPU 架构、高网络性能和专用实例类型),而 AWS 负责处理底层基础设施的预置、扩展、修补和维护。

使用 Amazon ECS 托管实例时,您需要将应用程序打包在容器中并指定计算要求。AWS 会自动选择符合工作负载需求的成本最优化的通用 Amazon EC2 实例类型,您也可以指定所需的实例属性,包括实例类型、CPU 制造商和加速器。Amazon ECS 托管实例全面管理基础设施的各个方面,包括扩展、修补和成本优化,而无需牺牲对 AWS 功能和 Amazon EC2 集成的访问。

Amazon ECS 托管实例支持具有平台特定的优化和安全配置的 Linux 容器。默认情况下,Amazon ECS 托管实例通过将多个较小任务放置在较大实例上来优化基础设施利用率,从而帮助降低成本并缩短任务启动时间。

本主题介绍了 Amazon ECS 托管实例任务和服务的不同组件,并指出了将 Amazon ECS 托管实例与 Amazon ECS 结合使用时的特殊注意事项。

开始使用

要开始使用 Amazon ECS 托管实例,您需要创建所需的 IAM 角色并在您的 AWS 账户中启用 Amazon ECS 托管实例。然后,您可以创建一个容量提供程序,并使用该 Amazon ECS 托管实例容量提供程序启动任务或服务。

有关开始使用的详细说明,请参阅:

容量提供程序

Amazon ECS 托管实例使用容量提供程序来管理工作负载的计算容量。您可以使用默认容量提供程序,也可以创建具有特定实例要求的自定义容量提供程序。

可用的容量提供程序选项如下:

  • 默认容量提供程序 - 自动为您的工作负载需求选择成本最优化的通用实例类型。

  • 自定义容量提供程序 - 允许您使用基于属性的实例类型选择来指定实例属性,包括 vCPU 计数、内存、CPU 制造商、加速器类型和特定实例类型。

容量提供程序策略只能包含以下列表中的一种容量提供程序类型:

  • Amazon ECS 托管实例

  • Amazon EC2 Auto Scaling 组

  • Fargate/Fargate_SPOT

实例选择和优化

Amazon ECS 使用以下方法之一为 Amazon ECS 托管实例工作负载选择实例类型:

  • 自动选择 - 使用默认容量提供程序时,Amazon ECS 会自动选择成本最优化的通用实例类型,以满足任务定义中指定的 CPU 和内存要求。

  • 基于属性的选择 - 使用自定义容量提供程序时,您可以指定实例属性,例如 vCPU 计数、内存大小、CPU 制造商、加速器类型和特定实例类型。Amazon ECS 会从与指定属性匹配的所有实例类型中进行选择。

Amazon ECS 托管实例通过多种机制优化基础设施利用率和成本:

  • 多任务放置 - 默认情况下,Amazon ECS 将多个较小任务放置在较大实例上,以最大限度地提高利用率并降低成本。

  • 活动工作负载整合 - Amazon ECS 识别容器实例何时真正处于空闲状态,同时努力避免可能影响应用程序可用性或部署性能的过早终止。系统会遵循为服务设置的最小和最大任务数、先启动后停止行为以及任务保护行为。

  • 合理调整大小 - 随着工作负载需求的变化,Amazon ECS 会启动大小适合当前需求的替代实例。

Amazon ECS 使用 Amazon EC2 事件窗口在您喜欢的时间段内安排维护活动。利用事件窗口,您能够定义 AWS 可以对实例执行维护的重复时间段,通过使维护与运营计划保持一致来帮助最大限度地减少对工作负载的干扰。有关更多信息,请参阅《Amazon EC2 用户指南》中的实例的计划事件

如果您需要严格隔离,则可以将 Amazon ECS 托管实例配置为在具有虚拟机级别安全隔离边界的单独实例上运行每个任务。

任务定义

使用 Amazon ECS 托管实例的任务支持大多数 Amazon ECS 任务定义参数。Amazon ECS 托管实例与使用平台版本 1.4.0 的现有 Fargate 任务定义兼容,使迁移变得简单。

要使用 Amazon ECS 托管实例,请将 requiresCompatibilities 任务定义参数设置为包括 MANAGED_INSTANCES。任务定义可以同时指定 Fargate 和 Amazon ECS 托管实例兼容性,以提供更灵活的部署选项。

操作系统和 CPU 架构

支持以下操作系统:

  • Bottlerocket

有 2 个架构可用于 Amazon ECS 任务定义 ARM 和 X86_64。

在 Amazon ECS 托管实例上运行 Linux 容器时,您可以使用 X86_64 CPU 架构,也可以使用 ARM64 架构用于基于 ARM 的应用程序。

主要特征

下面是 Amazon ECS 托管实例的主要功能:

  • 选择特定 EC2 实例类型来满足应用程序要求,从而能够访问专用硬件功能,例如 GPU 加速计算、特定 CPU 功能和大内存大小。

  • 默认情况下,通过在单个实例上运行多个任务来优化资源利用率和成本,这与 Fargate 不同,Fargate 在自己的隔离环境中运行每个任务。

  • 确保符合安全规定和定期修补,实例最长生命周期为 14 天,之后任务将自动迁移到新实例。

  • 使用特权 Linux 功能在容器内启用高级联网和系统管理函数,包括 CAP_SYS_ADMIN、CAP_SYS_ADMIN 和 CAP_BPF。

IAM 角色

Amazon ECS 托管实例需要两个 IAM 角色:

  • 基础设施角色:此角色允许 AWS 代表您管理 Amazon ECS 托管实例。

  • 实例配置文件:实例配置文件是一种将 IAM 角色传递给 Amazon ECS 托管实例的方法。此配置文件用于:

    • 为运行容器工作负载的 Amazon ECS 托管实例定义 IAM 权限。

    • 允许 AWS 代表您管理这些实例。

    • 允许实例根据配置文件中定义的权限访问 AWS 服务。

安全性与合规性

Amazon ECS 托管实例实施多层安全措施来保护工作负载:

  • 安全配置 - Amazon ECS 托管实例遵循 AWS 安全最佳实践,包括无 SSH 访问、不可变的根文件系统以及通过 SELinux 实现的内核级强制访问控制。

  • 自动修补 - AWS 定期使用最新安全补丁更新 Amazon ECS 托管实例,遵循您配置的维护时间段。

  • 有限的实例生命周期 - 运行实例的最长生命周期为 14 天,确保您的应用程序在配置适当且已安装最新安全补丁的实例上运行。

  • 特权功能 - 您可以选择为需要 Linux 特权功能的应用程序启用这些功能,例如网络监控和可观测性解决方案。

Amazon ECS 托管实例支持与 Amazon ECS 相同的合规性计划,包括 PCI-DSS、HIPAA 和 FedRAMP。在受支持的区域,Amazon ECS 托管实例会遵循账户级 FIPS 端点设置,以帮助实现 FedRAMP 合规性。

网络连接

Amazon ECS 托管实例支持 awsvpchost 网络模式。awsvpc 网络模式为每个任务提供其自己的弹性网络接口和您的 VPC 内的私有 IP 地址。这使得用户能够在任务级别进行精细的安全组和网络 ACL 控制。在 host 网络模式下,任务共享主机 Amazon ECS 托管实例的网络命名空间。有关 Amazon ECS 托管实例上的任务联网的更多信息,请参阅Amazon ECS 托管实例的 Amazon ECS 任务联网

实例存储

Amazon ECS 托管实例支持配置附加到实例的 Amazon EBS 数据卷的大小。此存储由实例上运行的所有任务共享,可用于绑定装载。可以在任务定义中使用 volumesmountPointvolumesFrom 参数的容器之间共享和挂载该卷。

卷是在创建实例期间附加的。在使用 storageConfiguration 参数创建 Amazon ECS 托管实例容量提供程序时,您可以指定卷的大小(以 GiB 为单位)。

{ ... "managedInstancesProvider": { "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole", "instanceLaunchTemplate": { "ec2InstanceProfileArn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceProfile", "networkConfiguration": { "subnets": [ "subnet-abcdef01234567", "subnet-bcdefa98765432" ], "securityGroups": [ "sg-0123456789abcdef" ] }, "storageConfiguration": { "storageSizeinGiB" : 100 } } } ... }

此卷的最小大小为 30 GiB,最大大小为 16,384 GiB。默认情况下,此卷的大小为 80 GiB。

任务的拉取、压缩和未压缩容器映像存储在卷中。要确定任务必须用作绑定挂载的实例存储总量,必须从分配给任务的实例存储总量中减去容器映像使用的存储量。

附加到 Amazon ECS 托管实例的 Amazon EBS 卷的性能与相应的 Amazon EC2 实例的性能匹配,如《Amazon EC2 用户指南》中的 Amazon EBS 优化的实例文档所述。

您可以创建卷的快照,以便对安全问题进行取证分析或调试应用程序。有关创建 Amazon EBS 卷快照的更多信息,请参阅《Amazon EBS 用户指南》中的 Amazon EBS 快照。如果默认启用 Amazon EBS 加密,则卷默认使用指定用于加密的 AWS KMS 密钥进行加密。有关默认加密的更多信息,请参阅《Amazon EBS 用户指南》中的默认启用 Amazon EBS 加密

除了使用附加到实例的数据卷之外,您还可以为在 Amazon ECS 托管实例上运行的每个任务配置数据卷。有关可用任务级存储选项的更多信息,请参阅 Amazon ECS 任务的存储选项

服务负载均衡

使用 Amazon ECS 托管实例的 Amazon ECS 服务可以配置为使用 ELB 在服务中的任务之间均匀分配流量。

Amazon ECS 托管实例上的 Amazon ECS 服务支持应用程序负载均衡器、网络负载均衡器和网关负载均衡器类型。应用负载均衡器路由 HTTP/HTTPS(第 7 层)流量,而网络负载均衡器路由 TCP 或 UDP(第 4 层)流量。

当您为这些服务创建任何目标组时,必须选择 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与弹性网络接口相关联,而不是直接与 Amazon EC2 实例相关联。

监控和可观测性

Amazon ECS 托管实例通过 CloudWatch 指标和与可观测性工具的集成,提供全面的监控功能:

  • CloudWatch 指标 - 监控任务和实例级别的 CPU、内存、网络和存储利用率。

  • Container Insights - 获取容器化应用程序的详细性能指标和日志。

  • 第三方集成 - 启用特权功能后,您可以运行需要提升的 Linux 权限的高级监控和可观测性解决方案。

定价和成本优化

使用 Amazon ECS 托管实例,您需要为运行任务的整个 Amazon EC2 实例付费。定价取决于为工作负载选择的实例类型。

Amazon ECS 托管实例提供了多个成本优化功能:

  • 多任务优化 - 通过在大小合适的实例上运行多个任务来最大限度地提高实例利用率。

您的计算和实例节省计划也适用于 Amazon ECS 托管实例工作负载。

服务配额

Amazon ECS 托管实例工作负载受您的 Amazon EC2 按需型实例服务配额约束。使用 Amazon ECS 托管实例的 Amazon ECS 服务受 Amazon ECS 服务配额约束。

有关服务配额的更多信息,请参阅:

迁移注意事项

对于大多数工作负载,迁移到 Amazon ECS 托管实例非常简单:

  • 从 Fargate - 只需要更改和重新部署容量提供程序配置。使用平台版本 1.4.0 的现有任务定义完全兼容。

  • 从 EC2 - 与迁移到 Fargate 类似,但您可以继续使用 Amazon EC2 功能,例如特定实例类型。

在规划迁移时,请考虑以下事项:

  • 应用程序应容忍最长 14 天的实例生命周期和计划维护时段。

  • 长时间运行的任务(超过 14 天)不适合 Amazon ECS 托管实例。

  • 不支持自定义 AMI - Amazon ECS 托管实例使用 AWS管理的、经过安全优化的 AMI。

限制和注意事项

以下限制适用于 Amazon ECS 托管实例:

  • 自定义 AMI - AMI 由 AWS 拥有和管理

  • 实例生命周期 - 每个实例的最长运行时间为 14 天,确保安全修补和合规性。

  • SSH 访问 - 出于安全考虑,不可用。请使用 Amazon ECS Exec 进行调试和故障排除。管理操作只能通过 Amazon ECS API 进行。

  • Service Connect 不适用于在 Amazon ECS 托管实例上运行的服务。