第 19 章 Red Hat Quay 垃圾回收

Red Hat Quay 包括自动和持续的镜像垃圾回收。垃圾回收通过删除可占用量磁盘空间(如悬停或未标记的镜像、存储库和 Blob)的对象(包括层和清单)来有效地将资源用于活跃对象。Red Hat Quay 执行垃圾回收可减少您组织的环境中的停机时间。

19.1. 在实践中 Red Hat Quay 垃圾回收

目前,所有垃圾回收都会意外地发生,没有命令来手动运行垃圾回收。Red Hat Quay 提供跟踪不同垃圾回收 worker 状态的指标。

对于命名空间和存储库垃圾回收,会根据相应队列的大小跟踪进度。命名空间和存储库垃圾回收 worker 需要全局锁定才能正常工作。因此,出于性能原因,一次只能运行一个 worker。

注意

Red Hat Quay 在命名空间和存储库间共享 Blob,以便节省磁盘空间。例如,如果推送了相同的镜像,则仅存储该镜像的一个副本。

标签可以与已在 Red Hat Quay 中的某个位置存储的不同镜像共享其层。在这种情况下,blob 将保留在存储中,因为删除共享 Blob 会导致其他镜像不可用。

blob 过期时间独立于时间机器。如果您将标签推送到 Red Hat Quay,且时间机器被设置为 0 秒,然后您立即删除标签,垃圾回收会删除与该标签相关的标签,但不会在达到 blob 过期时间前删除 blob 存储。

垃圾回收镜像的工作方式与命名空间或仓库上的垃圾回收不同。垃圾回收工作者不会处理项目队列,而是主动搜索带有不活跃或过期标签的存储库来清理。垃圾回收 worker 的每个实例都会获得一个存储库锁定,这样可为每个存储库生成一个 worker。

注意
  • 在 Red Hat Quay 中,不活跃或过期的标签是没有标签的清单,因为最后一个标签已被删除或过期。清单存储有关如何为每个标签组成镜像并存储在数据库中的信息。当标签被删除并从 Time Machine 分配的时间时,Red Hat Quay 垃圾收集未连接到 registry 中任何其他清单的 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。例如,如果将垃圾回收设置为频繁运行,且在一小时的 span 并删除标签,则相关的 Blob 可能会立即清理。相反,假设由 PUSH_TEMP_TAG_EXPIRATION_SEC 参数指定的时间已通过,则相关的 Blob 将由同一存储库上的另一个过期标签触发。