如何在部署到Google容器引擎的容器中使用Google云端存储?

时间:2016-08-31 21:01:09

标签: google-cloud-storage google-kubernetes-engine

背景

我有一个在tomcat中运行的Java-Servlet应用程序,它运行在一个Docker容器中,该容器在Google容器引擎上运行。扩展docker镜像以便它还可以获取和刷新证书(每个域只有一个pod,因此不需要进行pod之间的通信)。但是,certbot需要在某处保存它的凭据和证书,并且pod的文件系统似乎是一个坏主意,因为它是短暂的,并且无法在pod重启后继续存在。根据{{​​3}}。谷歌云存储似乎是一个好主意,因为它非常便宜,音量自动调整,我也可以从多个位置访问它(我不需要为每个单独的pod创建一个磁盘,这个磁盘几乎是空的)包括web-UI(后者可能对调试很有用),throuput和延迟对于这个用例来说真的没问题。

问题

我创建了一个存储桶,现在我想从容器中访问该存储桶。 Google描述table with storage options,然后又here我可以使用FUSE挂载数据桶。他们没有提到的是你需要让容器特权使用FUSE,这对我来说并不合适。此外,我需要安装整个谷歌云SDK并设置身份验证(我将存储...在哪里?)。但实际上我并不需要保险丝访问。只需在启动时下载配置并在每次刷新后上传配置即可。所以与SCP类似的东西会...... ...

gcloud可以从命令行访问文件而无需FUSE,但仍需要以凭证以某种方式初始化。

here user326502提及

  

如果安装了App Engine SDK,则无法使用零配置[..]只要容器位于Google Compute Engine实例上,您就可以访问同一项目中的任何存储桶。

他进一步解释说,当我使用该库时,我神奇地不需要任何凭据。我想我可以用这些库编写我自己的复制应用程序,但感觉事实是我没有从网上的任何人那里找到这样的东西让我觉得我完全走错了轨道。

那么如何从容器中实际访问谷歌云存储桶(尽可能简单)?

1 个答案:

答案 0 :(得分:5)

当容器启动时,您可以使用gsutil从存储桶复制到本地磁盘。

如果您在Google容器引擎中运行,gsutil将使用群集节点的服务帐户(为此,您在创建群集时需要specify the storage-ro scope)。

或者,您可以创建new service account,生成JSON密钥。在Container Engine中,您可以将该密钥存储为Kubernetes secret,然后将密钥挂载到需要使用它的窗格中。在该广告连播中,您可以通过调用gcloud auth activate-service-account gsutil

来配置--key-file /path/to/my/mounted/secret-key.json以使用服务帐户