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 ECS 和 Introducing 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 之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。
本文转载自 AWS 技术博客。
原文链接:
评论