Published on

AWS ECS Intro

Authors
  • avatar
    Name
    Guming
    Twitter

介绍

Amazon ECS 中有三个层次

  • Capacity 容器运行的底层基础设施(EC2/Fargate/On-premises vm)
  • Controller 部署和管理在容器上运行的应用程序
  • Provisioning 指工具,与调度器交互,以部署和管理您的应用程序和容器

本地图片1

ECS Application lifecycle

本地图片1

  1. 生成docker image,放置ECR
  2. 定义Task, 它是一个 JSON 格式的文本文件,描述了构成您应用程序的参数和一个或多个容器,可以使用它来指定操作系统image和参数、要使用的容器、为应用程序打开的端口以及任务中容器使用的数据卷等
  3. 应用部署服务至集群
  4. ECS Service, 使用 Amazon ECS 服务在 Amazon ECS 集群中同时运行并维护所需数量的任务。其工作原理是,如果任务失败或停止,Amazon ECS 服务调度器将根据任务定义启动另一个实例来替换它,从而保持服务中所需任务数量
  5. Container agent

本地图片1

6.部署任务或服务后,您可以使用以下任何工具来监控:

  • CloudWatch
  • Runtime Monitoring

规划

  • Capacity

    • 创建集群时,您指定基础设施(称为集群默认基础设施)。在注册任务定义时,指定基础设施类型(任务定义基础设施级别,如果未指定,则使用集群默认基础设施)
    • Fargate类型 无服务器、按使用付费的计算引擎
      • 适合需要减少ops成本的场景
      • 批量任务场景
      • 偶尔出现突发流量的场景
      • 小型任务 本地图片1
    • EC2 启动类型适用于需要价格优化的较大工作负载
      • 可以将容器与弹性负载均衡负载均衡器关联起来
    • On-premises
      • Amazon ECS Anywhere 支持将外部实例(如本地服务器或虚拟机)注册到您的 Amazon ECS 集群中。外部实例针对运行产生出站流量或处理数据的应用程序进行了优化。如果您的应用程序需要入站流量,由于缺乏弹性负载均衡支持,运行这些工作负载的效率会降低。Amazon ECS 添加了一种新的 EXTERNAL 启动类型,您可以使用它在外部实例上创建服务或运行任务 本地图片1
  • Networking

    • ECS部署在private subnet

    • Internet to ECS

      • ALB/NLB
        • public subnet
      • API Gateway
        • 通过vpc link ,将流量转发到ecs
    • ECS to VPC

      • NAT gateway (public subset) - 其实前面还有一个Internet gateway
        • NAT 网关对通过它的每 GB 数据收费
        • 无法限制 NAT 网关可以与之通信的目的地。也无法限制后端与目的地的通讯
      • PrivateLink
        • AWS PrivateLink 在子网内部提供弹性网络接口(ENI),并使用 VPC 路由规则将任何通信通过 ENI, 直接到达目标 AWS 服务。这种流量不再需要使用 NAT 网关或互联网网关
    • VPC to ECS

      • Service Connect
        • 它为服务发现、连接和流量监控提供 Amazon ECS 配置。使用服务连接,应用程序可以通过短名称和标准端口连接到同一集群中的服务、其他集群,甚至跨同一区域内的 VPC 本地图片1
      • AWS Cloud Map 本地图片1
      • LB -服务间通信的另一种方法是使用内部负载均衡器。内部负载均衡器完全存在于你的 VPC 内部,并且只能被 VPC 内部的服务访问 本地图片1

Monitoring

资源监控

如果使用 Fargate launch type来运行服务,提供 CPU 和内存利用率指标,以帮助监控服务

对于 Amazon EC2 工作方式,首先监控ec2 instace ,紧接着在集群、服务和任务级别,提供 CPU 、内存预留 和利用率指标

总结下,监控的基准base:

  • Amazon ECS 集群的 CPU 和内存预留及使用指标
  • Amazon ECS 服务的 CPU 和内存使用指标
  • Amazon ECS 任务级别的监控

监控工具和告警

Amazon CloudWatch alarms - 指定时间范围内的单个指标,并根据指标值相对于给定阈值在多个时间范围内的变化执行一个或多个操作。该操作是发送到 Amazon 简单通知服务 (Amazon SNS) 主题或 Amazon EC2 自动扩展策略的通知。

Amazon CloudWatch Logs - Application logs

Amazon CloudWatch Events - 匹配事件并将它们路由到一个或多个目标函数或流,以进行更改、捕获状态信息并采取纠正措施

Container Insights - 使用 Container Insights 监控 Amazon ECS 容器

Runtime Monitoring - GuardDuty 运行时监控使用 GuardDuty 安全代理,为单个 Amazon ECS 工作负载添加运行时可见性,例如文件访问、进程执行和网络连接

使用 EventBridge 自动响应 Amazon ECS 错误

使用 Container Insights 监控 Amazon ECS 容器,以增强可观察性

使用容器健康检查确定 Amazon ECS 任务健康

当任务定义中定义了健康检查时,容器会在容器内部运行健康检查进程,然后根据退出代码评估应用程序的健康状况

按顺序评估以下规则:

如果一个关键容器的状态是 UNHEALTHY ,那么任务状态是 UNHEALTHY

如果一个关键容器的状态是 UNKNOWN ,那么任务状态是 UNKNOWN

如果所有关键容器的状态都是 HEALTHY ,那么任务状态是 HEALTHY

使用 ECS Exec 监控 Amazon ECS 容器

ECS clusters

Amazon ECS 集群是任务或服务的逻辑分组。除了任务和服务外,集群还包含以下资源:

基础设施容量提供者 您的工作负载和服务的网络(VPC 和子网) 一个可选的命名空间:命名空间用于通过 Service Connect 进行服务间通信。