我正在寻找一种将某些.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
答案 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
。