CPU/Memory 包含 1 个以上容器的任务的设置

CPU/Memory setting for Task with more than 1 container

如果我在 Fargate 上创建一个任务 运行 超过 1 个容器。 忽略每个容器应该被拆分到它的任务中的事实。 例如地形代码:

resource "aws_ecs_task_definition" "citi" {
  family                = "myfamily"
  execution_role_arn    = data.aws_iam_role.this.arn
  container_definitions = <<EOF
  [
    {
      "name": "myapp1",
      "image": "myapp1image",
      "portMappings": [
        {
          "containerPort": 10001
        }
      ]
    },
    {
      "name": "myapp2",
      "image": "myapp2image",
      "portMappings": [
        {
          "containerPort": 10004
        }
      ]
    }
  ]
  EOF
  cpu                      = 512
  memory                   = 1024
  requires_compatibilities = ["FARGATE"]
  network_mode             = "awsvpc"
}

注意:未指定 cpu 和容器中的内存。

  1. 每个容器是否应指定其 cpu/memory 值作为最佳实践?
  2. 如果不是如上例,cpu/memory 是如何分配给每个容器的? 他们得到一半的整体吗?容器1得到cpu256,内存512 或其他东西,例如如果 Container 1 忙而 Container 2 不忙,Container1 最 任务资源
  3. 如果每个容器都将 essential 的默认值设置为 true,这是否意味着容器 1 停止,任务将停止,因此容器 2 停止?

短篇小说: 1-这取决于用例。如果你想为简单性而优化,你可以避免这种情况,并且两个以上的容器将在任务中争夺资源。如果你想优化控制,你应该配置它。 2- 是的(有点)。他们基本上是要争夺所有 cpu/memory 的资源,权重相等。 3- 是

长话短说:https://aws.amazon.com/blogs/containers/how-amazon-ecs-manages-cpu-and-memory-resources/