aws-doc/课程/第四阶段-应用架构/第27天-ECS容器服务.md
2026-05-08 10:24:39 +08:00

6.4 KiB
Raw Permalink Blame History

第27天ECS——在 AWS 上运行容器

今天你将学到什么

昨天学了容器的基础概念,今天学习如何在 AWS 上运行容器。ECSElastic Container Service是 AWS 自己的容器编排服务,帮你管理容器的部署、扩展和运维。


为什么需要容器编排

一个容器很简单,一百个容器就复杂了

在自己电脑上跑一个容器很简单。但在生产环境中:

  • 你可能有 50 个不同的服务,每个服务跑多个容器副本
  • 某个容器挂了,需要自动重启
  • 流量增加了,需要自动增加容器数量
  • 新版本发布了,需要滚动更新(不停机)
  • 容器之间需要互相通信
  • 需要把容器合理地分配到不同的服务器上

这就是容器编排要解决的问题。

类比:如果容器是一个个工人,容器编排就是工厂的管理系统——安排谁在哪个岗位工作、有人请假了自动找人顶替、订单多了自动加人。


ECS 的核心概念

四个关键概念

概念 类比 说明
集群Cluster 工厂 容器运行的环境,一组计算资源
任务定义Task Definition 岗位说明书 描述容器怎么运行(用什么镜像、多少 CPU/内存、端口等)
任务Task 正在工作的工人 任务定义的运行实例,一个或多个容器
服务Service 部门 确保指定数量的任务持续运行,自动替换失败的任务

它们之间的关系

集群Cluster
  └── 服务Service"保持 3 个任务一直运行"
        ├── 任务 1运行中
        ├── 任务 2运行中
        └── 任务 3运行中← 如果挂了,服务会自动启动新的

两种运行模式

模式一EC2 启动类型

你自己管理运行容器的 EC2 实例。

你的 ECS 集群
  ├── EC2 实例 A运行容器 1、容器 2
  ├── EC2 实例 B运行容器 3、容器 4
  └── EC2 实例 C运行容器 5

优点

  • 可以选择特定的实例类型(比如 GPU 实例)
  • 可以使用 Spot 实例省钱
  • 对底层有完全控制

缺点

  • 需要管理 EC2 实例(打补丁、监控、扩缩容)
  • 需要规划容量(实例太少容器放不下,太多浪费钱)

模式二Fargate 启动类型(推荐新手)

AWS 帮你管理底层服务器,你只需要关心容器本身。

你的 ECS 集群
  ├── 任务 1Fargate 自动分配资源)
  ├── 任务 2Fargate 自动分配资源)
  └── 任务 3Fargate 自动分配资源)

优点

  • 不需要管理任何服务器
  • 按容器实际使用的 CPU 和内存付费
  • 自动扩展,不需要规划容量

缺点

  • 单价比 EC2 稍贵
  • 不支持 GPU
  • 对底层没有控制权

类比

  • EC2 模式 = 自己买车。要自己加油、保养、找停车位,但完全自由。
  • Fargate 模式 = 打车。不用管车的事,告诉司机去哪就行,但每公里贵一点。

任务定义详解

任务定义是一个 JSON 文件,描述容器怎么运行。关键配置项:

配置项 说明 举例
镜像 用哪个容器镜像 123456.dkr.ecr.region.amazonaws.com/my-app:v1.2
CPU 分配多少 CPU 2560.25 vCPU、512、1024、2048、4096
内存 分配多少内存 512MB、1024MB、2048MB
端口映射 容器暴露哪个端口 容器端口 8080 → 主机端口 80
环境变量 传给容器的配置 DB_HOST=mydb.xxx.rds.amazonaws.com
日志配置 日志发送到哪里 CloudWatch Logs
IAM 角色 容器有什么 AWS 权限 可以读取 S3、写入 DynamoDB

ECS 服务与负载均衡

服务的作用

ECS 服务确保你指定数量的任务始终在运行:

  • 你说"保持 3 个任务运行"
  • 某个任务挂了 → 服务自动启动新的,保持 3 个
  • 你想扩展到 5 个 → 修改服务配置,自动启动 2 个新任务
  • 发布新版本 → 服务滚动更新,逐个替换旧任务

配合 ALB 使用

用户请求 → ALB → ECS 服务(多个任务)
                    ├── 任务 1容器 A
                    ├── 任务 2容器 A
                    └── 任务 3容器 A

ALB 自动发现 ECS 服务中的任务,把流量均匀分配。任务增减时 ALB 自动更新。


ECS 自动扩展

ECS 支持根据负载自动调整任务数量:

扩展策略 触发条件 适合场景
目标追踪 CPU 使用率保持在 70% 通用场景
步进扩展 CPU > 80% 加 2 个任务 需要精细控制
定时扩展 每天 9:00 扩展到 10 个任务 可预测的流量模式

实际部署流程

一个典型的 ECS 部署流程:

1. 开发者推送代码到 Git
2. CI/CD 构建新的 Docker 镜像
3. 镜像推送到 ECR
4. 更新 ECS 任务定义(指向新镜像)
5. ECS 服务执行滚动更新:
   - 启动新版本的任务
   - 等新任务健康检查通过
   - 停止旧版本的任务
   - 重复直到所有任务都是新版本
6. 用户无感知,零停机

ECS vs EKS 怎么选

ECS EKS
管理方 AWS 自研 Kubernetes开源标准
学习曲线
灵活性 够用 非常灵活
生态系统 AWS 生态 Kubernetes 庞大生态
可移植性 锁定 AWS 可迁移到其他云
适合 中小团队、AWS 深度用户 大团队、多云策略、已有 K8s 经验

建议:如果你没有 Kubernetes 经验,从 ECS + Fargate 开始。简单够用。


今天的小测验

  1. ECS 中"集群"、"任务定义"、"任务"、"服务"分别是什么?
  2. Fargate 和 EC2 启动类型的区别是什么?什么时候选哪个?
  3. ECS 服务如何实现零停机部署?
  4. 什么情况下应该选 ECS什么情况下选 EKS

延伸阅读


明天预告

明天学习 CI/CD——持续集成与持续部署。了解如何自动化你的代码从提交到上线的整个流程让部署变得安全、快速、可重复。