gcsfuse在GKE和/或python3 boto中安装存储桶以进行流写入?

时间:2019-01-23 20:10:32

标签: kubernetes boto bucket google-kubernetes-engine gcsfuse

我正在寻找一种将某些.mp4视频文件“写入流”的方法(因为它们是由某些python应用程序生成的)到Google云存储桶。 python应用程序已容器化并部署在GKE中,目前可以作为Web服务正常运行。但是问题在于,所有视频文件都是本地生成的,并存储在Pod内的路径(tmp/processed)中。

但是,我希望将视频文件写入Google名为my_bucket的存储桶中的文件。

我已阅读 gcsfuse 指南(https://github.com/maciekrb/gcs-fuse-sample),该指南有关如何在Kubernetes吊舱中安装存储桶,还了解了 boto https://cloud.google.com/storage/docs/boto-plugin#streaming-transfers)用于将数据流传输到存储分区。

要在my_bucket中装载tmp/processed,我已经在我的应用程序的部署文件(YAML)中添加了以下几行:

        lifecycle:
          postStart:
            exec:
              command:
              - gcsfuse
              - -o
              - nonempty
              - my_bucket
              - tmp/processed
          preStop:
            exec:
              command:
              - fusermount
              - -u
              - tmp/processed/
        securityContext:
          capabilities:
            add:
            - SYS_ADMIN

我还没有使用过boto,我想也许只是安装就足够了!但是,我的应用在尝试生成视频文件时给了我输入/输出错误

现在我的问题是,我是否需要同时使用 gcsfuse boto ,还是仅将铲斗安装到我的GKE吊舱中就足够了?我在正确安装吗?


更新:我已验证使用以下命令正确进行了挂载:

kubectl exec -it [POD_NAME] bash

1 个答案:

答案 0 :(得分:0)

问题解决了! 我只需要把水桶装在豆荚里就可以了。安装脚本(如我在上面的问题中所述)已正确完成。但是,导致input/output error的问题是由于我的GKE集群权限不足。基本上,集群没有读/写存储的权限,项目还需要其他几个权限。因此,我使用以下命令创建了一个新集群:

gcloud container clusters create [MY_CLUSTER_NAME] \
  --scopes=https://www.googleapis.com/auth/userinfo.email,cloud-platform,https://www.googleapis.com/auth/devstorage.read_write,storage-rw,trace,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/servicecontrol,compute-rw,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/taskqueue \
  --num-nodes 4 --zone "us-central1-c"

要能够从存储桶中进行读写操作,集群必须具有https://www.googleapis.com/auth/devstorage.read_write权限。

此外,无需使用 boto 并通过 gcsfuse 挂载就足以将流视频文件写入my_bucket