GitLab容器注册表:有什么方法可以自动删除旧容器?

时间:2019-03-26 15:41:16

标签: gitlab

我们有一个GitLab CI管道,该管道基于Hashicorp Vault秘密后端的外部ETCD快照构建新的Docker映像。该映像用于灾难恢复,因此我们对保留注册表中的旧版本没有任何兴趣。

有什么方法可以清除早于特定日期的GitLab注册表容器映像。还是保留最大数量的最新图像并删除其余图像?

谢谢

S

3 个答案:

答案 0 :(得分:4)

GitLab 12.8 (Feb. 2020)引入了“标签过期政策”。

GitLab 13.0 (May 2020)通过以下方式增强了该功能:

定义政策以确保绝不删除重要图像

使用GitLab的图片过期政策时,无法表达诸如“无论如何,请勿删除此标签”之类的内容。
这会给删除过程带来风险,因为可以删除应该是不变的发行或主映像。

我们很高兴在13.0版中宣布,您现在可以更新项目的过期政策,以标识您不想删除的图像。
只需启用该策略并使用正则表达式即可识别要保留的图像。

https://about.gitlab.com/images/13_0/expiration_policy_app.png

请参见documentationissue


使用GitLab 13.5(2020年10月):

容器注册表清理政策的重大改进

对标签使用清理策略从容器注册表中删除不需要的标签时,您可能已经注意到,并非总是像期望的那样删除标签。
因此,很可能您必须使用GitLab API手动delete registry tags in bulk进行干预,或者您忽略了该问题,从而增加了存储成本。

有两个可能引起问题的潜在问题。第一个问题与gitlab-#219915有关。此问题解决了一个错误,该错误在用户界面中创建的某些策略失败,因为user没有传递给DeleteTagService

此外,您可能会遇到一个问题,该问题在其中运行了策略,但仅部分完成。当策略尝试删除许多图像而超时时,会发生这种情况。如果发生这种情况,它将继续在该策略的下一次预定运行中删除代码。继续前进,您将看到一条警告,表明尚有部分运行的策略。这样,您可以决定是否要手动进行干预。

我们为此功能计划了其他几项改进,包括support for all historical projectspreview of tags that will be removed

请参见DocumentationIssue

答案 1 :(得分:1)

如果您只需要一张图片,一种直接的方法就是始终推送到registry.example.com/group/project/image:latest。这将覆盖现有的。

如果要使用提交哈希或类似标记来标记图像,则更加困难。 不幸的是,还没有办法自动清理旧图像,但这是一个非常需要的功能,请参见未解决的问题:

目前,人们已经做出了解决方法。例如

这两个都是有趣的项目,可以立即为您提供帮助。如果您可以等待,我希望GitLab在未来几个月内将实现实际的注册表清理功能。

答案 2 :(得分:0)

运行此命令:

sudo gitlab-ctl registry-garbage-collect -m