适用范围与验证状态
本文面向已有 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 按部署版本提供的方式请求停止。停止只能限制继续处理,不会恢复已经回收的数据。编辑规则、重新启动任务或重新打同名标签都不等于恢复原内容。
误删后先冻结后续清理,保留日志和候选,使用已经验证的备份恢复路径,重新核对摘要与权限。若必须从源码重建,产物摘要可能变化,应作为新的发布与审批处理,而不是悄悄替换旧标签。交接时保留保护集合、双预演、批准任务、容量前后值、冷拉取证据及未覆盖项目。组件的发布与扫描职责见 镜像仓库运行手册。