2. Harbor 核心组件及其在存储链路中的角色

在深入探讨镜像存储成本优化之前,必须清晰理解 Harbor 的架构骨架。Harbor 采用微服务架构,核心组件包括 Proxy、Core、Registry 和 JobService。每个组件在制品的推送、拉取、复制和清理链路中承担特定职责,直接影响存储 I/O 路径与成本构成。

2.1 核心组件总览与职责矩阵

下表梳理了四个核心组件在存储链路中的主要角色、数据流向及成本影响点:

组件 核心职责 存储链路角色 成本影响点
Proxy (Nginx) 反向代理、TLS 终止、访问控制 请求入口,分发至 Core 或 Registry 缓存策略影响回源频率;日志存储量
Core API 服务、认证授权、项目管理、标签管理 元数据读写(数据库),不直接操作镜像层 数据库 I/O 与存储;审计日志
Registry 镜像层(Blob)存储与分发(Docker Distribution) 实际读写对象存储或文件系统 主要成本来源:层数据存储、冗余层、跨区域复制流量
JobService 异步任务调度:复制、GC、扫描、清理 触发跨实例复制、垃圾回收、标签清理 复制流量成本;GC 后存储释放效率
成本视角提示: Registry 是存储成本的核心载体,但 Proxy 的缓存策略和 JobService 的清理调度同样显著影响总体存储账单。优化不能只关注 Registry 本身。

2.2 组件交互与存储链路流程

下图展示了 Harbor 核心组件在典型镜像推送流程中的交互关系,以及数据在存储链路中的实际流向:

Harbor 核心组件存储链路交互图 Harbor 核心组件存储链路交互图(镜像推送场景) Docker Client Proxy (Nginx) Core Service Registry JobService 对象存储 / NFS PostgreSQL 推送请求 认证/元数据 授权令牌 Blob 数据 写入层 推送完成 异步任务 元数据持久化 存储链路关键说明: 1. 推送请求先经过 Proxy,由 Core 完成认证与项目校验。 2. 认证通过后,Client 直接向 Registry 推送镜像层(Blob)数据。 3. Registry 将 Blob 写入后端存储(对象存储或文件系统),Core 记录元数据到数据库。 4. 推送完成后,JobService 可被触发执行复制、扫描或清理任务。 5. 成本优化重点:Registry 的存储后端选择、Blob 去重、JobService 的清理策略。

2.3 各组件在存储链路中的详细角色

2.3.1 Proxy (Nginx) — 流量入口与缓存层

  • 角色:所有外部请求的第一站,负责 TLS 卸载、速率限制、访问日志记录。
  • 存储链路影响:可配置 proxy_cache 缓存 Blob 元数据或清单文件,减少对 Registry 的重复请求,降低后端存储 I/O。
  • 成本关联:日志存储量(建议轮转压缩);缓存命中率直接影响 Registry 负载。

2.3.2 Core Service — 元数据管理者

  • 角色:提供 RESTful API,管理项目、用户、标签、机器人账户、复制规则等。
  • 存储链路影响:不直接读写镜像层数据,但所有元数据(镜像清单、标签引用、层关系)存储在 PostgreSQL 中。
  • 成本关联:数据库存储与备份成本;审计日志增长(建议定期归档)。

2.3.3 Registry — 镜像层存储核心

  • 角色:基于 Docker Distribution 实现,负责 Blob 的存储、去重、分发。
  • 存储链路影响:直接与后端存储(S3、GCS、Azure Blob、NFS 等)交互。每个镜像层存储为一个独立 Blob,通过 digest 进行内容寻址去重。
  • 成本关联:最大成本来源。存储空间(冗余层、未清理的旧层)、跨区域复制流量、请求次数(GET/PUT 计费)。
优化关键点:Registry 的存储后端选择(对象存储 vs 本地文件系统)、Blob 去重效率、存储桶生命周期策略、定期 GC 释放未引用层。

2.3.4 JobService — 异步任务调度器

  • 角色:执行复制、垃圾回收(GC)、镜像扫描、标签清理、Webhook 等异步任务。
  • 存储链路影响:复制任务触发跨实例的 Blob 传输(产生网络与存储成本);GC 任务扫描并删除未被任何清单引用的 Blob,释放存储空间。
  • 成本关联:复制流量成本;GC 执行频率与效率直接影响存储账单。

2.4 存储链路中的成本敏感路径

基于组件角色,以下路径是成本优化的重点区域:

  1. 推送路径:Client → Proxy → Registry → 存储后端。优化点:压缩传输、避免重复推送相同层。
  2. 拉取路径:存储后端 → Registry → Proxy → Client。优化点:Proxy 缓存、CDN 回源策略。
  3. 复制路径:源 Registry → JobService → 目标 Registry → 目标存储。优化点:增量复制、跳过已存在层。
  4. 清理路径:JobService → Registry → 存储后端(删除 Blob)。优化点:定期 GC、标签保留策略。

2.5 组件配置对存储成本的影响总结

组件 配置项 成本影响方向 建议
Proxy 缓存大小 / 缓存有效期 减少 Registry 请求次数 根据访问模式设置合理缓存 TTL
Core 审计日志保留天数 数据库存储增长 设置 30-90 天自动清理
Registry 存储驱动(filesystem / s3 / gcs) 直接决定存储单价与性能 优先选择对象存储并启用生命周期
Registry GC 定时策略 释放未引用层空间 每日低峰期执行 GC
JobService 复制规则(同步/异步、过滤条件) 跨区域流量与存储冗余 使用过滤器避免全量复制
常见误区:仅关注 Registry 的存储后端单价,而忽略 Proxy 缓存命中率、JobService 复制策略和 GC 频率。完整的成本优化需要从组件交互链路出发,系统性识别冗余存储与无效流量。