19.2. Red Hat Quay 垃圾收集实践
目前,所有垃圾回收都会发生;没有命令手动运行垃圾回收。Red Hat Quay 提供跟踪不同垃圾回收工作者状态的指标。
对于命名空间和存储库垃圾回收,将根据相应队列的大小跟踪进度。命名空间和存储库垃圾回收程序需要全局锁定才能工作。因此,由于性能原因,每次只有一个 worker 运行。
Red Hat Quay 在命名空间和存储库间共享 Blob,以节省磁盘空间。例如,如果同一镜像被推送 10 次,则仅存储该镜像的一个副本。
标签可以与已经存储在 Red Hat Quay 中的不同镜像共享其层。在这种情况下,Blob 将保留在存储中,因为删除共享 Blob 会使其他镜像不可用。
blob 过期时间独立于时间机器。如果您将标签推送到 Red Hat Quay,并且将时间机器设置为 0 秒,然后您立即删除标签,垃圾回收会删除与该标签相关的所有标签,但不会删除 blob 存储,直到达到 blob 过期时间。
收集标记的镜像的垃圾回收的方式与命名空间或存储库上的垃圾回收不同。垃圾收集工作者没有项目队列,用于标记的镜像的垃圾回收程序会主动搜索具有不活跃或过期的标签的存储库来进行清理。垃圾回收工作者的每个实例会获取一个存储库锁定,这样每个存储库都会有一个 worker。
- 在 Red Hat Quay 中,不活跃或过期的标签是没有标签的清单,因为最后的标签已被删除或过期。清单存储关于镜像如何组成并存储在各个标签的数据库中的信息。删除标签并满足 Time Machine 中分配的时间后,Red Hat Quay 垃圾回收没有连接到 registry 中任何其他清单的 Blob。如果特定的 blob 连接到清单,则该 Blob 会保留在存储中,并且只删除它与要删除的清单的连接。
- 过期的镜像将在分配的时间后消失,但仍然存储在 Red Hat Quay 中。镜像完全删除或收集的时间取决于机构的 Time Machine 设置。垃圾回收的默认时间为 14 天,除非另有指定。在此之前,标签可以指向过期或删除的镜像。
对于每种垃圾回收类型,Red Hat Quay 为每个垃圾回收器删除的每个表提供指标。下图显示了 Red Hat Quay 如何监控具有相同指标的垃圾回收的示例:
19.2.1. 测量存储回收
Red Hat Quay 没有办法跟踪通过垃圾回收释放多少空间。目前,通过检查提供的指标中删除了多少 Blob。
Red Hat Quay metrics 中的 UploadedBlob
表跟踪与存储库关联的不同 Blob。上传 blob 后,不会在由 PUSH_TEMP_TAG_EXPIRATION_SEC
参数指定的时间前收集该 blob。这是为了避免预先删除属于持续推送一部分的 Blob。例如,如果垃圾回收设置为经常运行,并在小于一小时的 span 中删除标签,那么相关的 Blob 可能无法立即清理。相反,并假设通过 PUSH_TEMP_TAG_EXPIRATION_SEC
参数指定的时间,相关的 Blob 将删除下一次在同一软件仓库上运行的垃圾回收。