拉取Docker镜像会增加GCP费用/降低性能/大量消耗存储空间。

3

我的主要问题始于我试图将Docker映像部署到GCP并收到错误No Space Left On Device。经过一段时间的研究,我发现我需要删除/var/lib/docker并重新拉取映像。

sudo umount /var/lib/docker/
    sudo systemctl stop docker
   sudo umount /var/lib/docker/
   sudo rm -rf /var/lib/docker/
    sudo systemctl restart  docker
    docker pull myImage
   docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v "$PWD:/rootfs/$PWD" -w="/rootfs/$PWD" docker/compose:1.26.0 up -d

当我想要清除之前的镜像/容器等时,我运行docker system prune -a,但貌似没有什么被清除。每当我想要部署另一个镜像时,同样的问题就会重复出现。
由此导致了两个严重的问题,在过去的三天里变得更加糟糕:
  1. 服务器变得极其缓慢,我收到502 Bad Gateaway(nginx,我认为是服务器停止响应)的错误消息。我收到了一条建议我提高性能的消息:This instance has had high memory utilization recently. Consider switching to the machine type: custom (1 vCPU, 6.25 GB memory)
  2. 服务器成本大幅增加。每当我部署新的镜像时,我都会被收取20-30欧元的GCP存储egress费用,这个费用不断增加。在过去的三天里,即使我没有部署任何内容,我仍然被收取这个费用。为了做个比较,我的预计服务器总成本从150欧元增加到925欧元。
我之前试图查看inode使用情况,但找不到问题所在。
我的docker镜像总大小约为400 MB,因此不应该导致磁盘满。我的机器类型是custom (1 vCPU, 4.75 GB memory),有一个10 GB标准持久磁盘。
我该如何解决这些问题?我特别关心第一个问题,但我认为第一个问题的答案也应该能够帮助解决第二个问题。
注意:我的VM在德国,因此从gcr.io拉取镜像的成本很高(它是从NA拉取的。我不知道如何从德国拉取)。
1个回答

4

在GCP中使用Docker时,建议使用GCR(Google容器注册表)。

您的502错误可能是由于容器永久健康检查导致重启问题所致。出现了无限重启循环的情况。请使用“始终拉取策略”。

您是在虚拟机上运行Docker吗?还是使用了GKE(Google Kubernetes Engine)?

无论如何,如果您决定使用GCR,您永远不必为镜像拉取付费......只要您的VM / GKE位于同一区域/地区即可。

您可以选择从另一个主机(eu.gcr.io)中拉取特定位置的镜像:

而不是使用gcr.io。
参见:https://cloud.google.com/container-registry/docs/pushing-and-pulling

您可能还需要在eu.gcr.io上重新构建它。

Google Container Registry存储在Cloud Storage Bucket中。 您可以清除Bucket,以确保其不存在。

请先检查云控制台中的存储浏览器:https://console.cloud.google.com/storage/browser?project=PROJECT_ID_HERE

Bucket应该像这样:
.artifacts.<project_id>.appspot.com

请务必首先浏览它,因为删除Bucket将清除所有工件。


是的,我忘了提到这一点,我会编辑问题。我从GCR中拉取它,但我的机器在德国,它从美国拉取图像。我不知道如何从德国拉取图像。我正在使用虚拟机,但如何找出/删除可能浪费所有资源的docker镜像的剩余部分呢? - Prethia
我修改了答案,关于如何查找存储的图像以及如何选择区域进行拉取和构建。 - Danny Ebbers
非常感谢,这两个问题都已经解决了,服务器速度也变快了,所以我接受了这个答案。为了避免将来出现这种情况,我应该定期手动删除构建产物吗?那些构建产物是造成所有资源浪费的原因吗? - Prethia
实际上,您应确保您的Docker守护程序/ Swarm或Kubernetes集群正在使用适当的服务帐户访问注册表。然后,您可以控制允许从哪个注册表拉取哪台机器。不要依赖公共GCR..因为这是一个巨大的风险...如果有人知道您的映像名称/ URL,他们可以轻松地给您造成巨额账单。 - Danny Ebbers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接