【问题标题】:How to copy s3 objects into EKS pods directly如何将 s3 对象直接复制到 EKS pod
【发布时间】:2022-06-10 20:08:59
【问题描述】:

我正在开发 Kubernetes pod,并且我有一些 pod 在应用程序上运行。现在,我想在我的 pod 中复制一些文件,但这里的情况是我的文件存在于我的 s3 存储桶中。所以,我想知道一种自动化的方式,可以直接将我的 s3 文件复制到我的 pod 的文件夹目录中。我不知道该怎么做。

如果有人知道,请回复。

谢谢

【问题讨论】:

  • 节点是否有权限从s3复制文件?我认为 pod 应该具有与父节点相同的权限..
  • @Riz 这与权限问题无关。问题是我不知道如何进行这项活动。所以,如果您知道如何执行此操作,请回答。

标签: amazon-web-services kubernetes amazon-s3 amazon-eks


【解决方案1】:

有多种方法可以实现这一点,其中很少有:

  1. 使用 Kubectl(非常基本的非自动化方法):首先需要在本地下载 s3 文件并将其复制到应用程序 pod 中,可以使用 kubectl 命令行执行从主机 fs 到 pod fs 的复制操作。
kubectl cp <local-file> <pod-name>:<file-path>
  1. 使用 Init-Container(自动化):编写一个小脚本从 s3/cloud 提供程序下载文件并放入 init-container 和主容器之间的共享卷中。这样,每当您的 pod 启动时,init-container 都会在运行实际容器之前准备卷。

示例 Pod yaml:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
 - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
    volumeMounts:
    - mountPath: /tmp
      name: data
  initContainers:
 - name: init-downloader
    image: busybox:1.28
    command: ['sh', '-c', "aws s3 cp s3://xyz/ /tmp"]
    volumeMounts:
    - mountPath: /tmp
      name: data
  volumes:
 - emptyDir: {}
    name: data
  1. 使用 CrobJob(定期更新):如果需要定期大量更新数据并且不依赖于 pod 重新启动,则可以使用其他实用程序来执行此操作。
  • 在本地下载脚本并在所有 pod 上执行 kubectl 复制操作
  • 使用其他开源项目来完成,例如

示例作业 Yaml

apiVersion: batch/v1
kind: Job
metadata:
  labels:
    app: skbn
  name: skbn
spec:
  template:
    metadata:
      labels:
        app: skbn
    annotations:
      iam.amazonaws.com/role: skbn 
    spec:
      serviceAccountName: skbn
      containers:
      - name: skbn
        image: maorfr/skbn
        command: ["skbn"]
        args:
        - cp
        - --src
        - k8s://namespace/pod/container/path/to/copy/from
        - --dst
        - s3://bucket/path/to/copy/to
        env:
        - name: AWS_REGION
          value: us-east-1

可以有多种方法来实现此要求,但大多数情况下只会使用上述方法。

谢谢

【讨论】:

    【解决方案2】:

    您可以使用 init 容器cronjobs 与 AWS CLI 将文件复制到 S3 存储桶。

    要进一步添加,您还可以将 Volume mount 与 datshim 一起使用,这是一个不错的选择:

    apiVersion: com.ie.ibm.hpsys/v1alpha1
    kind: Dataset
    metadata:
      name: example-dataset
    spec:
      local:
        type: "COS"
        accessKeyID: "{AWS_ACCESS_KEY_ID}"
        secretAccessKey: "{AWS_SECRET_ACCESS_KEY}"
        endpoint: "{S3_SERVICE_URL}"
        bucket: "{BUCKET_NAME}"
        readonly: "true" #OPTIONAL, default is false  
        region: "" #OPTIONAL
    

    https://github.com/datashim-io/datashim

    如果您正在寻找与 FUSE 相关的东西,您还应该查看https://github.com/s3fs-fuse/s3fs-fuse

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 2018-04-07
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2022-10-19
      • 2022-06-15
      相关资源
      最近更新 更多