我正试图将文件从Kubernetespod复制到GCP Bucket。我可以获得我的文件的路径,但我想知道如果我想用python编程实现这一点,我该怎么做。
我用gcsfs
买水桶。如何在不使用kubectl
的情况下复制程序中的文件?
有没有通过python来实现这一点。
我需要同意@anemyte:的评论
有一个关于如何从pod中复制文件的问题。您可以下载它,然后使用您的代码将其上传到bucket。
我看到了这个问题的两种可能的解决方案:
- 使用
GCS Fuse
和Python代码将文件从Pod
复制到GCS
存储桶 - 使用Python库连接到不带
gcsfuse
的GCS存储桶
使用GCS Fuse
和Python代码将文件从Pod
复制到GCS
存储桶
假设您有一个配置了GCS Fuse
的Pod
,并且它工作正常,您可以使用以下代码片段来复制文件(在dst
中,您传递bucket的挂载目录(:
from shutil import copyfile copyfile(src, dst)
--Stackoverflow.com:问题:123198:如何复制文件
使用Python库连接到不带GCS Fuse
的GCS存储桶
正如社区成员@anemyte所指出的,您可以使用云存储客户端库以编程方式解决您的问题:
- Cloud.google.com:存储:文档:参考:库
有一个Python代码片段用于处理上传操作:
from google.cloud import storage def upload_blob(bucket_name, source_file_name, destination_blob_name): """Uploads a file to the bucket.""" # The ID of your GCS bucket # bucket_name = "your-bucket-name" # The path to your file to upload # source_file_name = "local/path/to/file" # The ID of your GCS object # destination_blob_name = "storage-object-name" storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) blob = bucket.blob(destination_blob_name) blob.upload_from_filename(source_file_name) print( "File {} uploaded to {}.".format( source_file_name, destination_blob_name ) )
请记住,您需要拥有适当的权限才能使用GCS存储桶。您可以通过以下链接阅读更多关于它的信息:
- Cloud.google.com:存储:文档上传对象:先决条件
旁注!
您还可以使用Workload Identity作为向
Pod
分配所需权限的方法之一。
其他资源:
- Github.com:Maciekrb:Gcs保险丝示例
- Cloud.google.com:存储:文档:GCS保险丝
我突然想到,您可以在Pod
的外部使用Python(就像从您的笔记本电脑上一样(来将文件从Pod
复制到GCS bucket
。我想你可以效仿这个例子:
- Github.com:Kubernetes客户端:Python:示例:Pod exec.py