第 19 章 Red Hat Quay 垃圾回收

Red Hat Quay 包括自动和持续镜像垃圾回收。垃圾回收通过删除 occupy sizeable 磁盘空间(如 danging 或 untagged 镜像、存储库和 blob)来有效地为活跃对象使用资源,包括层和清单。Red Hat Quay 执行的垃圾回收可以缩短您组织的环境中的停机时间。

19.1. 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 不使用项目,而是会主动搜索带有不活跃或过期标签的存储库进行清理。每个垃圾回收 worker 实例都会获取一个存储库锁定,这会导致每个存储库有一个 worker。

注意
  • 在 Red Hat Quay 中,不活跃或过期的标签是没有标签的清单,因为最后的标签已被删除或过期。清单存储关于镜像如何组成并存储在各个标签的数据库中的信息。删除标签并满足 Time Machine 中分配的时间后,Red Hat Quay 垃圾回收没有连接到 registry 中任何其他清单的 Blob。如果特定的 blob 连接到清单,则该 Blob 会保留在存储中,并且只删除它与要删除的清单的连接。
  • 过期的镜像将在分配的时间后消失,但仍然存储在 Red Hat Quay 中。镜像完全删除或收集的时间取决于机构的 Time Machine 设置。垃圾回收的默认时间为 14 天,除非另有指定。在此之前,标签可以指向过期或删除的镜像。

对于每种垃圾回收类型,Red Hat Quay 提供了每个垃圾回收 worker 所删除的每个表的行数的指标。下图显示了 Red Hat Quay 如何监控具有相同指标的垃圾回收示例:

Garbage collection metrics

19.1.1. 测量存储重新声明

Red Hat Quay 没有办法跟踪通过垃圾回收来释放的空间量。目前,这是通过检查提供的指标中已删除多少 Blob 的最佳指示。

注意

Red Hat Quay 指标中的 UploadedBlob 表跟踪与存储库关联的各种 Blob。上传 blob 时,它不会在由 PUSH_TEMP_TAG_EXPIRATION_SEC 参数指定的时间之前收集它。这是为了避免预先删除作为持续推送一部分的 blob。例如,如果垃圾回收会频繁运行,且在小于一小时的范围内删除标签,那么相关的 Blob 无法立即清理。相反,假设由 PUSH_TEMP_TAG_EXPIRATION_SEC 参数指定的时间已被传递,则相关的 Blob 将删除下一个在同一仓库上运行的垃圾回收。