【问题标题】:Use an existing EBS volume with the Docker REX-Ray plugin on ECS将现有 EBS 卷与 ECS 上的 Docker REX-Ray 插件一起使用
【发布时间】:2020-11-01 14:54:27
【问题描述】:

我正在使用 Terraform 创建 ECS 集群、任务定义和服务。

对于任务定义,这段代码如下所示:

resource "aws_ecs_task_definition" "postgres" {
  container_definitions    = ...
  family                   = "Postgres"
  requires_compatibilities = ["EC2"]
  network_mode             = "bridge"

  volume {
    name = "PreCreatedEBSVolume"

    docker_volume_configuration {
      scope         = "task"
      autoprovision = false
      driver        = "rexray/ebs"
    }
  }
}

我专门将autoprovision 设置为false 以确保创建新卷。但是,当服务运行时,会创建一个 16GiB 的新卷(我假设这是默认大小)并使用而不是使用“PreCreatedEBSVolume”。

我检查了实例中的docker volume ls,果然,我看到了列出的 EBS 卷。如果我运行一个安装了这个卷的新实例,它会按预期安装。

有没有办法让 REX-Ray 使用现有的块存储?

【问题讨论】:

  • 如何让 rexray 使用现有的卷?我尝试了几件事,从将卷 ID 到卷的名称标签放入 name,但都没有奏效

标签: amazon-web-services docker amazon-ecs amazon-ebs rexray


【解决方案1】:

我发现了问题。

问题在于“范围”属性。文档有以下说法:

决定其生命周期的 Docker 卷的范围。任务范围内的 Docker 卷在任务启动时自动配置,并在任务停止时销毁。范围为共享的 Docker 卷在任务停止后仍然存在。

所以,我只需要将其从“任务”更改为“共享”,以使其使用现有的 EBS 卷。

【讨论】:

  • 能否请您分享您的配置,因为这对我不起作用。如何指定现有的 EBS 卷?我尝试了 volumeID 以及将 docker 卷命名为与 EBS 卷的名称标签相同的名称。都没有用。
  • 我有同样的问题。`错误:没有这样的卷`
【解决方案2】:

rexray/ebs 的问题是它仅在与实例位于同一 AZ 时才选择现有的 EBS 卷。因此,在我们的案例中,我们需要将特定实例固定到特定 AZ 才能正确使用此驱动程序。

我们的设置是在 3 个不同的 AZ 中设置 6 个实例以提高可用性,并且每个实例都有自己的 EBS,但在实例重新启动后,它会进入随机 AZ,并且它是 3 个中有 2 个找不到卷。系统日志中的错误消息不是很丰富。

除此之外,该插件会做它应该做的。

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 2021-01-14
    • 2020-12-19
    • 2019-07-28
    • 2016-10-31
    • 2021-11-18
    • 2020-09-10
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多