在 docker 中的 clearml 代理中挂载 S3 存储桶

问题描述

在将用作 clearml 代理的 docker 映像中安装 S3 容器的最佳实践是什么?我能想到 3 种解决方案,但目前无法让任何解决方案发挥作用:

  1. 使用 prefabbed configuration in ClearML,特别是 clearml_AGENT_K8S_HOST_MOUNT。为此,S3 存储桶将使用 rclone 单独挂载在主机上,然后重新映射到 docker。这似乎只适用于 Kubernetes 而不是 Docker - 因此不起作用。
  2. 按照指定的 here 使用 s3fuse 挂载。问题是它可以与存储在 clearml 浏览器会话中的 S3 存储桶秘密一起使用吗?这似乎也很复杂,需要自定义 docker 镜像,更不用说以 --privileged 或类似方式运行 docker 镜像了。
  3. 使用 1.0 release notes 中指定的“docker_args 和 docker_bash_setup_script 参数到 Task.create()”将参数传递给 docker。这将类似于 (1),但参数将用于 bind-mounting the volume。我没有看到太多有关如何为此目的使用此新功能的文档或示例。

解决方法

我建议您查看网关后面的 Storage gateway S3,您可以使用 NFS、EFS 或 S3 存储桶。

阅读更多信息:https://aws.amazon.com/storagegateway/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc

有多种方法可以做到这一点。您也可以使用 CSI 驱动程序连接 S3。

https://github.com/ctrox/csi-s3

rclone 是一个不错的选择,如果您可以使用它,它会将数据同步到 POD 主机系统,因为如果有大文件,由于文件大小和网络延迟,可能需要一些时间。

个人建议 S3 是对象存储,因此如果您希望进行文件操作,例如写入文件或 zip 文件,根据我的个人经验,可能需要一些时间来进行操作。

请记住,s3 不是文件系统,而是对象存储 - 而 挂载是一项非常有用的功能 - 我不会利用 除了文件读取或创建之外的任何内容 - 不要尝试附加文件, 不要尝试使用文件系统技巧

如果是这种情况,我建议将 NFSSSD 用于容器。

而如果我们寻找 s3fs-fuse,它有自己的分段上传和 MD5 和本地缓存等的好处。

您可以编写自己的脚本的最简单方法,该脚本将通过 HTTP 同步到本地目录与 S3 存储桶的目录,否则 存储网关 S3 是不错的选择。

Amazon S3 文件网关提供了一种无缝连接到云的方式 为了将应用程序数据文件和备份映像存储为持久的 Amazon S3 云存储中的对象。 Amazon S3 文件网关提供 SMB 或基于 NFS 的对 Amazon S3 中数据的本地缓存访问。

,

我能够完全使用另一个选项,即在 WSL 中安装驱动器,然后将其传递给 Docker。让我们开始吧:

为什么不在 Windows 本身中托管,为什么在 WSL 中进行 rclone?

在 Windows 中的 ClearML 中安装驱动器的步骤:

  • 您可以在 WSL 中安装 rclone,并且 docker 可以访问该挂载
    • 创建文件夹 /data/my-mount(这需要在 /data 中 - 我不知道为什么,我无法通过 Google 搜索找到,但我发现了{{3 }})
    • 您可以将配置文件放在 Windows 中(使用 --config 选项)。
    • 注意:ClearML 不支持挂载路径中的空格,即使 docker 支持。因此,您的路径必须是 /data/my-mount 而不是 /data/my mount。有一个 here
  • 您可以通过调用 docker 并挂载文件来测试挂载。
    • 示例:docker run -it -v \\wsl$\Ubuntu\data:/data my-docker-image:latest ls /data/my-mount
    • 注意:您必须挂载 /data 而不是 /data/my-mount,否则您可能会收到此错误:docker: Error response from daemon: error while creating mount source path
  • 现在,您可以在 C:\Users\Myself\clearml.conf 中设置 clearml.conf 文件,以便:
default_docker: {
   # default docker image to use when running in docker mode
   image: "my-docker-image:latest"

   # optional arguments to pass to docker image
   arguments: ["-v","\\wsl$\Ubuntu\data:/data",]
}
  • 请注意,您也可以在 WSL 之外运行 clearml-agent,然后只需要指定 ["-v","/data:/data",]
  • 在 cmd 中运行 clearml 代理:clearml-agent daemon --docker