【问题标题】:How to mount S3 bucket on Kubernetes container/pods?如何在 Kubernetes 容器/pod 上挂载 S3 存储桶?
【发布时间】:2019-01-11 08:52:44
【问题描述】:

我正在尝试在 Amazon EKS 集群上运行我的 spark 作业。我的 Spark 作业需要在每个数据节点/worker/executor 上提供一些静态数据(参考数据),并且这些参考数据在 S3 中可用。

有人可以帮我找到一个干净且高性能的解决方案,将 S3 存储桶安装到 pod 上吗?

S3 API 是一个选项,我将它用于我的输入记录和输出结果。但是“参考数据”是静态数据,所以我不想在每次运行/执行我的 spark 作业时下载它。在第一次运行时,作业将下载数据,接下来的作业将检查数据是否已在本地可用,无需再次下载。

【问题讨论】:

  • 要完成此任务 - “我在我的 spark 作业中使用 org.apache.hadoop.fs.FileUtil.copy 将数据从 S3 复制/下载到提供的本地下载位置。这个下载位置是'K8S 本地挂载卷',因此节点上的所有 pod 将共享主机节点的目录。”我们可以使用 spark-submit 传递卷名。

标签: apache-spark amazon-s3 kubernetes fuse s3fs


【解决方案1】:

一般来说,你只是不这样做。您应该直接与 S3 API 交互以检索/存储您需要的内容(可能通过一些工具,如 aws cli)。

当您在 AWS 中运行时,您可以将 IAM 配置为您的节点可以访问在“基础设施”级别授权的特定数据,或者您可以通过 secrets/confogmaps/env 等提供 S3 访问令牌。

S3 不是一个文件系统,所以不要指望它表现得像一个文件系统(即使有 FUSE 客户端模拟 FS 以满足您的需求,这也很少是正确的解决方案)

【讨论】:

  • 感谢@Radek 的及时回复。是的,我同意 S3 API 是一个选项,我将它用于我的输入记录和输出结果。但是“参考数据”是静态数据,所以我不想在每次运行/执行我的 spark 作业时下载它。在第一次运行时,作业将下载数据,接下来的作业将检查数据是否已在本地可用,无需再次下载。
【解决方案2】:

我们最近开源了一个旨在为您自动执行此步骤的项目:https://github.com/IBM/dataset-lifecycle-framework

基本上你可以创建一个数据集:

apiVersion: com.ie.ibm.hpsys/v1alpha1
kind: Dataset
metadata:
  name: example-dataset
spec:
  local:
    type: "COS"
    accessKeyID: "iQkv3FABR0eywcEeyJAQ"
    secretAccessKey: "MIK3FPER+YQgb2ug26osxP/c8htr/05TVNJYuwmy"
    endpoint: "http://192.168.39.245:31772"
    bucket: "my-bucket-d4078283-dc35-4f12-a1a3-6f32571b0d62"
    region: "" #it can be empty

然后你会得到一个 pvc 可以安装在你的 pod 中

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-10-19
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多