菜单

此页面上的内容由机器翻译完成。某些内容的质量可能并不完美。

分享反馈

AWS ECS 深度:架构和部署选项

目录

分享该页面

Yifat Perry
Yifat Perry

什么是 AWS ECS?

Amazon Elastic Container Service (ECS) 是一种基于云的完全托管的容器编排服务。它允许您在云中运行应用程序,而无需配置和维护基础架构。

为了确保以最佳方式满足容量需求并保持峰值性能,您可以将 ECS 设置为持续评估和监控内存和 CPU 进程。这些数据可以帮助您确定每个容器的最佳部署策略。此外,您可以根据需要利用 ECS 扩展容器和发布更新。

ECS 支持与多个有用的 AWS 服务和功能集成,包括 Identity and Access Management (AWS IAM) 角色、Elastic Block Store (AWS EBS) 卷和 AWS Elastic Load Balancing (AWS ELB)。

这是我们关于 Kubernetes on AWS 的系列文章的一部分。

在本文中,您将了解:

ECS 的优势和用例

ECS 使您能够轻松地将容器用于各种用例。您可以利用 ECS 托管简单的网站以及管理分布式微服务架构。ECS 简化了容器的管理,但它不能使整个过程自动化。您仍然可以微调和自定义流程。

以下是 Amazon ECS 的几个主要优势:

  • 轻松简单的部署 — ECS 通过负责设置和维护 Kubernetes 集群基础架构,消除了相关需求。
  • 调度功能 — 使您能够调度服务、应用程序和批处理进程。
  • 托管可用性 — ECS 负责维护应用程序可用性,并帮助您根据需要进行扩展或缩小,以确保满足容量需求。
  • 原生集成 — 具有 AWS ELB、Amazon Virtual Private Cloud (Amazon VPC)、IAM 和AWS EBS 等广泛功能。
  • 与现有工具集成 — ECS 提供简单的 API,使您可以与 CI/CD 管道和现有工具集成。

在我们的指南中了解更多信息:AWS ECS vs KubernetesAWS ECS vs EKS

Amazon ECS 架构

下图说明了在 AWS Fargate 上运行容器的 Amazon ECS。在以下各节中,我们将讨论所示的主要组件。

Amazon ECS architecture with VPC, container registry, Fargate tasks, and elastic network interfaces across availability zones.来源:AWS

容器和镜像

要在 Amazon ECS 上部署应用程序,需要设计要在容器中运行的应用程序组件。容器是从称为镜像的只读模板创建的。

镜像通常由 Dockerfile 构建,Dockerfile 是一个纯文本文件,指定需要在容器中运行的所有组件。生成后,这些镜像将存储在容器注册表中,可以在集群上下载和运行。

AWS ECS 任务定义

要准备在 Amazon ECS 上运行的应用程序,需要创建任务定义。任务定义是描述构成应用程序的一个或多个容器(最多 10 个)的文本文件(JSON 格式)。

作业定义可以为您的容器化应用程序指定各种参数。例如,您可以使用这些参数来指示要运行的容器、应打开的端口、应使用的数据卷、要使用的 Docker 网络模式以及 Identity and Access Management (IAM) 角色。

几乎所有可以在命令行 Docker 命令中运行的内容都可以使用 ECS 任务定义进行定义。请参阅官方文档中的所有任务定义参数。

AWS ECS 任务和调度

任务是在集群中运行的任务定义的实例。在 Amazon ECS 中为应用程序创建任务定义后,可以指定要在集群上运行的任务数。

Amazon ECS Task Scheduler 负责将任务放置在集群中。主要调度策略有两种:

  • REPLICA 策略在您的集群中放置所需数量的任务,并保持此数量的任务,如果其中一些任务失败,则还原它们。
  • DAEMON 策略在每个符合相关标准的活动容器实例上放置一个任务。

Amazon ECS architecture showing service definition and Fargate tasks with elastic network interfaces.来源:AWS

AWS ECS 集群

Amazon ECS 集群是服务的逻辑分组,每个服务由一个或多个任务组成。首次使用 Amazon ECS 时,将创建默认集群。您可以在帐户中创建其他集群,以实现不同工作负载或项目的资源隔离。

有两种方法可以运行集群资源 — 在 EC2 实例上或通过 Amazon Fargate。有关这些选项各自工作原理的更多详细信息,请参见以下部分。

容器代理

容器代理在 Amazon ECS 集群中的每个容器实例上运行。代理向 Amazon ECS 发送有关当前正在运行的任务和资源利用率的信息。Amazon ECS 可以根据需要使用代理启动和停止任务。

Amazon ECS workflow diagram illustrating container registry integration and task scheduling.来源:AWS

AWS ECS 部署选项:EC2 vs Fargate

ECS 可以使用 Elastic Compute Cloud (EC2) 实例来运行容器。EC2 实例部署为 Amazon EC2 服务的一部分,并在定义的 ECS 集群中“注册”",这意味着 EC2 可以使用这些实例部署容器。您可以在现有 VPC 中运行 ECS 集群,使其可访问该 VPC 中运行的现有 AWS 资源。

部署 ECS 容器的另一种方式是使用 Amazon Fargate。Fargate 免除了预置、配置和管理 EC2 实例的责任,允许 AWS 为您管理 EC2 实例。

使用 Fargate,您无需管理服务器,但必须确保任务定义是无状态的。当前,您无法将存储卷(如 Elastic Block Storage 卷)附加到作业中定义的容器。

这意味着,如果您将 Fargate 与持久存储一起使用,则需要使用 S3 或 Relational Data Service (RDS) 等外部存储服务。

在以下情况下将 ECS 与 EC2 一起使用:

  • 您的整个基础架构在 AWS 中运行
  • 您已定义 VPC 和子网
  • 您拥有配置和管理 EC2 实例的现有流程
  • 应用程序需要直接连接的持久存储

在以下情况下使用 ECS Fargate:

  • 您没有现有的 VPC
  • 您有一些资源在 Amazon 上运行,有一些在其他云环境中运行
  • 应用程序无状态或不需要直接连接的存储卷

AWS ECS 问答

Amazon ECS 与 AWS Elastic Beanstalk 有何不同?

EC2 为您提供了简化容器管理的功能,同时您可以继续微调流程。另一方面,AWS Elastic Beanstalk 会自动为您管理基础架构。在需要仅关注代码的情况下,可以使用 Beanstalk。

AWS Elastic Beanstalk 是一种基于云的服务,可帮助您轻松部署和扩展应用程序和服务。Beanstalk 自动管理 ELB、EC2、Auto Scaling、RDS 和 Auto Scaling 等服务,部署应用程序并监控应用程序的运行状况。

使用 Beanstalk 时,需要指定希望服务部署的容器映像,以及内存和 CPU 要求、容器链接和端口映射。定义此信息后,Beanstalk 将开始自动处理所有管理。它配置 ECS 集群,管理自动扩展和监控,执行负载平衡,并在集群中部署容器。

Amazon ECS 与 AWS Lambda 有何不同?

Amazon ECS 提供的功能可简化容器和集群的管理,但不能完全自动化流程。您需要了解配置流程的工作原理,并持续配置和扩展资源。EC2 公开了服务器,并为您提供扩展和优化环境所需的信息。

AWS Lambda 允许您对自动化计算基础架构的事件驱动任务进行编码。除了编写触发事件的代码,Lambda 使您能够定义不需要或允许您干预的无服务器基础架构。Lambda 让您可以配置数据更改或网站点击等事件,并定义对事件的响应。

使用 Cloud Volumes ONTAP 优化容器存储

NetApp Cloud Volumes ONTAP,领先的企业级存储管理解决方案,在 AWS、Azure 和 Google Cloud 上提供安全、经过验证的存储管理服务。Cloud Volumes ONTAP 支持高达 368 TB 的容量,并支持各种用例,如文件服务、数据库、DevOps 或任何其他企业工作负载,具有强大的功能集,包括高可用性、数据保护、存储效率、Kubernetes 集成等。

特别是,Cloud Volumes ONTAP 支持容器化工作负载的持久卷配置和管理要求。

通过这些 Kubernetes 工作负载和 Cloud Volumes ONTAP 案例研究,详细了解 Cloud Volumes ONTAP 如何帮助解决容器化应用程序的挑战。

Drift chat loading