67-ECS-弹性容器服务 - Part 1
Hello大家好,我们今天的课时内容是ECS-AWS的弹性容器服务。
ECS-AWS的弹性容器服务
ECS是高度可扩展的、快速的容器管理和编排服务。
使用ECS,能够将您的Docker容器运行在AWS EC2或者 Fargate管理的无服务器架构上。
将容器运行在AWS,会涉及很多到一些相关的内容,如:
- ECS的EC2启动类型,可以将ECS任务运行在用户自主管理的EC2实例上;
- Fargate启动类型,可以将ECS任务运行在Fargate上,将容器运行在ECS管理的无服务器基础架构上。
- EKS,可以将容器运行在EKS,EKS是AWS提供的Kubernetes托管服务。
- ECR,AWS的Docker镜像仓库的托管服务。
以上涉及的内容比较多,对于SAP认证考试,会有一些使用ECS场景,如和其他的服务作为答案让您判断哪个是正确或最佳实践等等。
最后,ECS 非常适合于微服务架构和批处理作业。
什么是Docker?
ECS是Docker容器管理和编排的工具,那接下来我们首先简单介绍下什么是Docker。
Docker 是一个开源的应用容器引擎,够让开发者打包他们的应用以及依赖包到一个可移植的镜像中,然后在发布到任何流行的且安装了Docker运行环境的 Linux或Windows 机器上。容器技术通过将应用程序和其运行环境、依赖关系等打包在一起,使得我们的应用程序可以以相同的运行环境,运行在任何的服务器上。
容器之间相互是隔离的,相互之间不会互相影响。
您还可以控制分配给单个容器的资源(包括CPU、内存和磁盘空间)。一个容器的应用出问题将不会使用你全部的可用资源,从而影响其他容器。
您还可以配置Docker容器的网络模式
与虚拟机相比,Docker容器的启动速度更快,资源利用率更高,性能开销更小,这也是为什么Docker容器技术这么受欢迎,现在很多组织都在使用容器来运行他们的业务。
而本课时讨论的ECS服务,就是在AWS上运行Docker容器的一个非常棒的平台,它是一个高度可用且可扩展的服务,可以通过ECS对运行的容器进行配置和管理。比如使用ECS能够快速扩展或者缩减您运行容器的数量,这个快速是秒级别,而虚拟机可能是分钟级别。
ECS常见的使用场景
那ECS有哪些常见的使用场景呢?
首先,它非常适合于运行微服务架构。微服务是通过一种软件体系结构方法构建的,该方法将复杂的应用程序分解为较小的独立服务,而我们都知道容器是运行小型,分离服务的最佳选择。
- 因为都是较小的独立的服务,那就能够将多个容器运行在同一台服务器上。
- 如果微服务的应用负载会随着时间变化的话,ECS也支持配置根据负载变化进行横向伸缩。
- ECS通过集成应用程序负载均衡器,为微服务的架构提供了大多数分布式系统的关键功能,服务发现。
- 也可以基于容器的微服务架构,轻松构建CI/CD过程,如监控代码库,从该来源构建Docker镜像,然后将镜像推送到ECR,最后更新ECS服务的应用程序。
通过以上的这些提供的功能和特性,也让ECS成为了一个运行微服务的很好的一个平台之一。
ECS除了适合运行微服务架构,也非常适合运行一些批处理作业。
- 批处理作业通常是短暂的且并行的工作。您可以将批处理应用程序打包到Docker映像中,然后部署到 ECS任务中运行。
- ECS集群可以将容器运行在按需、RI、以及Spot实例上,具体需要根据业务场景来选择。比如可以将一些如图形处理,数据处理等临时性的任务跑在Spot实例上达到更高的成本效益。
最后一个常见的ECS用例是迁移应用程序到云端。通过将运行在本地数据中心的旧的应用程序容器化,然后就可以直接迁移应用程序至ECS。
ECS的核心概念
接下来我们讨论下ECS包括的一些核心的概念。
首先,什么是ECS集群?ECS集群是ECS任务或服务的逻辑分组,ECS任务和服务我们一会讨论。目前可以把ECS集群理解成,您可以向ECS集群注册一个或者多个EC2实例,注册的实例组成ECS集群,然后可在这些实例上运行容器(任务)。当然也可以使用Fargate提供的无服务器架构来运行容器(任务),这个我们后面讨论。
我们看下右侧这个图,有两台EC2实例注册到了ECS集群,就可以在EC2实例上运行容器(任务)
另外,ECS集群的每一个EC2实例上,都会运行一个容器的agent,也就是容器代理。代理将实例当前运行的任务信息以及资源利用率等信息发送到ECS服务;以及执行ECS服务发送的启动和停止任务的请求。
然后前面我们说ECS集群是ECS任务或服务的逻辑分组,那什么是ECS任务?如果要在ECS集群运行容器,您的容器首先要在”任务定义”中定义。
”任务定义“可以是一个JSON格式的文本,描述了构成您的应用程序的一个或多个容器(最多10个)。通过“任务定义”为您的容器的应用程序指定各种参数,比如为应用程序指定容器的信息,如容器使用的镜像,内存限制,端口映射等。然后就可以在ECS集群中运行任务。
所以要在集群运行容器就要先进行“任务定义”,然后选择“任务定义”在ECS集群上运行任务,从而运行您配置的容器。
所以“任务定义”是用于运行任务,以及 (注意)还用于创建ECS服务的。
什么是ECS服务呢?您可以将ECS任务理解成那种单一的,一次性执行的工作;而ECS服务能够指定要在集群中运行并保持多少个“任务定义”副本。
所以像一些需要持续运行的业务或者服务,应该配置成ECS服务运行在ECS集群,这样的话任何任务失败或者终止,调度程序将会启动任务的另一个副本来替换它,能够维持您配置的指定的数量。
好的,以上是ECS的核心概念,我们继续。
Fargate
前面我们讲了可以向ECS集群注册一个或者多个EC2实例,组成ECS集群。然后可在这些集群的EC2实例上运行任务或者服务。
这种方式的话是要自行创建和维护EC2实例的,也就是说ECS集群如果需要5台实例,您就要创建5台EC2实例。而且如果后续您的服务的访问量上来了,您需要扩展服务时,那就需要向ECS集群添加更多的EC2实例从而增加集群的计算能力。
在这种情况下,我们就不得不管理越来越多的基础设施,管理任务越来越多,如实例的打安全补丁等。
那除此之外,在ECS上运行容器还有另外一种方式,不用在自行注册EC2实例组成ECS集群运行服务,而是使用Fargate提供的无服务器架构来运行任务或者服务。
Fargate非常棒,使用Fargate我们不在需要创建EC2实例,也不用在管理集群的EC2实例,**由AWS来负责管理集群的基础设施,**我们甚至看不到这些基础设施。
我们要做的只要创建“任务定义”,然后选择FARGATE启动类型,任务就会在AWS负责管理的基础设施上运行,这些基础设施对我们是不可见的,由AWS负责管理。
这样的话,在后面如果需要扩展规模也会非常的容易,只需要增加任务数就搞定了。然后AWS会在其管理的基础设施上运行新的规模数量,我们不需要在新增EC2注册,在管理EC2,一切都由AWS负责搞定和管理,这就是Fargate无服务器架构的优势。
所以,在组织要使用ECS时,可以优先评估Fargate是否能够满足需求。
好的,以上就是我们今天课时的内容,我们ECS的内容的第一部分,希望能够给大家带来帮助。
希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助,如您有任何疑问,请联系我们: