ECS是AWS自行研发的容器管理平台,相对于流行的K8S架构,ECS更加简单易用,学习门槛相对很低。此外,Fargate无服务器技术的支持,将ECS完全从管理底层架构中解放出来,用户不需要再去关心Node节点的EC2配置,而是只在乎启动的任务,非常便于高效、快速的将既有容器投入使用。
ECS 201 Workshop分成:
共四个部分。此外,在ECS实验之前,还有一个基础篇是如何Build容器镜像,请参考这里。
下面开始第二篇。
一、创建ALB负载均衡器
在启动容器之前,我们还需要准备好ECS容器集群之前面对客户访问的负载均衡器。
进入EC2界面,点击负载均衡器。点击创建按钮。如下截图。

选择负载均衡器的类型是ALB。如下截图。

输入负载均衡器的名称。在类型位置默认选择 Internet-facing
类型,下方的http协议和80端口不要修改。在可用区选项位置,选中A和B两个可用区。点击下一步继续。

在向导第二步,安全规则页面,点击跳过。如下截图。

在向导第三步,选择一个安全规则组,允许80端口访问。这个安全规则组可以是实现准备好,也可以是在创建负载均衡器过程中创建。

在向导第四步,创建新的目标组,输入组的名称叫做 phpdocker
,类型选择为 IP
。需要注意的是,类型一旦创建就不能修改,且搭配ECS Fargate模式使用必须选择为IP。接下来继续向下滚动页面。如下截图。

点击高级健康检查设置,展开更多参数。将检查健康的次数从5改成2,将间隔从30秒改为10秒,这样可以帮助应用更快的进入服务状态,点击下一步目标组继续。如下截图。

在目标组界面,留空不输入任何IP,点击继续。如下截图。

在向导最后一步Review中不需要做任何修改,点击创建按钮完成创建。

创建负载均衡器完成后,点击目标组,选中刚创建的目标组,进入目标,可以看到目前没有任何容器被注册进来。如下截图。

至此负载均衡器创建完成。
二、服务(运行Service)
任务定义是一个静态化的运行环境配置,到此时ECS还尚未真正运行任何容器。接下来的操作就是配置服务并启动容器。
首先进入上一步的任务定义界面,查看当前已经定义好的任务,点击操作按钮,再下拉框中选择创建服务。如下截图。

在定义服务界面,服务启动模式位置选择 Fargate
,任务定义位置是灰色不用修改。在Platform Version
平台版本位置,使用默认值LATEST
,在集群位置通过下拉框选择本实验第一步创建的集群 myecs
,在服务名称位置属于本服务名称,例如 frontendserver 或者 backendserver,本实验输入phpdocker
。在下方的 Number of tasks
任务数是启动的容器数量,本实验首先默认先启动1个,后续实验会使用Autoscalling再去进行动态扩展。完成后将页面继续向下滚动。如下截图。

将页面向下滚动。其中 Minimum healthy percent
和 Maximum percent
两个参数不需要修改。在部署位置下,切换部署类型,从默认的滚动更新 Rolling update
修改为 蓝绿发布 Blue/Green
部署。在部署配置上,选择 AllAtOnce
结尾的这个配置,表示一次更新所有节点。后续实验中会使用其他模式操作。点击页面右下角的按钮继续。如下截图。

在网络配置界面,首先选择VPC是默认VPC,再选择本VPC下要使用子网。本实验以北京区域为例,选择左右的子网。接下来点击安全组设置。

在选择安全组界面,点击从现有安全组中挑选,选中允许80端口的规则,然后点击右下角的保存。如下截图。

将页面向下滚动,选择自动分配公有IP为Enable。注意这里在Default VPC的默认网络线,必须打开自动分配公网IP选项。在页面中间部分选择负载均衡器是ALB类型。在页面下方的负载均衡器下拉框位置可以查看到当前的负载均衡器。设置完成后继续向下滚动屏幕。如下截图。

在负载均衡器的监听端口位置,从下拉框中可以看到当前任务定义里边的容器是运行在80端口的。点击右侧的添加按钮,将会展开详细配置界面。如下截图。

在继续配置负载均衡器的界面上,首先取消对 Test listener
的选中,然后设置第一个目标组。分别调整如下选项,如果配置正确的话,除目标组名称外,其他选项都会是灰色的不能修改的默认值。如下截图。

在第二个目标组配置界面下,从下拉框中选择 Create new
,然后输入名称new
。这一步操作将创建一个新的目标组,用于后续实验的蓝绿发布过程。 点击下一步继续。

在下一步配置弹性组位置,选择暂时不启用。后续实验用到时候会再修改有关配置。如下截图。

在最后一个步骤,点击创建服务。如下截图。

创建成功,此时页面提示信息都会是绿色,如下截图。

创建过程需要3-5分钟。至此创建ECS Service完成。
三、验证访问
1、查看ECS控制台运行情况
在上一步点击查看服务后,页面如果现实服务状态是绿色的 RUNNING
,则服务状态是正常。

在服务界面点击事件按钮,事件清单的第一条现实服务已经进入稳定状态 reached a steady state
则表示容器启动成功且正常对外启动服务。与之相反的,可能是容器镜像加载失败等错误提示。

接下来验证从网页访问应用程序。
2、从网页访问容器
进入EC2控制台的ALB负载均衡器界面,找到负载均衡器的访问入口。将访问地址复制下来。如下截图。

使用浏览器访问负载均衡器的入口,如果显示如下网页,则表示应用程序启动成功。

至此ECS启动服务的实验完成。