GCP 容器注册表建立在 GCP 云存储之上,人们可以在那里设置相当复杂的保留策略。
但是,容器注册表中没有这样的功能,并且由于存储中的图像之间没有区分(所有图像文件名都是 sha-hashes,并位于同一个存储桶中的同一个目录中),因此无法设置策略来仅保留单个图像的最后五个版本。
是否有人知道是否可以在 GCP 中为图像设置更复杂的保留策略以及应该如何做?
答案1
目前似乎没有办法向 Container Registry 添加保留策略。不过,可以使用 gcloud 自动删除多余的图像。这是我编写的一个可以用作 cronjob 的脚本:它会遍历图像并删除除五个最新版本之外的所有图像。
#!/bin/bash
for image_name in $(gcloud container images list); do
for digest in $(gcloud container images list-tags $image_name --format=json | awk '/digest/{ print $2 }' | sed -e 's/^"//' -e 's/.\{2\}$//' | tail -n +6); do
gcloud container images -q delete $image_name@$digest;
done;
done;
可以通过修改 -n 选项来更改保留的图像数量tail
,该选项的值为 +(N+1),N 表示想要保留的图像数量。
稍后我将提供 Kubernetes CronJob 规范。
编辑:这是我制作的工具https://bitbucket.org/Fleuri/containerretention.请随意使用!