最佳实践 · 云原生与容器

待环境验证

Harbor 保留规则与 GC 安全检查

核对运行与回退镜像摘要,区分保留规则、不可变策略和垃圾回收,以双重预演、独立审批和冷拉取防止误删。

CI/CDDocker制品管理
阅读导引 · 理解后再操作

这篇知识解决什么问题

本篇把容量治理解释为先证明保护集合完整,再说明删除候选和实际释放量。标签、制品与共享 blob 属于不同层,项目保留和系统 GC 也有不同审批边界;诊断只审阅既有规则、任务及验收记录,不通过再跑清理任务来验证容量假设。

删除候选是有时效的业务结论

最近未拉取或无标签只是仓库元数据,无法证明镜像不再被长周期工作负载、恢复计划或离线环境引用。保护集合应来自部署、发布及业务责任人,并带复查时间;预演之后新上传或恢复窗口变化都会影响候选,历史清单不能自动延长为当前删除批准。

制品可用性与空间释放分别回答

保留任务改变制品及引用关系,GC 才处理符合条件的底层数据,共享层和存储保留机制还会影响释放口径。应同时核对保护对象的已有冷拉取证据与同口径容量趋势;标签减少不证明释放达标,空间下降也不证明运行和恢复制品仍然可用。

进入文章正文
关联架构图解7 个组件 · 点击展开

引用场景图中保护摘要、项目保留、系统 GC 与冷拉取证据的分层关系,图示不是同一按钮触发的自动流水线。Harbor main 文档仅作机制参考,真实版本、存储后端和不可变规则行为仍需现场复核。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

Harbor 保护集合、标签保留与 GC 双阶段架构

先固定运行和恢复所需镜像摘要,再审阅项目保留与系统 GC 两套候选;清理后按摘要无缓存拉取验收,分别记录制品可用性和真实空间释放。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

Harbor 保护集合、标签保留与 GC 双阶段架构:组件关系图先固定运行和恢复所需镜像摘要,再审阅项目保留与系统 GC 两套候选;清理后按摘要无缓存拉取验收,分别记录制品可用性和真实空间释放。 镜像保护集合 → 项目保留规则:排除保护摘要;项目保留规则 → Harbor 制品目录:获批保留删除;镜像保护集合 → Harbor 制品目录:不可变与保留保护;Harbor 制品目录 → 系统级 GC:引用与候选核对;系统级 GC → 底层镜像存储:获批 blob 回收;底层镜像存储 → Harbor 制品目录:提供镜像内容;Harbor 制品目录 → 无缓存验收节点:镜像内容响应;系统级 GC → 容量与可用性证据:任务与释放量;无缓存验收节点 → 容量与可用性证据:冷拉取验收。箭头说明见下方流向解读。
Harbor main 文档对应的逻辑参考图,操作前必须切换到实际部署版本核对;不表示已删除制品或已执行 GC。

镜像保护集合

控制 / 治理

从部署、发布和业务负责人收集精确摘要,覆盖多平台索引、计划版本、恢复版本及调查保全对象。

全部组件职责 7 个组件
镜像保护集合
从部署、发布和业务负责人收集精确摘要,覆盖多平台索引、计划版本、恢复版本及调查保全对象。
项目保留规则
审阅规则组合、标签匹配和 untagged 选项,候选与保护集合有交集就停止。工具介绍 项目保留规则
Harbor 制品目录
标签、artifact 和共享 blob 是不同层;不可变规则与实际引用关系需按部署版本核对。工具介绍 Harbor 制品目录
无缓存验收节点
预先准备不含目标镜像缓存的独立节点,冷拉取会消耗网络和本地存储,但不运行容器。工具介绍 无缓存验收节点
底层镜像存储
按文件或对象存储实际口径观察用量,标签消失不代表底层字节立即释放。
系统级 GC
在保留任务后单独审阅全系统可清理对象、近期上传保护与 untagged 行为,不能复用单项目审批范围。工具介绍 系统级 GC
容量与可用性证据
记录两阶段预演、正式任务、冷拉取和实际释放量,后续定时规则仍需业务批准。
流向解读 9 条连接
  1. 1

    镜像保护集合 项目保留规则

    控制 / 管理 · 排除保护摘要

    保护集合以实际部署与恢复需求为依据,最近未拉取不代表不再使用。

  2. 2

    项目保留规则 Harbor 制品目录

    控制 / 管理 · 获批保留删除

    预演通过并复查候选变化后才分批执行;改变规则不能撤销已发生的删除。

  3. 3

    镜像保护集合 Harbor 制品目录

    控制 / 管理 · 不可变与保留保护

    按实际版本评审不可变标签及关联 artifact 的保护范围,不全局取消不可变规则。

  4. 4

    Harbor 制品目录 系统级 GC

    控制 / 管理 · 引用与候选核对

    图示独立 GC 的审阅输入,不表示保留结束便自动触发全系统清理。

  5. 5

    系统级 GC 底层镜像存储

    控制 / 管理 · 获批 blob 回收

    GC 是删除操作而非业务数据搬运;停止能力与保护窗口按部署版本核对。

  6. 6

    底层镜像存储 Harbor 制品目录

    数据 / 请求 · 提供镜像内容

    仓库读取仍有合法引用的镜像数据,底层共享与版本保留影响容量口径。

  7. 7

    Harbor 制品目录 无缓存验收节点

    数据 / 请求 · 镜像内容响应

    无缓存验收节点主动按摘要拉取,仓库返回镜像内容;用目标平台和完整性证明保护对象仍可用。

  8. 8

    系统级 GC 容量与可用性证据

    观测 / 查询 · 任务与释放量

    记录任务 ID、日志及存储指标,不以删除标签数量代替实际释放量。

  9. 9

    无缓存验收节点 容量与可用性证据

    观测 / 查询 · 冷拉取验收

    保护样本从无缓存环境拉取成功才构成该样本可用证据,未测试项明确保留。

故障域与操作边界

删除与 GC 不存在规则级回滚

恢复旧规则不能找回已删除的 artifact 或 blob;恢复依赖事先验证的独立备份流程,不是点击撤销。

系统 GC 可能跨项目影响

单项目保留批准不覆盖全系统 GC;共享 blob、近期上传和 untagged 选项必须按实际版本复核。

运行与恢复版本都要保护

保护范围覆盖多架构索引及平台 manifest,不能清除仍用于发布恢复或调查保全的镜像。

架构依据与版本核对 3 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与验证状态

本文面向已有 Harbor 的容量治理,验证等级为 PENDING;没有执行真实仓库清理。参考 Harbor main 文档说明能力边界,main 不是部署版本承诺,实际操作前必须切换到已安装版本的文档,复核界面、权限、任务选项及已知限制。详细八步流程见 Harbor 镜像保留与安全空间回收

治理目标不是“删除最多标签”,而是保护运行、发布、回退和调查保全制品后,释放已获批准的容量。先指定项目负责人、系统管理员、验收人和停止决策人;不能把一个项目的清理申请理解为对全站镜像存储的删除授权。

分清标签、artifact 与实际存储

标签是可读名称,摘要用于标识确定内容,同一 artifact 可以关联多个标签。删除一个标签不一定移除 artifact,移除 artifact 也不意味着底层空间立即释放,共享 blob、快照和对象存储保留策略都会影响实际容量。报告中分别列出项目配额、制品数量、底层存储容量和增长趋势,避免混用口径。

保留规则选择需要留下的对象;垃圾回收处理后端符合回收条件的数据,两者不是一个动作。不可变标签提供额外保护,但不是备份机制,也不能补足漏掉的回退镜像清单。Harbor GC 说明

先找“不能删的”,再找候选

从已部署工作负载、发布记录、计划发布清单及业务确认获取运行与回退摘要,保留 CPU 架构/操作系统信息。镜像索引和平台 manifest 需要关联检查,不用一个本机架构的拉取结果推断其他架构也可恢复。调查保全、应急工具镜像和离线环境镜像同样要有责任人。

下面是评审记录模板,不是可提交到 Harbor 的 API 请求。摘要和仓库名应来自实际受控记录;每个字段都需核验后填写。

change_id: '<APPROVED_CHANGE_ID>'
harbor_version: '<INSTALLED_VERSION>'
project: '<APPROVED_PROJECT>'
protected_digest: 'sha256:<VERIFIED_DIGEST>'
platform: '<OS/ARCH>'
retention_reason: '<RUNNING/ROLLBACK/LEGAL_HOLD>'
owner: '<RESPONSIBLE_OWNER>'
reviewed_at: '<TIME_WITH_TIMEZONE>'

长期运行的 Pod 可能很久没有重新拉取镜像,无标签制品也可能按摘要被引用。因此“最近未拉取”“没有标签”“不是 latest”都不是独立的删除依据。保护清单不完整时应停止清理,先解决资产归属。

保留规则的三个常见误判

第一,多条规则不是按优先级依次过滤;官方说明规则结果按 OR 合并。第二,同摘要多标签会影响实际 artifact 保留结果,不能用简单的标签计数推算释放空间。第三,untagged 选项需要显式审阅,不能因为界面里没有发布标签就默认允许移除。标签保留规则

先在指定项目和仓库范围预演,用边界样本检查名称匹配:正式发布、预发布、回退版本、同摘要别名和无标签对象各选一例。保存策略差异及任务结果,而不只是截图一个“成功”。如果候选中出现保护摘要,修改规则后重新预演,不能先执行再靠人工补标签。

不可变策略与备份各自负责什么

不可变规则可以防止受保护标签被覆盖,并保护关联 artifact 的删除边界;它不是“所有其他标签永远不能删”的同义词。需要在测试项目验证具体版本的行为,再把明确的发布命名规则纳入治理,不为使清理成功而临时关闭整个项目的保护。不可变标签规则

备份则解决误删、存储损坏或实例恢复问题,需要数据库、镜像数据、配置和秘密材料相互匹配。只有把受控样本恢复到独立环境并验证可拉取,才能作为本次清理的恢复依据。Harbor 官方 Velero 示例针对 Kubernetes/Helm 场景,不能不经适配直接套给所有安装形态或外部存储。备份部署形态说明

两阶段预演与独立审批

先做项目保留策略预演,审阅候选,再在批准范围执行保留。之后另做 GC Dry Run,审阅系统级候选、选项和预计释放量;GC 的影响范围可能超出刚才的单项目。两份记录应绑定任务 ID、规则版本、时间和审批范围。预演会产生任务日志,不应称为完全没有平台副作用,但它不执行正式删除。

从预演到执行之间仍可能有新上传、新发布或回退窗口变化,因此执行前必须重新核对候选与保护集合。不要把一个昨天生成的列表当作今天仍然成立的授权。GC 的近期上传保护和在线执行行为按实际版本核对,不把其机制当作免审批或无性能影响的保证。

冷拉取验收与空间核算

在事先准备的无目标缓存验收节点,使用已有受控凭据按批准摘要拉取运行和回退样本。以下命令会下载到本地并消耗网络/磁盘,但不运行镜像;需要明确授权、容量和可信 TLS,不把账号密码拼进命令行。

docker pull 'registry.example.invalid/<PROJECT>/<REPOSITORY>@sha256:<VERIFIED_DIGEST>'

摘要固定解决“拉到哪一份”的问题,不证明镜像安全或兼容业务;也不能只看已有缓存命中。对于多架构发布,应按已批准的平台清单分别验证必要内容,而不是下载全部历史标签。记录访问身份、目标摘要、平台、实际结果及时间。Docker 按摘要拉取

空间验收使用相同口径的前后指标:共享层、存储快照和对象版本保留可能让物理释放量与预演估计不同。容量未达到目标时先解释差异,不连续触发回收或绕过 Harbor 直接删除底层文件。

停止不能撤销已经发生的删除

如果实际候选偏离审批、拉取失败、任务报错或存储延迟超出约定阈值,停止后续批次;对运行中的 GC 按部署版本提供的方式请求停止。停止只能限制继续处理,不会恢复已经回收的数据。编辑规则、重新启动任务或重新打同名标签都不等于恢复原内容。

误删后先冻结后续清理,保留日志和候选,使用已经验证的备份恢复路径,重新核对摘要与权限。若必须从源码重建,产物摘要可能变化,应作为新的发布与审批处理,而不是悄悄替换旧标签。交接时保留保护集合、双预演、批准任务、容量前后值、冷拉取证据及未覆盖项目。组件的发布与扫描职责见 镜像仓库运行手册

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 标签数量已经明显减少,后端实际容量却几乎没有变化,项目配额和物理用量被混成同一张指标图。

    只读核对
    只读比对保留与 GC 的既有任务结果、共享引用、存储快照及对象版本策略,核对前后指标是否采用相同口径。
    如何判读
    可能是尚未回收、共享 blob 或后端保留差异;不能由标签数估算实际释放,更不能直接删除底层文件补齐目标。
  2. 预演候选出现无标签或长期未拉取镜像,但部署记录仍可能按摘要引用,部分平台映射没有纳入保护。

    只读核对
    读取现有保护集合、部署和恢复清单及索引到平台 manifest 的映射,和该次预演候选逐项核对来源与时间。
    如何判读
    缺少近期拉取不是可删除证据,保护遗漏和多平台关系都需先补齐;候选交集未排除前不能视为已获批准。
  3. GC 任务显示成功,本地样本检查也正常,但验收记录没有说明缓存状态、实际摘要或目标平台。

    只读核对
    只读审阅任务 ID、仓库请求和既有无缓存验收报告,核对身份、摘要、平台及完整内容下载是否有对应证据。
    如何判读
    缓存可能掩盖远端缺失,单个平台成功也不覆盖全部发布;没有独立验收材料时应保留可用性待验证状态。
常见误区与判断边界 2 项

修改保留规则就能撤销删除

规则修订只能影响后续选择,已经移除的 artifact 或 blob 不会因此回来,停止 GC 也只能限制继续处理。恢复需要先前验证的备份与精确内容身份;源码重建可能产生新摘要,不能悄悄给旧标签换内容并宣称已原样回滚,更不能丢弃原任务证据。

把单项目审批扩展为全系统 GC

两阶段任务影响范围不同,系统候选可能覆盖其他项目或共享对象,近期上传和 untagged 选项也随版本行为变化。应分别保留预演、选项与批准目标,不能因为项目保留通过就自动授权系统回收;在线执行不代表无需容量预算和业务观察。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 保存实际 Harbor 版本、安装和存储形态,以及项目配额、制品数量、物理容量的独立口径,说明前后比较的时间窗口。
  • 记录运行、发布、恢复和保全摘要及平台映射、责任人和复查时间,与现有候选对照后保留所有保护交集和未确认引用。
  • 分别归档项目保留与系统 GC 的预演、规则版本、任务 ID、选项及审批范围,明确预演后发生的上传或发布变化。
  • 交接已有冷拉取的缓存状态、身份、摘要、平台与结果及真实释放量,误删恢复来源和未覆盖项目保持独立待办状态。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。