+86 135 410 16684Mon. - Fri. 10:00-22:00

走近Fargate,动手配置属于自己的Fargate集群

走近Fargate,动手配置属于自己的Fargate集群

走近Fargate,动手配置属于自己的Fargate集群

Fargate简介

容器是开发人员用来开发、封装和部署其应用程序的一种强大方法。AWS 每周启动超过十万 ECS 群集和数亿新容器。这相当于从 2016 年以来实现了超过 400% 的客户增长。Amazon ECS 和 Kubernetes 这样的容器编排解决方案让部署、管理和扩展这些容器工作负载变得更简单,从而增强敏捷性。但是,如果使用这些容器管理解决方案中的任何一个,您都仍然要负责底层基础设施的可用性、容量和维护。AWS 从中发现机会,致力于消除部分重复性的繁重工作。我们希望您能充分利用容器提供的速度、敏捷性和不变性,集中精力构建应用程序,而不必管理基础设施。

AWS Fargate

AWS Fargate 是一种在 AWS 上部署容器的简单方法。简单地说,Fargate 像 EC2,只是它提供的是容器而不是虚拟机。通过这种技术,您可将容器用作基础计算基元,而不必管理基础实例。您只需构建容器映像,指定 CPU 和内存要求,定义联网和 IAM 策略,以及启动。Fargate 提供灵活的配置选项,可以极为一致地满足应用程序需求,计费可精确到秒。

1513415806-7101-Picture1

最大的好处?您仍然可以使用所有相同的 ECS 基元、API 和 AWS 集成。Fargate 提供与 Amazon Virtual Private CloudAWS Identity and Access Management (IAM)Amazon CloudWatch 和负载均衡器的原生集成。Fargate 任务使用 AWSVPC 联网模式,在 VPC 中配置弹性网络接口 (ENI) 与资源安全通信。通过 AWS 命令行界面 (CLI) 启动 Fargate 任务非常简单。

Bash
ecs run-task --launch-type FARGATE --cluster BlogCluster --task-definition blog --network-configuration "awsvpcConfiguration={subnets=[subnet-b563fcd3]}"

使用该控制台来创建任务定义和运行 Fargate 启动类型的任务也很简单。
1513415806-6603-fargate-2

1513415806-5009-fargate-1

启动一些任务之后,可以看到它们在群集中运行。
1513415806-7571-fargate

可以看到 ECS 群集是异构的。它们可以包含在 Fargate 中和 EC2 上运行的任务。

如果深入看看其中某个任务,可以看到一些有用的信息,包括 Fargate 在 VPC 中配置的 ENI 以及该任务使用的所有容器。使用记录选项卡也可以方便访问 CloudWatch Logs 以查看该任务的相关信息。

1513415806-6073-fargate-4

我们介绍一下 Fargate 的配置选项和定价详情。

定价

AWS Fargate 使用按需定价模型。应用程序使用的 vCPU 和内存资源量是按秒计费的。每个 vCPU 的价格是 0.00084333 USD/秒 (0.0506 USD/小时),每 GB 内存的价格是 0.00021167 USD/秒 (0.0127 USD/小时)。使用 Fargate,您可以对 vCPU 和内存使用 50 个配置选项来支持各种工作负载。配置选项如下。

CPU (vCPU) 内存值 (GB)
0.25 0.5、1、2
0.5 1、2、3
1 最小2GB,最大8GB,以 1GB 为增量
2 最小4GB,最大16GB,以 1GB 为增量
4 最小8GB,最大30GB,以 1GB 为增量

需知信息

  • 您可以将 Fargate 配置为高度一致地满足应用程序的资源要求,仅为容器所需的资源付费。您可以在几秒钟内启动数十个到数万个容器。
  • Fargate 任务的运行方式与在 EC2 上运行的任务相似。您可以将它们添加到 VPC、配置负载均衡器和分配 IAM 角色。

关于路线图

我不能透露所有信息,不过对于 AWS Fargate,我们有非常令人激动的路线图。我们计划在 2018 年使用 Amazon EKS 支持在 Fargate 上启动容器。与往常一样,我们期待您提供反馈。请在 Amazon ECS 论坛留言,告诉我们您的想法。

Fargate 今天在美国东部 (弗吉尼亚北部) 区域发布。

 

就在大约三年前,AWS宣布Amazon Elastic Container Service(Amazon ECS)在AWS上大规模运行和管理容器。 利用Amazon ECS,您可以高规模和高可用性地运行您的工作负载,而无需担心运行自己的集群管理和容器编排软件。

现在,AWS宣布推出AWS Fargate ,使您能够将容器作为基本的计算单元,而无需管理底层实例。 借助Fargate,您不需要在集群中配置,部署或扩展虚拟机来运行容器。 今天,Fargate可以与Amazon ECS一起使用,计划在未来支持Kubernetes(Amazon EKS)的亚马逊弹性容器服务。

Fargate具有灵活的配置选项,因此您可以紧密匹配您的应用程序需求和精确的每秒计费。

1513415723-6192-11

  • 无需管理任何EC2实例
  • 基于任务的源生API
  • 计费到CPU和Memory级别,按照Task使用的这些资源按秒计费

Fargate优势

无需管理群集

使用 AWS Fargate,您只需考虑容器,以便能够集中精力构建和运行应用程序。AWS Fargate 消除了管理 Amazon EC2 实例群集的需要。您不必再选择实例类型、管理群集调度和优化群集利用率。使用 Fargate,所有这些麻烦都将不复存在。

无缝扩展

借助 Fargate,您可以轻松扩展应用程序。您不必再担心是否为容器应用程序预置了足够多的计算资源的问题。在您指定应用程序要求 (例如 CPU、内存等) 后,AWS Fargate 会以高度可用的方式管理运行您的容器所需的所有扩展和基础设施。您不再需要决定何时扩展群集,也不需要将其打包即可实现最佳利用率。使用 Fargate,您可以在几秒钟内启动数以万计的容器,并轻松扩展以运行最重要的关键任务型应用程序。

与 AMAZON ECS 和 EKS 集成

AWS Fargate 与 Amazon ECS 无缝集成。您只需按照定义 Amazon ECS 的方式定义您的应用程序。您可以将应用程序打包到任务定义中,指定所需的 CPU 和内存,定义每个容器需要的联网和 IAM 策略,并将所有这些内容上传至 Amazon ECS。完成所有设置后,AWS Fargate 就会为您启动和管理容器。

ECS和Fargate集成的优势总结:

1513415723-7586-2-1

开始动手配置Fargate集群

在之前配置基于EC2的AWS ECS服务时,您需要首先创建包含几个EC2实例的ECS集群。在这个集群中,您需要根据所有运行的容器性能选择合适的EC2实例, 配置好自动扩展策略,以保证底层的EC2实例可以完全有效的承载上层容器。

但是在Fargate中,您可以直接跳过配置底层EC2实例的细节,直接根据您的需要配置您希望使用的容器任务参数。而将承载容器的底层EC2实例交给AWS来维护。

1513415723-7131-3-1

下面就让我们来亲手配置一个属于自己的Fargate集群,来体验Fargate给我们带来的容器配置和管理的便利性。

目前Fargate已经可以在AWS的控制台上正式使用了,不过现在仅支持us-east-1区域。我们登录后切换到us-east-1进行配置。Docker镜像采用的是Docker官方的Nginx镜像。

Fargate基本配置步骤

1. 在Amazon ECS服务下面的Task Definition创建界面可以选择Fargate。

如果希望创建原来使用的普通ECS集群,则是选择EC2类型

1513415725-6022-4-1

2. 设置Task和Container细节

目前Fargate的网络类型只能选择awsvpc类型。awsvpc网络类型会给每一个任务单独分配一个ENI网卡,可以使得在网络层面访问每个任务容器和访问VPC内部的EC2一个。详细关于awsvpc网络类型的介绍,可以参考下面两篇文档:

Under the Hood: Task Networking for Amazon ECS 和 Introducing Cloud Native Networking for Amazon ECS Containers

1513415724-9591-5-1

因为没有EC2的概念了,所以需要给Task设定内存和CPU。而且在配置的时候下面有推荐的CPU和内存数量

1513415724-9346-11

Container配置部分和普通的ECS一样

1513415726-4456-11

配置容器名称,容器镜像的URL,容器占用的内存大小以及容器内部希望暴露的端口等。

1513415729-2687-11

使用Fargate创建的任务,容器日志会自动启用。启用后容器的日志会在CloudWatch创建并直接打入CloudWatch日志流中。因为用户使用Fargate时不会创建EC2实例,所以推荐打开容器日志,可以更好的监控容器的状态。

1513415726-8643-11

3. 设置ECS Cluster

在Cluster配置中选择AWS Fargate使用的集群

1513415727-7035-11

在配置集群和网络中,如果要创建新的VPC,那么需要勾选该选项。如果希望利用现有的VPC,那么不勾选该选项即可。后面在创建任务时,会进入分配任务到某个VPC的步骤。

1513415726-8572-11

在创建好了集群之后,在总界面上可以看见,每个Cluster可以混搭Fargate以及普通基于EC2的ECS主机。而我们刚才通过Fargate创建的集群,从控制台可以看见,是无需我们维护底层的EC2实例信息的。也不会在这里出现。

1513415728-6104-11

集群创建完毕之后。开始创建Fargate的任务。在集群中启动Task,Launch类型选择Fargate

1513415728-3275-11

网络部分选择对应希望放入的VPC,如果希望Fargate创建的Task可以被公网访问的话,勾选auto-assign public IP。全部设置完毕之后,点击Run Task,启动任务

1513415729-1046-11

4. 查看Fargate相关Task细节

在Task处可以看见运行了Fargate的容器,

1513415729-4838-11

点入Task,可以看见该Task绑定的网卡细节,包括私网IP地址和MAC地址。但是如果要看公网地址,那么需要进一步点击ENI

1513415729-3245-11

1513415733-9930-11

访问该界面发现Nginx已经启动

1513415733-5372-11

5. 增加负载均衡器(ALB/NLB)

多个任务创建完毕之后。我们需要给新创建的任务添加负载均衡器。因为Fargate没有EC2实例会暴露出来。只会暴露ENI网卡的IP地址。所以在负载均衡器方面,仅支持可以添加IP地址的ALB和NLB。

添加Target Group,再次注意,因为Fargate没有Instance的概念,所以Target Type需要选择IP

1513415733-4952-11

针对这个Target Group添加目标

1513415732-6566-11

1513415734-6915-11

创建ALB,Target Group选择之前创建的组

1513415733-6629-11

创建ALB结束之后,已经可以通过ALB的域名可以正常访问Fargate创建的容器了

1513415781-7748-11

6. Fargate容器日志查看

前面说到可以通过CloudWatch Logs的方式记录任务容器的日志。打开CloudWatch服务,在Logs界面写,可以找到新创建的ECS Fargate任务的日志流。

1513415757-3409-11

在该日志流中记录了Fargate生成的2个容器的日志

1513415757-2825-11

点击进入其中一个容器的日志,可以看见刚才MAC笔记本通过firefox浏览器通过ALB访问容器的日志记录

1513415758-9416-11

至此,一个前端通过ALB做负载均衡,后端由Fargate生成的由Nginx组成的集群搭建完成。整个过程不需要您维护任何EC2的实例。完全由AWS来帮您维护EC2实例,您只需要关系您的容器即可。