Amazon Elastic Container Service (ECS)是一个有高度扩展性的容器管理服务。它可以轻松运行、停止和管理集群上的Docker容器,你可以将容器安装在EC2实例上,或者使用Fargate来启动你的服务和任务。

Amazon ECS可以在一个区域内的多个可用区中创建高可用的应用程序容器,你可以定义集群中运行的Docker镜像和服务。而且你可以充分利用AWS内部的Amazon ECR (Elastic Container Registry)或者外部的Registry(比如Docker Hub或自建的Registry)来存储和提取容器镜像。

使用Amazon ECS服务,你不需要再担心如何去运营集群管理、配置管理和基础架构的扩展性。

Amazon ECS还可以带来一致的部署和构建体验、管理和扩展批处理和提取-转换-加载(ETL)工作负载以及在微服务模型上构建先进的应用程序架构。

容器,镜像和注册表

要在Amazon ECS上部署应用程序,必须构建你的程序在容器中运行。如之前所说,Docker容器是一个集装箱,在集装箱里面有软件应用程序运行所需要的一切,包括了代码、运行环境、系统工具、系统函数库等等。

我们可以将标准化的代码、运行环境、系统工具等等打包成一个标准的集装箱,这个集装箱叫做Docker镜像(Docker Image)。这个Docker镜像的概念类似于EC2中的AMI (Amazon Machine Image)。

这些镜像文件通常会通过Dockerfile来构建,并且最终存放到注册表(Registry)内。这个Registry可以理解为摆放集装箱的码头,我们在需要某个类型的集装箱的时候就到码头去取。这类Registry可以是Amazon的ECR,也可以是公网上的Docker Hub,或者自己私有的Registry。

更多的容器支持,请参考Amazon ECS 的 Docker 基本知识

ECS 任务定义(Task Definition)

要在Amazon ECS上运行应用程序,你需要创建任务定义。任务定义是一个JSON格式的文本文件,这个文件定义了构建应用程序的各种参数。这些参数包括了:要使用哪些容器镜像,使用哪种启动类型,打开什么端口,使用什么数据卷等等。

以下是一个简单的任务定义示例,这个示例可以用来创建一个运行NGINX服务器的单个容器。

{
"family": "webserver",
"containerDefinitions": [
{
"name": "web",
"image": "nginx",
"memory": "100",
"cpu": "99"
},
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"memory": "512",
"cpu": "256",
}

ECS任务定义有点类似AWS的CloudFormation,只是ECS任务定义是用来创建Docker容器的。

ECS调度( Scheduling)

ECS任务调度负责将任务放置到集群中,你可以定义一个服务(Service)来运行和管理一定数量的任务。

服务调度(Service Scheduler)

  • 保证了一定数量的任务持续地运行,如果任务失败了会自动进行重新调度
  • 保证了任务内会注册一个ELB给所有容器

自定义调度(Custom Scheduler)

  • 你可以根据自己的业务需求来创建自己的调度
  • 利用第三方的调度

ECS集群(Cluster)

当你使用Amazon ECS运行任务时,你的任务会放在到一个逻辑的资源池上,这个池叫做集群(Cluster)

如果你使用Fargate启动类型,那么ECS将会管理你的集群资源,你不需要管理容器的底层基础架构。

如果你使用EC2的启动类型,那么你的集群会是一组容器实例。

在Amazon ECS上运行的容器实例实际上是运行了ECS容器代理(Container Agent)的EC2实例。

特点:

  • 集群包含了多种不同类型的容器实例
  • 集群只能在同一个区域内
  • 一个容器实例只能存在于一个集群中
  • 可以创建IAM策略来限制用户访问某个集群

ECS容器代理(Container Agent)

容器代理会在Amazon ECS集群内的每个基础设施资源上运行。使用容器代理可以让容器实例和集群进行通信,它可以向ECS发送有关资源当前运行的任务和资源使用率的信息。

容器代理可以接受ECS的请求进行启动和停止任务。

  • 在某些ECS AMI上已经预安装好了
  • 可以在Amazon Linux,Ubuntu,Redhat等系统上运行
  • 不能在Windows上运行

ECS安全性

  • IAM角色
    • EC2实例可以使用IAM角色访问ECS
    • ECS任务使用IAM角色来访问服务和资源
  • 实例上需要关联一个安全组(Security Groups)
  • 可以在ECS集群上访问和配置EC2实例的操作系统层面

ECS创建举例

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据