第 20 章 Red Hat Quay 垃圾回收
Red Hat Quay 包括自动和持续镜像垃圾回收。垃圾回收通过删除占用大量磁盘空间的对象(如危险或未标记的镜像、存储库和 Blob)来确保有效地将资源用于活跃对象,包括层和清单。Red Hat Quay 执行的垃圾回收可以减少机构的环境中的停机时间。
20.1. 实践中的 Red Hat Quay 垃圾回收
目前,所有垃圾回收都会发生,且没有手动运行垃圾回收的命令。Red Hat Quay 提供跟踪不同垃圾回收 worker 的状态的指标。
对于命名空间和存储库垃圾回收,会根据对应队列的大小跟踪进度。命名空间和存储库垃圾回收工作需要全局锁定。因此,出于性能方面的原因,一次只运行一个 worker。
Red Hat Quay 在命名空间和存储库间共享 Blob,以节省磁盘空间。例如,如果推送了同一镜像 10 次,则仅存储该镜像的一个副本。
标签可以与已在 Red Hat Quay 中存储的不同镜像共享其层。在这种情况下,Blob 将保留在存储中,因为删除共享 Blob 会使其他镜像不可用。
blob expiration 独立于时间机器。如果您将标签推送到 Red Hat Quay,且时间机器被设置为 0 秒,然后您立即删除标签,垃圾回收会删除与该标签相关的标签以及与该标签相关的所有内容,但不会删除 blob 存储,直到达到 blob 过期时间为止。
垃圾回收标记的镜像的工作方式与命名空间或存储库上的垃圾回收不同。垃圾回收 worker 没有需要处理的项目队列,而是会主动搜索带有不活跃或过期标签的存储库进行清理。每个垃圾回收 worker 实例都会获取存储库锁定,这会导致每个存储库有一个 worker。
- 在 Red Hat Quay 中,不活跃或过期的标签是没有标签的清单,因为最后一个标签已被删除或它已过期。清单存储有关如何组成镜像的信息,并存储在每个单独标签的数据库中。当一个标签被删除且从时间 机器 分配的时间被满足时,Red Hat Quay 垃圾回收没有连接到 registry 中任何其他清单的 Blob。如果特定 Blob 连接到清单,则存储中只会保留与要删除的清单的连接。
- 过期的镜像将在分配的时间后消失,但仍然存储在 Red Hat Quay 中。镜像被完全删除或收集的时间取决于您的机构的 Time Machine 设置。垃圾回收的默认时间为 14 天,除非另有指定。在此之前,标签可以指向已过期或删除的镜像。
对于每种垃圾回收,Red Hat Quay 提供了每个垃圾回收 worker 删除的每个表的行数的指标。下图显示了 Red Hat Quay 如何使用同一指标监控垃圾回收的示例:
20.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 将移除下一个时间收集,由同一存储库上的其他过期标签触发。