我可以从 Google Cloud Storage 工件存储桶中删除容器映像吗?

Posted

技术标签:

【中文标题】我可以从 Google Cloud Storage 工件存储桶中删除容器映像吗?【英文标题】:Can I delete container images from Google Cloud Storage artifacts bucket? 【发布时间】:2020-05-13 04:57:52 【问题描述】:

我有一个连接到 Google Cloud Storage 的 Google App Engine 应用。

我注意到存储的数据量高得不合理(4.01 GB,而应该是 100MB 左右)。

所以,我查看了每个存储桶的存储量,发现有一个名为 us.artificats. 的自动创建的存储桶占用了大部分空间。

我看了看里面,只有一个文件夹:containers/images/

根据我的谷歌搜索,这些图片似乎来自 Google Cloud Build。

我的问题是,我可以在不影响整个应用程序的情况下删除它们吗?

【问题讨论】:

仅使用控制台或 CLI gcloud container images delete 删除容器镜像。容器由层组成。您将这些层视为 Cloud Storage 中的对象。不要直接删除这些对象。简单来说,这些对象是缓存层,用于build 一个容器镜像。对于某些工具,如果一个层没有被缓存,它会首先被拉取(下载),但我没有尝试故意删除容器注册表对象来看看会发生什么。 感谢您的澄清!我使用什么作为图像名称? gcloud container images list 说没有图片... 您有多个存储库吗?使用 --repository=[HOSTNAME]/[PROJECT-ID] 存储库位置是 gcr.io、us.gcr.io、eu.gcr.io 和 asia.gcr.io。另请查看此文档:cloud.google.com/container-registry/docs/managing @EvanBaldonado 我是从我有意上传的文件的数量和大小中得知的。 【参考方案1】:

我建议不要在您的存储分区上设置生命周期规则。这可能会导致函数的后续更新中断(如Cloud Function build error - failed to get OS from config file for image 中所述)

如果您有兴趣清理容器映像,则应该删除存储在 Google Cloud Registry https://console.cloud.google.com/gcr 中的容器映像。删除 GCR 存储库上的容器映像将自动清理存储在您的 Cloud Storage 中的对象。

https://issuetracker.google.com/issues/186832976 有来自 Google Cloud Functions 工程师的相关信息。

【讨论】:

【参考方案2】:

对于那些后来看到这个的人,我最终删除了该文件夹,一切都很好。

当我再次运行 Google Cloud Build 时,它会将项目重新添加到存储桶中,我必须稍后将其删除。

正如@HarshitG 提到的,这可以通过云存储中的删除规则设置为自动发生。至于我自己,我在部署 GitHub 操作中添加了一个删除步骤。

【讨论】:

如果有和我一样的人,不知道从哪里删除这些文件,可以去console.cloud.google.com 我已经删了2次,但他总是回来,而且总是回来的比以前更多…… @lukecross 我最终将删除添加为 Github Action 中的一个步骤,以便在部署后自动删除。但是,您也可以查看 HarshitG 的答案,他使用了删除规则。 Firebase 直到今天还没有说过或发布关于这个自动存储桶的消息......她唯一说的是“Node JS 10 根据运行函数的需要带来了这个创建......”我认为这是一个对我们非常不负责任。 3天前我也删除了整个神器桶。存储量从 500 Mb 下降到 8Mb,但账单并没有减少。我仍然需要支付几美分。【参考方案3】:

我通过应用删除规则解决了这个问题。操作方法如下:

    在 Google Cloud 控制台中打开项目 打开存储管理(例如搜索“存储”)。 在浏览器选项卡中,选择容器us.artifacts...。 现在,打开 生命周期 部分。您应该会看到如下内容:

    点击添加规则并提供以下条件:
      在操作中,选择删除对象 在条件中,选择 Age 并输入例如 3 days
    点击创建确认创建

现在所有超过 3 天的对象都将被自动删除。 Google Cloud 应用此新规则可能需要几分钟时间。

【讨论】:

您能澄清一下您添加了哪些规则吗? 使用规则...比如超过 3 天...自动删除...然后它将只有最新的工件...并节省您的空间 @CalebH 这应该是正确的答案。依赖第三方工具是特定于您的用例的。 帮助!我在几天前(3 天的生命周期)设置了它,现在当我尝试通过 gcloud 命令行部署时它因 NoSuchKey 而失败。它说它正在寻找一个现在显然不存在的特定 sha256 图像文件。我应该删除整个容器映像文件夹吗? @policenauts ,您可以手动删除整个容器注册表,一旦您部署新版本,它将使用最新的工件自动创建。【参考方案4】:

这是对文档的参考。 https://cloud.google.com/appengine/docs/standard/go/testing-and-deploying-your-app#managing_build_images

构建的容器映像存储在 Container Registry 的 app-engine 文件夹中。您可以下载这些图像以保存或在其他地方运行。部署完成后,App Engine 不再需要容器映像。请注意,它们不会自动删除,因此为避免达到您的存储配额,您可以安全地删除任何不需要的图像。如需详细了解如何在 Container Registry 中管理镜像,请参阅 Container Registry 文档。

这可以通过添加像提到的@HarshitG 这样的生命周期规则来自动化。

【讨论】:

【参考方案5】:

您可以在console.cloud.google.com 上为您的生命周期规则添加触发器。

    使用工件访问存储桶(默认为“us.artifacts.yourAppName.appspot.com”) 转到“生命周期”。 点击“添加规则”。 选中“对象删除”并按“继续”。 检查过滤器删除存储桶,我选择“年龄”并选择三天作为自动删除旧元素的数量(元素有 3 天的生命后自动删除)。 点击“创建”,规则就生效了,就不用天天上门打扫桶了。

【讨论】:

【参考方案6】:

同样的问题。感谢您的更新,Caleb。

我遇到了同样的问题,但我没有运行应用程序;我只有:

Firebase 身份验证 Firestore Firebase 函数 云存储

不知道为什么我在这些容器中存储了 4GB,我不确定是否应该删除它们或者这是否会破坏我的功能。

更新: 我删除了容器文件夹,一切仍然有效。不确定这些是备份还是其他,但我在网上或文档中找不到任何东西。如果发生什么事,我会在这里发帖。云功能一运行,文件夹又多了33个文件。

【讨论】:

云函数运行后,33个文件占用了多少空间?它仍然是 4GB,还是明显减少了? 我最终删除了整个文件夹(工件存储桶),我担心我的云功能停止工作。有没有可能发生这种情况?

以上是关于我可以从 Google Cloud Storage 工件存储桶中删除容器映像吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 Google Cloud Function (Python) 将新文件写入 Google Cloud Storage 存储桶

从 Google Cloud Storage Bucket 下载文件夹

从 Google Cloud Storage 复制时排除特定文件或目录

从 Cloud Function (python) 写入 Google Cloud Storage

将文件从 Google Cloud Storage 添加到云端硬盘

将文件从 Google Cloud Storage 直接下载到 HDFS 和 Hive 表中