亚马逊AWS官方博客
Amazon ECS Anywhere 入门 – 现已全面开放
自 2014 年发布 Amazon Elastic Container Service(Amazon ECS)以来,AWS 先后发布了多个其他的产品以在 AWS 区域之外运行 Amazon ECS 任务,例如 AWS Wavelength(一种适用于移动边缘设备的产品)或 AWS Outposts(一项将 AWS 拥有和完全托管的硬件扩展到客户环境的服务)。
但由于监管、延迟和数据驻留要求或希望利用现有基础设施投资,一些客户的应用程序需要在本地运行。对于这些情况,客户需要安装、运行和管理单独的容器编排软件,并且需要在 AWS 和本地环境中使用不同的工具。客户希望我们找到能在不增加复杂性和成本的情况下管理其本地容器的方法。
继 Jeff 去年的预公告之后,我很高兴地宣布 Amazon ECS Anywhere已全面开放,这是 Amazon ECS 的一项新功能,可让客户轻松在本地运行和管理基于容器的应用程序,包括虚拟应用程序计算机(VM)、裸机服务器和其他客户管理的基础设施。
借助 ECS Anywhere,您可以使用您目前在 AWS 中使用的基于云、完全托管且高度可扩展的容器编排服务,在任何客户管理的基础设施上运行和管理容器。您不再需要在本地准备、运行、更新或维护自己的容器编排器,只需安装简单的代理即可更轻松地管理混合环境以及将云用于您的基础设施。
ECS Anywhere 为所有基于容器的应用程序提供统一的工具和 API,并在云端和客户管理的基础设施中为集群管理、工作负载调度和监控提供相同的 Amazon ECS 体验。现在,您可以使用单个统一的容器编排器,在自己的硬件上运行容器工作负载(例如在边缘站点运行数据处理)以及在云中运行容器工作负载,从而更低成本和复杂性的优势。
Amazon ECS Anywhere – 入门
要开始使用 ECS Anywhere,您需要在 ECS 集群中注册您的本地服务器或虚拟机(也称为外部实例)。您必须在这些外部实例上安装 AWS Systems Manager 代理、Amazon ECS 容器代理和 Docker。您的外部实例需要有一个允许其与 AWS API 通信的 IAM 角色。有关更多信息,请参阅 ECS 开发人员指南中的需要的 IAM 权限。
要为 ECS Anywhere 创建集群,请打开 ECS 控制台,进入 Create Cluster(创建集群)页面,然后选择 Networking Only(仅联网)模板。此选项可与 AWS Fargate 或外部实例容量配合使用。我们建议您使用在地理上最靠近要注册的本地服务器的 AWS 区域。
这将创建一个空集群来注册外部实例。在 ECS Instances(ECS 实例)选项卡上,选择 Register External Instances(注册外部实例)以获取激活码和安装脚本。
在 Step 1: External instances activation details(第 1 步:外部实例激活详细信息)页面的 Activation key duration (in days)(激活密钥有效期(天))中,输入激活密钥将保持活动的天数。激活密钥最多可用于 1,000 次激活。在 Number of instances(实例数)中,输入要注册到集群的外部实例数量。在 Instance role(实例角色)中,输入要与外部实例关联的 IAM 角色。
选择 Next step(下一步)以获取注册命令。
在 Step 2: Register external instances(第 2 步:注册外部实例)页面上,复制注册命令。在要注册到集群的外部实例上运行此命令。
将注册命令粘贴到本地服务器或虚拟机中。将每个外部实例都注册为 AWS Systems Manager 托管实例,然后再将该实例注册到您的 Amazon ECS 集群中。
x86_64
和 ARM64
CPU 架构均受支持。以下是支持的操作系统列表:
- CentOS 7、CentOS 8
- RHEL 7
- Fedora 32、Fedora 33
- openSUSE Tumbleweed
- Ubuntu 18、Ubuntu 20
- Debian 9、Debian 10
- SUSE Enterprise Server 15
ECS 代理程序启动并完成注册后,您的外部实例将在 ECS Instance(ECS 实例)选项卡上显示。
您还可以将外部实例添加到现有集群中。在这种情况下,您可以看到 Amazon EC2 实例和外部实例都带有 mi-*
前缀。
现在外部实例已注册到集群,您可以开始创建任务定义。Amazon ECS 提供了 requiresCompatibilities
参数,以在创建服务或运行独立任务时验证任务定义是否与 EXTERNAL
启动类型兼容。以下是一个示例任务定义:
{
"requiresCompatibilities": [
"EXTERNAL"
],
"containerDefinitions": [{
"name": "nginx",
"image": "public.ecr.aws/nginx/nginx:latest",
"memory": 256,
"cpu": 256,
"essential": true,
"portMappings": [{
"containerPort": 80,
"hostPort": 8080,
"protocol": "tcp"
}]
}],
"networkMode": "bridge",
"family": "nginx"
}
您可以在 ECS 控制台中创建任务定义。在 Task Definition(任务定义)中,选择 Create new task definition(创建新任务定义)。对于 Launch type(启动类型),选择 EXTERNAL(外部),然后将任务和容器定义配置为使用外部实例。
在 Tasks(任务)选项卡上,选择 Run new task(运行新任务)。在 Run Task(运行任务)页面上,对于 Cluster(集群),选择要在其上运行任务定义的集群。在 Number of tasks(任务数)中,输入要使用 EXTERNAL
启动类型运行的该任务的副本数。
或者,在 Services(服务)选项卡上,选择 Create(创建)。通过 Configure service(配置服务)可以指定要在集群中运行和维护的任务定义的副本。要在注册的外部实例中运行任务,则对于 Launch type(启动类型),选择 EXTERNAL(外部)。此启动类型不支持负载均衡器、标签传播和服务发现集成。
您在外部实例上运行的任务必须使用 bridge
、host
或 none
网络模式。不支持 awsvpc
网络模式。有关各种网络模式的更多信息,请参阅 Amazon ECS 最佳实践指南中的选择网络模式。
您现在可以运行任务,将某个 EXTERNAL
、FARGATE
和 EC2
容量提供程序类型组合与同一 ECS 服务关联,并指定您希望如何在它们之间拆分任务。
注意事项
这里需要注意以下几点:
连接:如果在本地服务器上运行的 ECS 代理与 AWS 区域内的 ECS 控制平面之间的网络连接中断,现有的 ECS 任务将会继续正常运行。如果任务仍能与其他 AWS 服务连接,只要任务角色证书处于活动状态,任务将会继续与这些服务通信。如果作为服务的一部分启动的任务崩溃或自行退出,则在连接恢复之前,ECS 将无法替换它。
监控:使用 ECS Anywhere 时,您可以获取集群和服务的 Amazon CloudWatch 指标,使用 CloudWatch Logs 驱动程序( awslogs
)获取容器日志,访问 ECS CloudWatch 事件流以监控集群的活动。
联网:ECS 外部实例针对运行生成出站流量或处理数据的应用程序进行了优化。如果您的应用程序需要入站流量(例如 Web 服务),则在系统原生支持此功能之前,需要使用变通方法将这些工作负载置于负载均衡器之后。有关更多信息,请参阅 ECS Anywhere 的联网。
数据安全:为帮助客户保证数据安全,ECS Anywhere 仅将与任务状态或容器状态相关的元数据(它们是否在运行、性能计数器等)发回 AWS 区域。此通信在传输过程中通过传输层安全性(TLS)进行身份验证和加密。
ECS Anywhere 合作伙伴
ECS Anywhere 携手各种 ECS Anywhere 合作伙伴,以帮助客户充分利用 ECS Anywhere 以及为此功能增加更多的用途。以下是我们的合作伙伴为分享他们的经验和产品而写的一些博客文章。(我将用他们所发表文章的链接来更新本文。)
现已推出
Amazon ECS Anywhere 现已在支持 ECS 的 所有商业区域开放,但 AWS 中国区域除外。ECS Anywhere 没有最低费用,也需您预先承诺。您只需为每个托管的 ECS Anywhere 任务按实例小时数付费。有关更多信息,请参阅定价页面。
要了解更多信息,请参阅 Amazon ECS 开发人员指南中的 ECS Anywhere。请将反馈发送到 Amazon ECS 的 AWS 论坛或通过您常用的 AWS Support 联系人发送反馈。
立即开始使用 Amazon ECS Anywhere。
– Channy
更新。观看 cool demo of ECS Anywhere(ECS Anywhere 精彩演示),在居家办公室运行一个 Raspberry Pi 集群,并阅读其深度分析博客文章。
(容器日:Amazon ECS 版)