如何在 Amazon ECS 中为任务分配内存?

上次更新日期:2022 年 10 月 11 日

我想使用 Amazon Elastic Container Service(Amazon ECS)为任务分配内存。

简短描述

在 Amazon ECS 中,可以在任务级别和每个容器级别定义内存。在任务级别定义的内存是任务的内存硬限制。在容器级别,存在两个用于向任务分配内存的参数:memoryReservation(软限制)和 memory(硬限制)。对于托管在 Amazon EC2 实例上的任务,任务级内存字段是可选的,并且可以使用任何值。如果指定了任务级别内存值,则容器级别内存值是可选的。在任务运行时,从 Amazon ECS 容器实例的可用内存单位中减去各个参数的值。根据软限制、硬限制或任务定义的任务级别内存进行计算。有关更多信息,请参阅集群预留


注:memorymemoryReservation 参数被设置为 Amazon ECS 任务定义的容器定义参数。如果您为容器级别的 memorymemoryReservation 分别指定一个值,那么 memory 必须大于 memoryReservation。如果您指定 memoryReservation,则将从容器所在容器实例的可用内存资源减去该值。否则,使用 memory 的值。如需更多信息,见内存

解决方案

在开始之前,请检查以确认您有包括 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 Amazon ECS 集群。有关创建集群的更多信息,请参阅使用经典控制台创建集群。有关配置集群和容器实例的更多信息,请参阅容器实例内存管理

查看容器实例的内存分配

  1. 打开 Amazon ECS 控制台
  2. 在导航窗格中,选择 Clusters (集群)
  3. 选择由您创建的集群。
  4. 选择 ECS 实例视图,然后选择您从容器实例列创建的集群所包含的容器实例。
    注:详细信息窗格显示可用列的内存等于已注册列的内存。
  5. 如需实例的资源使用情况的统计信息,请使用 SSH 连接到实例,然后运行 docker stats 命令。

创建具有软限制的任务定义

  1. Amazon ECS 控制台,在导航窗格中选择 Task Definitions(任务定义)。
  2. 选择创建新的任务定义
  3. 针对启动类型,选择 EC2,然后选择下一步
  4. 任务定义名称输入一个名称。
  5. 容器定义部分,选择添加容器
  6. 容器名称输入一个名称。
  7. 针对映像,输入 nginx 或您的环境的适当 Docker 映像。
  8. 针对内存限制 (MiB),选择软限制,然后输入 700
  9. 选择 Add(添加),然后选择 Create(创建)。

运行具有软限制的任务定义

  1. Amazon ECS 控制台,在导航窗格中,选择 Clusters(集群),然后选择要创建的集群。
  2. 选择 Tasks(任务)视图,然后选择 Run new Task(运行新任务)。
  3. 为“Launch Type”(启动类型)选择 EC2,选择您使用软限制创建的任务定义,然后选择 Run Task(运行任务)。注意:如果您是首次使用 ECS,则可以使用任务定义的名称和您先前创建的集群预填充 Task Definition(任务定义)和 Cluster(集群)。
  4. 当具有软限制的任务的 Last status(最新状态)列显示为 RUNNING(正在运行)时,移至下一个步骤。
    注意:要将任务的状态更新为 RUNNING(正在运行),请刷新页面。
  5. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:详细信息窗格显示可用列的内存小于已注册列的内存。
  6. 如需实例的资源使用情况的统计信息,请使用 SSH 连接到实例,然后运行 docker stats 命令。
  7. 选择导航窗格中的集群,然后选择该集群。
  8. 选择任务视图,选择使用软限制的任务,然后选择停止
  9. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:Details(详细信息)窗格显示 Available(可用)列的内存等于 Registered(已注册)列的内存。

创建使用硬限制的新任务定义修订

  1. Amazon ECS 控制台,在导航窗格中选择 Task Definitions(任务定义)。
  2. 选择您创建的使用软限制的任务定义,然后选择创建新修订
  3. 容器定义部分的容器名称列,选择您为使用软限制的任务定义添加的容器。
  4. 针对内存限制 (MiB),选择硬限制,然后输入 1000
  5. 选择 Update(创建),然后选择 Create(创建)。

运行具有硬限制的修订后任务定义

  1. Amazon ECS 控制台,在导航窗格中,选择 Clusters(集群),然后选择要创建的集群。
  2. 选择 Tasks(任务)视图,然后选择 Run new Task(运行新任务)。
  3. 将 Launch Type“启动类型”选为 EC2
  4. 针对 Task Definition(任务定义),选择您创建的使用硬限制的任务定义,然后选择 Run Task(运行任务)。
  5. 当具有硬限制的修订任务的 Last status(最新状态)列显示为 RUNNING(正在运行)时,请移至下一个步骤。
    注意:要将任务的状态更新为 RUNNING(正在运行),请刷新页面。
  6. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:Details(详细信息)窗格显示 Available(可用)列的内存小于 Registered(已注册)列的内存。
  7. 如需实例的资源使用情况的统计信息,请使用 SSH 连接到实例,然后运行 docker stats 命令。
  8. 选择导航窗格中的集群,然后选择该集群。
  9. 选择任务视图,选择使用硬限制的任务,然后选择停止
  10. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:Details(详细信息)窗格显示 Available(可用)列的内存等于 Registered(已注册)列的内存。

创建同时使用软限制和硬限制的新任务定义修订

  1. Amazon ECS 控制台,在导航窗格中选择 Task Definitions(任务定义)。
  2. 选择您创建的使用硬限制的任务定义,然后选择创建新修订
  3. 容器定义部分的容器名称列,选择您为使用硬限制的任务定义添加的容器。
  4. 针对内存限制 (MiB),选择软限制,然后输入 700
  5. 选择添加硬限制,然后输入 1200
  6. 选择 Update(创建),然后选择 Create(创建)。

运行具有软限制和硬限制的修订后任务定义

  1. Amazon ECS 控制台,在导航窗格中,选择 Clusters(集群),然后选择要创建的集群。
  2. 选择 Tasks(任务)视图,然后选择 Run new Task(运行新任务)。
  3. 将 Launch Type“启动类型”选为 EC2
  4. 对于 Task Definition(任务定义),选择您创建的具有软限制和硬限制的任务定义,然后选择 Run Task(运行任务)。
  5. 当任务的 Last status(最新状态)列显示为 RUNNING(正在运行)时,请移至下一个步骤。
    注意:要将任务的状态更新为 RUNNING(正在运行),请刷新页面。
  6. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:详细信息窗格显示可用列的内存小于已注册列的内存。
  7. 如需实例的资源使用情况的统计信息,请使用 SSH 连接到实例,然后运行 docker stats 命令。
  8. 选择导航窗格中的 Clusters(集群),然后选择该集群。
  9. 选择任务视图,选择同时使用软限制金额硬限制的任务,然后选择停止
  10. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:Details(详细信息)窗格显示 Available(可用)列的内存等于 Registered(已注册)列的内存。

使用任务级别内存限制创建任务定义的新修订版

  1. Amazon ECS 控制台,在导航窗格中选择 Task Definitions(任务定义)。
  2. 选择您使用硬限制和软限制创建的任务定义,然后选择 Create new revision创(建新修订)。
  3. Task Size(任务大小)部分,在 Task memory (MiB)(任务内存(MiB))中输入 1000
  4. Container Definitions(容器定义)部分的 Container Name(容器名称)列,选择您为使用硬限制和软限制的任务定义添加的容器。
  5. 对于 Memory Limits (MiB)(内存限制 (MiB)),请删除 Soft limit(软限制),方法是选中右侧的 x 图标。
  6. 接下来,对于 Hard limit(硬限制),删除值 1200,方法是选中并删除此值。
  7. 选择 Update(创建),然后选择 Create(创建)。

使用任务级别内存限制运行修订的任务定义

  1. Amazon ECS 控制台,在导航窗格中,选择 Clusters(集群),然后选择要创建的集群。
  2. 选择 Tasks(任务)视图,然后选择 Run new Task(运行新任务)。
  3. Launch Type(启动类型)选为 EC2
  4. 对于 Task Definition(任务定义),选择您使用任务级别内存创建的任务定义,然后选择 Run Task(运行任务)。
  5. 当任务的 Last status(最新状态)列显示为 RUNNING(正在运行)时,请移至下一个步骤。
    注意:要将任务的状态更新为 RUNNING(正在运行),请刷新页面。
  6. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:详细信息窗格显示可用列的内存小于已注册列的内存。
  7. 如需实例的资源使用情况的统计信息,请使用 SSH 连接到实例,然后运行 docker stats 命令。
    注意:您可能会发现 docker stats 命令显示的容器内存限制可能不是 1000 MiB。这是因为 Task Level memory(任务级别内存)是由 ECS 代理而不是 Docker 进程守护程序托管。
  8. 选择导航窗格中的 Clusters(集群),然后选择该集群。
  9. 选择 Tasks(任务)视图,选择使用任务级别定义的任务,然后选择 Stop(停止)。
  10. 选择 ECS Instances(ECS 实例)视图,然后从 Container Instance(容器实例)列选择实例。
    注:Details(详细信息)窗格显示 Available(可用)列的内存等于 Registered(已注册)列的内存。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?