该博客将说明如何使用Amazon EC2容器服务 (Amazon ECS)运行Couchbase Docker容器。
非常感谢@moviolone帮助理解了这些概念并使此设置运行。
什么是Amazon ECS?
Amazon ECS是一项容器管理服务,可轻松在Amazon EC2实例集群上运行,停止和管理Docker容器。 Amazon ECS与其余的AWS基础架构很好地集成在一起,无需操作您自己的集群或配置管理系统。
一个显而易见的问题是,它与Docker Swarm , Kubernetes或Mesos等其他容器编排框架有何不同? 第一个大的不同是这些框架都是开源的。 亚马逊目前使用专有的业务流程框架。
ECS的一大优势在于,就像其他AWS基础架构一样,这是一项托管服务 。 因此,您只需要担心部署容器而无需担心基础架构。
ECS的更好比较是与适用于AWS / Azure的Docker (由Docker中新引入的Swarm Mode支持), Google Container Engine (由Kubernetes支持), DC / OS (由Mesos支持)一样,它们都是托管服务。
ECS的优势在于,它与AWS基础架构无缝集成,例如使用CloudFormation模板部署容器实例,使用Autoscaling Group扩展容器,使用Security Groups进行端口映射,使用Elastic Load Balancer管理传入的容器流量,使用CloudWatch查看日志等。
如果您已经购买了Amazon基础架构,那么ECS听起来很合适。 在DockerCon上宣布的适用于AWS的Docker在该领域也是类似的产品。
但是,您也需要注意几个缺点:
- 可移植性 –应用程序设计的Docker Swarm,Kubernetes和Mesos可以在各种平台上运行,例如Amazon,Azure,GCE,OpenStack,本地,VMWare,裸机数据中心等。但是ECS仅与Amazon绑定。 您是否将其视为供应商锁定?
亚马逊可以将其业务流程平台或调度程序作为独立产品发布,但这不是很典型。 - 容器格式 – ECS服务仅针对Docker容器。 出于所有实际目的,至少在今天,这可能是完全可以的。 我还没有听说过Rkt的部署或任何其他容器格式。 但是,一旦将来开始出现符合OCI的运行时,这种情况可能会改变。
最后一件事,在我们深入研究概念和代码之前,Amazon EC2 Container Service不收取额外费用。 您需要支付为存储和运行应用程序而创建的AWS资源(例如EC2实例或EBS卷)。
Amazon ECS概念
以下是ECS中关键概念的概述:
- 容器实例 :是为运行容器准备的AMI实例。 默认情况下,每个Amazon实例都使用Amazon ECS优化的Linux AMI 。 这是运行ECS容器服务的推荐映像。 该基本映像的关键组件是:
- Amazon Linux AMI
可以配置其他映像,例如CoreOS,Suse或Ubuntu,以符合Container Instance AMI规范。 之所以可以这样做,是因为ECS代理代码在开源中可用。
- 任务 :任务定义为JSON文件,并描述包含一个或多个容器定义的应用程序。 这通常指向注册表,端口/卷映射等中的Docker映像。
- 服务 :ECS维护您的应用程序的“所需状态”。 这是通过创建服务来实现的。 服务指定在给定时间需要运行的任务定义的实例数。 如果服务中的任务不正常或停止运行,则服务调度程序将弹跳该任务。 它确保所需状态与实际状态匹配。 这就是在ECS中提供弹性的原因。服务中的新任务在群集中的可用区域之间达到平衡。 服务调度程序会找出哪些容器实例可以满足服务需求,并在最佳可用性区域(运行任务最少的一个容器)中的有效容器实例上调度它。
Amazon EC2 Container Service入门
登录到您的AWS EC2控制台 ,然后单击EC2 Container Service :
单击Get started
按钮定义您的应用程序。
创建ECS任务
在ECS中,将Docker工作负载定义为任务。 一个任务可以包含多个容器。 任务的所有容器都位于同一台计算机上。
输入如下所示的值:
在此步骤中指定的项目很少:
- 任务定义是对包含一个或多个容器定义的应用程序的描述。
- 容器名称是将作为该任务的一部分启动的容器的名称。
- 映像允许指定一个或多个需要作为容器启动的映像,作为此应用程序的一部分。 此处指定的映像使用couchbase:latest作为基本映像,并使用Couchbase REST API来配置服务器。 该映像的Dockerfile提供了有关如何准备该映像的更多详细信息。
- 最大内存是需要为容器分配的内存(相当于
-m
Docker CLI开关)。 Couchbase需要1GB才能在dev中运行,因此在此处指定。 - 最后是端口映射(在Docker CLI上为
-p
)。 Couchbase管理需要端口8091。
有关这些的更多详细信息,请参见“ 任务定义参数” 。
创建ECS服务
单击Next step
以配置服务。
输入服务名称。 可以在此处指定所需状态。 现在,我们将使其保持简单,并启动一个单节点Couchbase容器。 并且由于所需状态是在单个容器中运行,因此不需要ELB。
有关这些的更多详细信息,请参见服务定义参数 。
创建ECS集群
任务在容器实例上运行,并且这些实例需要在集群中注册。 这使我们可以在以后扩大/缩小集群,以适应运行更多容器的需要。
单击Next step
以配置集群。
在此图像中:
- 采用默认的群集名称
- 创建容器实例的同质集群。 m3.medium是运行Couchbase节点的合适大小
- 选择一个先前创建的安全密钥。 这将允许打开与容器实例的ssh连接
- 将创建一个新的IAM角色,以允许ECS代理与ECS服务进行通信
群集中的容器实例可以跨越多个可用性区域,并且可以与ELB进行平衡。
查看所有指定的选项:
单击Launch instance & run service
按钮以启动服务。
创建服务后,将显示以下状态:
输出显示集群,服务和任务定义已创建。 配置和初始化实例以及在它们上运行任务需要几分钟。
查看ECS服务和任务
单击View Service
按钮以查看新创建的服务。
此图片中的几件事:
- 该服务显示任务定义
couchbase:6
。 每个服务都分配有一个任务定义,并且在末尾用尾随数字表示多个版本。 在这种情况下,较早创建了一些版本,否则版本号从1
开始。 - 所需和运行计数显示为1。
- 如果需要部署新版本的任务定义,则使用
Minimum healthy percent
和Maximum percent
。 使用100%和200%的对应值,将首先部署任务的新版本,然后终止旧版本。 我们将在后续博客中使用这些数字。 - 正在运行的任务显示在屏幕底部。 单击UUID以了解有关正在运行的任务的更多信息。
任务定义显示了EC2实例的运行位置,当前状态,端口映射以及其他一些有用的信息。 我们需要看的关键部分是External Link
。 该URL是可访问我们的Couchbase Web控制台的位置。
Couchbase Web控制台
单击此链接将使用Couchbase Web Console打开一个新选项卡:
以Administrator
身份输入登录名,并以password
输入password
。 这些在arungupta / couchbase image中配置。
在这里,您将看到Couchbase Web Console的全部荣耀!
该博客介绍了如何使用Amazon ECS运行Couchbase Docker容器。
未来的博客将展示……
- 使用ECS设置Couchbase集群
- 使用Docker Compose部署多容器应用程序( 现在支持v2 )
- 使用CLI设置ECS集群
Amazon ECS和Couchbase参考
翻译自: https://www.javacodegeeks.com/2016/07/couchbase-docker-container-amazon-ecs.html