使用 Container 进行 Auto Scaling Group 二部曲
使用 Container 进行 Auto Scaling Group 二部曲
目标是要透过 ECS 来进行 Auto Scaling Group 的规划
基础环境建置
基础环境指的是网络环境、容器的内容以及负载均衡器。接下来的操作其实跟 ASG 步进缩放政策 Step scaling policies 笔记 类似,可以参照该网址,但为方便起见我们还是操作一遍
- 建置 VPC 与相关的子网 - 请参阅 Amazon VPC 实操。
- 新增 EC2 实例 - 请参阅 Amazon Elastic Compute Cloud (EC2) 笔记。
- 建立 Docker Container Image - 请参阅 Amazon Elastic Container Service (Amazon ECS) 简介
- 将 Docker Container Image 上传至储存库 - 请参阅 Amazon Elastic Container Registry (ECR) 笔记
- 新增 Application Load Balancer (ALB) - 请参阅 Elastic Load Balancing (ELB) 笔记
ECS 相关建置
-
建置 ECS 丛集 - 请参阅 使用 Container 进行 Auto Scaling Group 首部曲
-
建置 Amazon ECS Task Definitions
此步骤最重要的目的是定义容器要如何运行。进入 ECS 控制台,在左手选单选择 Task Definition,并在右边按下 Create new Task Definition
选择任务启动模式,请选择 EC2 模式
Select launch type compatibility: EC2
Configure task and container definitions
Task Definition Name: ithometask1
Task Role: EcsTaskExecutionRole
Network Mode: Bridge
Task execution role: EcsTaskExecutionRole
图 1. 定义任务名称与网络模式
接下来要定义容器内容,按下 Add container 后,请输入容器相关的信息
Container Definitions
Standard
Container name: ithomeContainer
Image: 950646218716.dkr.ecr.ap-southeast-1.amazonaws.com/ithome-repo:latest
Memory Limits (MiB): Hard Limit - 150, Soft limit - 100
Port mappings
Host port, Container port, Protocol
0, 80, tcp
映像档 (Image)指的是先前在 ECR 所放置的容器映像档;内存限制 (memory limit) 可以参阅 Amazon Elastic Container Registry (ECR) 笔记,透过docker stats 查出整个 Container 执行时至少需要 17.7MB 的内存,所以先设定为 100M 的内存供 Container 使用;埠号对应 (Port mappings) 因为一台主机会开启多个容器,所以将主机端口号设为 0,让系统自行决定。
图 2. 容器定义
- 建立 ECS 的服务
接下来就是把上面定义好的任务放到丛集里去运行,这个动作称之为新增服务 (create service)。进入 ECS 控制台,在左手选单选择 Clusters,并在右边按下刚刚建立的丛集 ithomeCluster,选择下方页签 Services,并按下 Create
图 3. 建立丛集的服务
建立丛集的服务需要四个步骤:
步骤 1. Configure service
Launch type: EC2
Task Definition: ithometask1
Cluster: ithomeCluster
Service name: ithomeService
Service type: REPLICA
Number of tasks: 4
Deployment type: Rolling update
Placement Templates: AZ balanced spread
图 4. 服务的一般组态设定
步骤 2. Configure network
Load balancer type: Application Load Balancer
Service IAM role: AWSServiceRoleForECS
Load balancer name: ithomeALB
Container to load balance
将 ithomeContainer 设定给 ALB,所以按下 Add to load Balancer,并完成以下设定
Production listener port: 80:HTTP
Target group name: ithomeTargetGroup
图 5. 指定负载均衡器
图 6. 将 Container 指定给负载均衡器
步骤 3. Set Auto Scaling (optional)
设定自动扩缩
Service Auto Scaling: Do not adjust the service’s desired count
步骤 4. Review
再次确认内容
完成后会启动服务器。进入 ECS 控制台,在左手选单选择 Clusters,并在右边按下 ithomeCluster,在 Services 页签可以看到启动的任务(tasks),这些任务就是由 Container 所负责,可以发现 EC2 的实例只有两个,,但 task 却有四个,这四个 task 会分布在这两个实例中。
图 7. 检视在丛集里的服务器
透过检视事件可以清楚的知道发生了甚么事,做系统不会永远的是那么顺利的,所以务必要学会看系统的事件。
图 8. 检视在服务器内的事件
最重要的就是提供服务的网页是否可以正常执行,所以一定要用 ALB 所提供的网址检视网页服务是否正常?
图 9. 检视网页