创建标签保留规则

一个仓库会迅速积累大量的制品,其中许多制品在给定时间后或被后续制品构建取代后可能不再需要。这些多余的制品显然会占用大量的存储容量。作为 Harbor 系统管理员,您可以定义规则来管理要保留给定仓库的多少制品,或保留某些制品多长时间。

标签保留规则的工作原理

您可以在项目上定义标签保留规则,并可以指定要将其应用到哪些仓库。这允许在定义保留规则时具有更高的粒度。顾名思义,当您为仓库定义保留规则时,您是在标识要保留哪些标签。您没有定义显式删除标签的规则。相反,当您设置规则时,仓库中任何未被标识为符合保留条件的标签都将被丢弃。规则之间使用 OR 算法。

标签保留规则有 3 个过滤器,它们按顺序应用,如下表所述。

顺序 过滤器 描述
第一 仓库或多个仓库 标识要应用规则的标签。您可以标识具有特定名称或名称片段或不具有该名称或名称片段的仓库。允许使用通配符(例如 *reporepo***)。仓库过滤器首先应用,以标记要应用保留规则的仓库。已标识的仓库被指定用于基于标签标准的进一步匹配。在此阶段,不对未指定的仓库采取任何操作。
第二 要保留的数量 通过指定最大标签数量或指定保留标签的最长期限来设置要保留哪些标签。
第三 要保留的标签 标识要应用规则的标签。您可以标识具有特定名称或名称片段或不具有该名称或名称片段的标签。允许使用通配符(例如 *tagtag***)。使用复选框选择是否应将未标记的制品捕获为符合标签保留条件的制品集的一部分。

有关如何应用 ** 通配符的信息,请参阅 https://github.com/bmatcuk/doublestar#patterns

示例 1

  • 在一个项目中,您有 5 个仓库,仓库 A 到 E。
    • 仓库 A 有 102 个制品,其中 2 个未标记,所有制品都在最近一周内被拉取过。
    • 仓库 B 到 E 各有 7 个制品,其中 1 个未标记制品,所有制品都未在最近一个月内被拉取过。
  • 您将仓库过滤器设置为 **,这意味着项目中包含所有仓库。
  • 您将保留策略设置为保留每个仓库中最近拉取的 10 个制品。
  • 您将标签过滤器设置为 **,保持“未标记的制品”未选中,这意味着包含仓库中至少一个标签的所有制品。

在此示例中,规则保留了仓库 A 中最近拉取的 10 个已标记制品,以及仓库 B 到 E 这 4 个仓库中每个仓库的 6 个制品。因此,项目中总共保留了 34 个制品。换句话说,该规则不会将仓库 A 到 E 中的所有制品视为一个单独的池,从中选择最近的 10 个制品。因此,即使仓库 A 中第 11 到 100 个标签的拉取时间比仓库 B 到 E 中的任何标签都晚,仓库 B 到 E 中的所有已标记制品仍会被保留,因为这些仓库中的每一个仓库都少于 10 个标签,并且所有未标记的制品都将被删除。

示例 2

此示例使用与示例 1 相同的项目和仓库,但将保留策略设置为保留每个仓库中最近 7 天内拉取的制品。

在这种情况下,仓库 A 中的所有 100 个已标记制品都被保留,因为它们在最近 7 天内被拉取过。仓库 B 到 E 中的所有制品均未被保留,因为它们都没有在最近一周内被拉取过。在此示例中,保留了 100 个制品,而示例 1 中保留了 34 个制品。并且所有未标记的制品都将被删除。

示例 3

此示例使用与示例 2 相同的项目和仓库,但选中了“未标记的制品”,则仓库 A 中的所有制品都将被保留。

在这种情况下,仓库 A 中的所有 103 个制品都被保留,因为它们在最近 7 天内被拉取过。仓库 B 到 E 中的所有制品均未被保留,因为它们都没有在最近一周内被拉取过。在此示例中,保留了 103 个制品,而示例 2 中保留了 100 个制品。并且所有未标记的制品都将被保留。

标签保留规则和原生 Docker 标签删除

注意:如果一个制品有多个标签,并且只有一部分标签通过保留策略匹配,则该制品及其所有标签都将被保留。换句话说,保留在标签级别进行匹配,但保留/删除在制品级别执行,保留完全保留制品,包括其所有标签。

例如,您有以下标签,按推送时间顺序列出,所有标签都指向相同的 SHA 摘要

  • harbor-1.8,推送时间 2019 年 8 月 14 日凌晨 1:00
  • harbor-release,推送时间 2019 年 8 月 14 日凌晨 3:00
  • harbor-nightly,推送时间 2019 年 8 月 14 日凌晨 6:00
  • harbor-latest,推送时间 2019 年 8 月 14 日上午 9:00

您配置了一个保留策略,以保留与 harbor-* 匹配的两个最新标签,以便保留 harbor-nightlyharbor-latest。但是,由于所有标签都指向相同的 SHA 摘要,因此此策略还将保留标签 harbor-1.8harbor-release,因此所有标签都将被保留。

在仓库上组合规则

每个项目最多可以定义 15 个规则。您可以将多个规则应用于一个仓库或一组仓库。当您将多个规则应用于一个仓库时,它们以 OR 逻辑而不是 AND 逻辑应用。通过这种方式,在给定仓库上应用规则时没有优先级之分。规则在后台并发运行,每个规则的结果集在运行结束时合并。

示例 4

此示例使用与示例 1 和 2 相同的项目和仓库,但设置了两个规则

  • 规则 1:保留每个仓库中最近 7 天内拉取的所有制品。
  • 规则 2:在每个仓库中最多保留 10 个制品。

对于仓库 A,规则 1 保留所有 100 个已标记制品,因为它们都在最近一周内被拉取过。规则 2 保留最近拉取的 10 个制品。因此,由于这两个规则以 OR 关系应用,因此仓库 A 中保留了所有 100 个制品。

对于仓库 B-E,规则 1 将保留 0 个制品,因为最近一周内没有制品被拉取。规则 2 将保留所有 6 个制品,因为 6 < 10。因此,由于这两个规则以 OR 关系应用,对于仓库 B-E,每个仓库都将保留所有 6 个制品。

在此示例中,所有制品都将被保留。

示例 5

此示例使用与之前示例不同的仓库。

  • 您有一个仓库,其中包含 12 个标签

    生产 发布候选 发布
    2.1-your_repo-prod 2.1-your_repo-rc 2.1-your_repo-release
    2.2-your_repo-prod 2.2-your_repo-rc 2.2-your_repo-release
    3.1-your_repo-prod 3.1-your_repo-rc 3.1-your_repo-release
    4.4-your_repo-prod 4.4-your_repo-rc 4.4-your_repo-release
  • 您在此仓库上定义了两个标签保留规则

    • 保留 10 个最近推送的以 2 开头的制品。
    • 保留 10 个最近推送的以 -prod 结尾的制品。

在此示例中,规则应用于以下 8 个标签

  • 2.1-your_repo-prod
  • 2.1-your_repo-rc
  • 2.1-your_repo-release
  • 2.2-your_repo-prod
  • 2.2-your_repo-rc
  • 2.2-your_repo-release
  • 3.1-your_repo-prod
  • 4.4-your_repo-prod

由于没有未标记的制品,因此选中复选框没有任何区别。

标签保留规则如何与项目配额交互

Harbor 系统管理员可以设置项目可以包含的最大标签数量及其可以消耗的存储量。有关项目配额的信息,请参阅配置项目配额

如果您为项目设置了配额,则不能超过此配额。即使您设置的保留规则会超出配额,配额也适用于项目。换句话说,您不能使用保留规则来绕过配额。

配置标签保留规则

  1. 使用至少具有项目管理员权限的帐户登录到 Harbor 界面。

  2. 转到 项目,选择一个项目,选择 策略,然后选择 标签保留

    Tag options

  3. 单击 添加规则 以添加规则。

  4. 仓库 下拉菜单中,选择 匹配排除

    Select repositories

  5. 仓库 文本框中,标识要应用规则的仓库。

    您可以通过输入以下信息来定义要应用规则的仓库

    • 仓库名称,例如 my_repo_1
    • 以逗号分隔的仓库名称列表,例如 my_repo_1,my_repo_2,your_repo_3
    • 带有通配符的部分仓库名称,例如 my_**_3*_repo_*
    • ** 以将规则应用于项目中的所有仓库。

    如果您选择 匹配,则规则将应用于您标识的仓库。如果您选择 排除,则规则将应用于项目中除您标识的仓库之外的所有仓库。

  6. 按制品计数或天数 下拉菜单中,定义要保留多少标签或保留标签的期限。

    Select retention criteria

    选项 描述
    保留最近推送的 # 个制品 输入要保留的最大制品数量,保留最近推送的制品。制品没有最长有效期。
    保留最近拉取的 # 个制品 输入要保留的最大制品数量,仅保留最近拉取的制品。制品没有最长有效期。
    保留最近 # 天内推送的制品 输入要保留制品的天数,仅保留在此期间推送的制品。制品数量没有上限。
    保留最近 # 天内拉取的制品 输入要保留制品的天数,仅保留在此期间拉取的制品。制品数量没有上限。
    始终保留 始终保留此规则标识的制品。
  7. 标签 下拉菜单中,选择 匹配排除

  8. 标签 文本框中,标识要应用规则的标签。

    您可以通过输入以下信息来定义要应用规则的标签

    • 标签名称,例如 my_tag_1
    • 以逗号分隔的标签名称列表,例如 my_tag_1,my_tag_2,your_tag_3
    • 带有通配符的部分标签名称,例如 my_**_3*_tag_*
    • ** 以将规则应用于项目中的所有标签。

    如果您选择 匹配,则规则将应用于您标识的标签。如果您选择 排除,则规则将应用于仓库中除您标识的标签之外的所有标签。

  9. 单击 添加 以保存规则。

  10. (可选) 单击 添加规则 以添加更多规则,每个项目最多 15 个。

  11. (可选) 在“计划”下,单击 编辑 并选择规则的运行频率。

    Select retention criteria

    如果您选择 自定义,请输入 cron 作业命令以计划规则。

    注意:如果您定义了多个规则,则计划将应用于所有规则。您不能计划不同的规则在不同的时间运行。

  12. 单击 模拟运行 以测试您定义的规则。

  13. 单击 立即运行 以立即运行规则。

警告:运行规则后,您无法撤消规则。强烈建议在运行规则之前执行模拟运行。

要修改现有规则,请使用规则旁边的 操作 下拉菜单来停用、编辑或删除该规则。

Modify tag retention rules