将S3存储桶作为文件系统安装在AWS ECS容器上

时间:2018-08-27 14:30:25

标签: docker plugins mount s3fs aws-ecs

我正在尝试使用rexray / s3fs驱动程序将S3作为卷安装在AWS ECS docker容器上。

我能够在安装插件的本地计算机上执行此操作

$docker plugin install rexray/s3fs

并将S3存储桶安装在docker容器上。

$docker plugin ls

ID                  NAME                 DESCRIPTION                                   ENABLED

3a0e14cadc17        rexray/s3fs:latest   REX-Ray FUSE Driver for Amazon Simple Storage   true 

$docker run -ti --volume-driver=rexray/s3fs -v s3-bucket:/data img

我正在尝试在AWS ECS上复制它。

尝试遵循以下文档: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-volumes.html

如果我给Driver值,那么任务将无法运行并给出 “由于没有容器实例满足其所有要求,因此无法下达任务。”错误。

我正在使用t2.medium实例并为其提供任务要求,因此它不应是硬件要求问题。

如果我从作业定义任务中删除了驱动程序配置,则会执行该操作。

似乎我很想配置一些东西。

有人在尝试/尝试过相同的事情吗,请分享知识。

谢谢!

4 个答案:

答案 0 :(得分:1)

通过直接运行RCT_EXTERN_METHOD命令将存储桶安装到我的容器中,我已经在s3fs中工作于ECS容器中。我对rexray驱动程序不熟悉,它可能比仅使用s3fs会带来一些好处,但是对于很多用例来说,这可能会很好用,并且不需要任何s3fs编辑。

通过将容器的入口点设置为以下内容,我使操作更加顺畅:

UserData

#!/bin/bash bucket=my-bucket s3fs ${bucket} /data -o ecs echo "Mounted ${bucket} to /data" exec "$@" 选项对于承担ECS任务角色至关重要,如果您使用常规的-o ecs -o iam_role=auto将承担运行ECS代理的EC2实例的IAM角色。

注意:s3fs安装的s3fs版本较旧,截至撰写本文时,此选项不可用,这意味着您可能需要从以下位置安装apt-get install s3fs来源。

还请注意:您需要在特权模式下运行容器,才能使s3fs挂载正常工作。

答案 1 :(得分:0)

在ECS簇EC2实例需要有安装rexray驱动程序。在这个博客帖子AWS他们讨论这个问题。 https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/

  

为帮助您开始,我们已经创建了建立一个双节点集群ECS的AWS CloudFormation模板。该模板将rexray / ebs卷驱动程序引导到每个节点上,并为它们分配一个具有内联策略的IAM角色,该策略允许它们调用REX-Ray所需的API操作。

同样将适用于S3驱动

答案 2 :(得分:0)

您使用rexray / s3fs驱动程序的方法是正确的。

这些是我要在Amazon Linux 1上运行的步骤。

首先,您需要安装s3fs。

yum install -y gcc libstdc+-devel gcc-c+ fuse fuse-devel curl-devel libxml2-devel mailcap automake openssl-devel git gcc-c++
git clone https://github.com/s3fs-fuse/s3fs-fuse
cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl
make
make install

现在安装驱动程序。您可能需要在此处修改一些选项,例如使用IAM角色代替访问密钥和AWS区域。

docker plugin install rexray/s3fs:latest S3FS_REGION=ap-southeast-2 S3FS_OPTIONS="allow_other,iam_role=auto,umask=000" LIBSTORAGE_INTEGRATION_VOLUME_OPERATIONS_MOUNT_ROOTPATH=/ --grant-all-permissions

现在是重新启动ECS代理的非常重要的步骤。我也做了很好的更新。

yum update -y ecs-init
service docker restart && start ecs

您现在应该准备创建任务定义。重要的部分是您的卷配置,如下所示。

"volumes": [
  {
    "name": "name-of-your-s3-bucket",
    "host": null,
    "dockerVolumeConfiguration": {
      "autoprovision": false,
      "labels": null,
      "scope": "shared",
      "driver": "rexray/s3fs",
      "driverOpts": null
    }
  }
]

现在,您只需要在容器定义中指定安装点:

"mountPoints": [
  {
    "readOnly": null,
    "containerPath": "/where/ever/you/want",
    "sourceVolume": "name-of-your-s3-bucket"
  }
]

现在,只要您具有访问s3存储桶的适当IAM权限,容器就应该启动,并且可以继续使用s3作为卷。

如果在执行“ ATTRIBUTE”任务时出错,请仔细检查插件是否已成功安装在ec2实例上,并且ecs代理已重新启动。还要仔细检查您的驱动程序名称是“ rexray / s3fs”。

答案 3 :(得分:0)

感谢@wimnat提供指导。

关于通过LaunchConfiguration UserData在ECS集群中的EC2实例上安装rexray / s3fs插件,这就是我最终的目的(对于AMI版本amzn-ami-2018.03.o-amazon-ecs-optimized): / p>

  #install s3fs required by rexray/s3fs docker plugin
          yum install -y gcc libstdc+-devel gcc-c+ fuse fuse-devel curl-devel libxml2-devel mailcap automake openssl-devel git gcc-c++
          git clone https://github.com/s3fs-fuse/s3fs-fuse
          cd s3fs-fuse/
          ./autogen.sh
          ./configure --prefix=/usr --with-openssl
          make
          make install
          #install plugin to enable s3 volumes, using the task execution role to access s3.
          docker plugin install rexray/s3fs:0.11.1  S3FS_REGION=us-east-1 S3FS_OPTIONS="allow_other,iam_role=auto,umask=000" LIBSTORAGE_INTEGRATION_VOLUME_OPERATIONS_MOUNT_ROOTPATH=/ --grant-all-permissions

注意事项:

  1. 使用rexray / s3fs:最新的卷在执行“ docker volume ls”时显示,但是在安装卷(https://github.com/rexray/rexray/issues/1187)时出现错误。
  2. 如果使用版本化的rexray / s3fs,则在定义安装时需要在驱动程序名称中包含该版本,即Driver: 'rexray/s3fs:0.11.1'
  3. 要检查容器实例是否具有必需的属性,可以使用aws-cli:aws ecs list-attributes --cluster my-cluster --target-type container-instance --profile myprofile --attribute-name ecs。 capability.docker-plugin.rexray / s3fs.0.11.1
  4. 似乎在完成UserData脚本后,ecs代理会启动,因此无需重新启动代理或等待代理启动。
    1. 该安装适用于启用了默认加密(AES256)的存储桶。如果您使用自己的kmskey加密存储桶,则需要提供正确的s3fs选项来处理加密/解密。我还没有尝试过。