亚马逊AWS官方博客

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

Fargate简介

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

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

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

  • 无需管理任何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集成的优势总结:

开始动手配置Fargate集群

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

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

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

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

Fargate基本配置步骤

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

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

2. 设置Task和Container细节

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

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

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

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

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

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

3. 设置ECS Cluster

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

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

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

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

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

4. 查看Fargate相关Task细节

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

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

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

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

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

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

针对这个Target Group添加目标

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

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

6. Fargate容器日志查看

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

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

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

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

 

作者介绍:

姚远

亚马逊AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。现致力于网络和DevOps相关领域的研究。在加入AWS之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。