【问题标题】:ECS doesn't have enough free data blocks for docker image. How to provision enough volume/storage?ECS 没有足够的空闲数据块用于 docker 镜像。如何提供足够的卷/存储?
【发布时间】:2021-10-02 09:56:15
【问题描述】:

我使用 terraform 管理我们的 ECS 任务,一切都很好,但最近,当任务尝试从 ECR 获取图像时,我遇到了这个错误:

CannotPullContainerError: failed to register layer: devmapper: Thin Pool has 4143 free data blocks which is less than minimum required 4449 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

我对要更新的内容有点困惑。我们的 ECS 服务使用 EC2 启动类型,但我认为我对这里发生的事情有一个根本的误解。阅读 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/CannotCreateContainerError.html 似乎是因为体积太小,但 AWS 帮助页面建议 docker prune。这让我感到困惑,因为我的理解是 ECS 任务每次都可以访问整个卷作为新的开始——为什么卷上会有陈旧的图像/容器?还是该页面只是建议在您的 ECS 任务可能获取过多图像的情况下,您应该删除过时的图像。

除此之外,我不确定如何继续。会在此处增加aws_ecs_task_definition 帮助中的ephemeral_storage,还是我需要管理我自己的卷,该卷附加到aws_launch_template 实例,该实例与aws_autoscaling_group 相关联,而aws_autoscaling_group 与相关aws_ecs_service 相关联

【问题讨论】:

  • 后者,aws_launch_template。我不知道现在情况如何,但 ECS 过去常常不清除以前任务中的缓存图像
  • “据我了解,ECS 任务每次都可以访问整个卷作为新的开始” 每个 ECS 任务部署都不会触发创建新的 EC2 实例。因此,在多次部署 ECS 任务后,EC2 实例可能会由于 Docker 映像缓存而耗尽磁盘空间。您可以切换到 Fargate 以消除此问题。
  • 说得通——非常感谢您的帮助!我添加了一个扩展的音量,尽管我认为这是一个便宜的解决方法。不幸的是,由于特定的 ec2 实例要求,我无法使用 fargate

标签: amazon-web-services terraform amazon-ecs


【解决方案1】:

只需将此块添加到我的aws_launch_template

resource "aws_launch_template" "instance" {
  ...
  block_device_mappings {
    device_name = "/dev/xvdcz"

    ebs {
      volume_size           = 50
      delete_on_termination = true
    }
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2017-05-02
    相关资源
    最近更新 更多