盘点那些在 AWS 中常用的容器服务

2,871 阅读4分钟

容器技术和PaaS(Platform-as-a-Service) 是运维无法绕开的话题。

如果你的项目现在正在使用AWS,那么这篇文章,或许会对你的云基础设施改造有所帮助。如果你的项目在使用其他云服务,那也不要紧,快来了解了解,或许下个项目就能用上呢。

Elastic Beanstalk

Beanstalk 是一项 PaaS 服务,用于部署 Web 应用。如官方介绍的那样,我们只需要上传代码,它就能自动帮我们把 EC2、RDS 数据库、自动扩容、负载均衡等资源创建出来。但需要注意,VPC 还是得我们自己创建。

目前支持的语言和环境还是较为丰富的,常用的 Java、Node.js、Go、Python、Ruby、PHP、.NET 均是支持的,对了,Docker 也是支持的。

如果需要执行一些同步数据,需要较长时间运行的代码,Beanstalk 提供 Worker 环境,可以结合 SQS 消息队列,对数据异步地接收处理。

Beanstalk 支持版本控制,版本指向 S3 中的对应的代码。

关于部署策略,支持“一次性部署”、“滚动部署”、“额外批量滚动”、“不可变部署”、“流量拆分”(灰度发布)、“蓝/绿部署”等。同时,Beanstalk 是支持 AWS CodePipeline 的。

对于 Web 单体应用,Beanstalk 可以做到快速测试、部署、上线、扩容,大大降低运维复杂度。对于轻量的 Web 应用,Beanstalk 也是不错的选择。

App Runner

另一个纯粹面向容器的 PaaS 服务就是 App Runner 了。它支持自动扩容、负载均衡等常用功能。

App Runner 支持两种部署方式:手动部署和自动部署。手动部署包括 UI、CLI 和 API 方式。自动部署即 CI/CD,当代码或者容器镜像更新后,自动触发部署流程。

App Runner 对那些不了解运维技术的开发人员友好,通过简单的配置就可以快速启动一个容器化 Web 应用,具有高可用,自动扩容(包括横向和纵向)等特性。当我们只需要运行一个小规模项目,并不需要强大的基础设施配置时,App Runner 会是最佳选择。

ECS

ECS(Elastic Container Service) 是由 AWS 提供的容器编排服务,可以灵活地管理容器集群,配置自动扩容、负载均衡等服务。

相较于前两者,ECS 更为灵活,但更为复杂。它提供 3 中运行容器的方式:

  • Fargate;
  • EC2 实例;
  • 外部数据中心实例。

Fargate 是 AWS 提供的容器 Serverless 平台,相较于 EC2 实例,Fargate 可以让运维人员不用去关心底层操作系统,提高工作效率。

ECS 集群有三个概念:

  • ECS 集群;
  • ECS 服务;
  • ECS 任务。

其中,ECS 集群是管理 ECS 服务、ECS 任务的逻辑分组。ECS 服务用于维护一系列 ECS 任务。一个 ECS 任务会基于 ECS 的任务定义,运行相应的容器。同时,每个任务可以通过 IAM 角色分配不同的权限,做到权限隔离。

对于 ECS,负载均衡、自动扩容等服务需要我们额外配置。所以相较于 Beanstalk 和 App Runner 来说,运维的复杂性增加许多,但也为我们带来了更多的灵活性。

ECS 可以配置 CI/CD,实现微服务的测试、部署、上线等运维工作。当我们需要启动一个微服务项目的时候,ECS 是一个不错的选择。

EKS

EKS(Elastic Kubernetes Service) 是由 AWS 托管的 Kubernetes 服务。Kubernetes 是开源的容器编排服务,用于容器的自动部署、扩展和管理。

在 Kubenetes 中,一组运行的容器被称为 Pods。Pod 支持纵向扩容和横向扩容。扩容支持两种产品:

关于节点,节点是运行容器的机器,有以下几个类型:

  • Fargate;
  • EC2:
    • 托管节点组;
    • 自行管理的节点。

另外,EKS Anywhere 也支持运行在外部数据中心上的 Kubernetes 集群。

关于负载均衡,当创建 Kubenetes ingress 的时候,AWS 会预置 ALB(应用层负载均衡器)。当创建类型为 LoadBalancer 的 Kubenetes 服务时,AWS 可提供 NLB(传输层负载均衡器)。

ECS 是 AWS 专有的容器编排方案,如果项目只用到 AWS,那它是不错的选择。而当我们要跨多个云环境使用相同的容器编排方案时,EKS 将会是更好的选择。

总结

我们往往会根据项目的实际情况,选择合适的服务。

如果是需要运行一个轻量、简单的应用,并且需要快速部署上线,那 Beanstalks 和 App Runner 是不错的选择,前者可以直接部署代码,而后者则针对容器化应用。

如果想要在 AWS 上部署容器化微服务,则可以选择 ECS。

而当我们想要跨环境,使用统一的容器化编排方案的时候,EKS 则是更好的选择。